Железная поступь Астралинуха

Jan 10, 2024 18:09

Как бы глупые люди не надеялись на возврат старых времён "если кончится война", но он увы вам, невозможен. Другие глупые люди до сих пор надеются, что если "Мы им там жёстко ответим, то Запад отползёт и пойдёт на мировую". Они как бэ не замечают, что этот самый Запад после провала укропского контрнахрюка, убедившись, что хохлами Россию не одолеть начал милитаризироваться сам и готовить уже своих граждан на бойню. Испуганные чужой силой империалисты не отползают - они всегда начинают готовиться к новой, более мощной и тотальной войне.

А это значит, что у нас таки наступает давно жаждаемый красноглазиками 90-х "вендекапец". Переход на Астру будет идти потихоньку, незаметно как сейчас, потом спокойно, потом лавинообразно. Для тех, кто предвидит неизбежный уход с Виндовс, но боится сделать этот шаг, АК запилила описание как она переводила 1С Бухгалтерию на сервер под Линуксом.

----------------------------------------------------------

ПЕРЕНОС СЕРВЕРА БУХГАЛТЕРИИ НА LINUX

Тем кому интересен опыт переноса сервера с Windows на Linux в силу разных причин, например обязательно переходить на AstraLinux, расскажу о своем опыте. Я конечно не буду устанавливать Астру, потому что предпочитаю исходный Debian. Однако я полагаю что все написанное для Debian будет применимо и линуксу отечественного розлива.

Задача состоит из двух частей - перенос непосредственно баз данных 1С:Предприятие и перенос файлов отдела бухгалтерии. Начнем с переноса файлового сервера. Установка будет производиться на Linux Debian 12.

Установка Samba-сервера с подключением к Active Directory.

При установке Debian или позже в настройках сети зададим серверу постоянный IP-адрес. Как вариант мы можем сделать резервирование в своем DHCP-сервере. После чего имя FDQN:

# hostnamectl set-hostname server.net.local

Установим демон времени и синхронизируем время с контроллером домена:

# apt install ntp ntpdate

После установки демона откроем файл с настройками /etc/ntp.conf и перед списком pool указываем контроллер домена, например server dc.net.local

Перезапускаем демон:

# systemctl restart ntp

Можно проверить время:

# data

Если все нормально и время совпадает с КД, то устанавливаем Kerberos.

# apt install krb5-user

Открываем файл настроек /etc/krb5.conf и указываем свои данные примерно следующим образом:

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = NET.LOCAL
dns_lookup_kdc = false
dns_lookup_realm = false
forwardable = true
ticket_lifetime = 24h
[realms]
NET.LOCAL = {
kdc = dc.net.local
kdc = dcreserv.net.local
default_domain = NET.LOCAL
admin_server = dc.net.local
}
[domain_realm]
.net.local = NET.LOCAL
net.local = NET.LOCAL

После этого перезагружаем полностью сервер:

# systemctl reboot

Проверяем работу Kerberos:

# kinit admin@NET.LOCAL

Обращаю внимание что писать домен надо именно большими буквами так же как в примере. В Unix-like системах регистр символов в отличии от винды имеет значение. После ввода команды нам потребуется ввести пароль администратора домена. После чего вводим:

# klist

Должно появиться примерно такое вот:

Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin@NET.LOCAL
Valid starting Expires Service principal
22.12.2023 00:27:51 22.12.2023 10:27:51 krbtgt/NET.LOCAL@NET.LOCAL
renew until 30.12.2023 00:27:45

Если все получилось, то можно удалить тикет:

# kdestroy

Теперь можно установить сервер Samba:

# apt install samba cifs-utils winbind libnss-winbind libpam-winbind

Отредактируем файл конфигурации samba /etc/samba/smb.conf заполним секцию global примерно следующим образом:

[global]
realm = NET.LOCAL
workgroup = HOMENET
security = ads
encrypt passwords = yes
netbios name = server
server string = %h, My server %v
domain master = no
local master = no
preferred master = no
os level = 0
domain logons = no
dns proxy = no
socket options = TCP_NODELAY
unix charset = UTF-8
dos charset = 866
idmap config * : backend = tdb
idmap config * : range = 3000-7999
idmap config NET : backend = rid
idmap config NET : range = 10000-999999
winbind enum users = yes
winbind enum groups = yes
winbind refresh tickets = yes
winbind use default domain = yes
winbind offline logon = yes
winbind cache time = 300
template homedir = /srv/share/users/%D/%U
template shell = /bin/bash
load printers = no
show add printer wizard = no
printcap name = /dev/null
disable spoolss = yes
log level = 0 vfs:1

Проверяем конфигурацию Самбы:

# testparm

Если все нормально, то увидим:

Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER
Press enter to see a dump of your service definitions

После нажатия Enter увидим свой конфиг.

Далее увеличим лимит одновременно открытых файлов до 16384. Для этого открываем /etc/security/limits.conf и в самом конце допишем такие строки:

* - nofile 16384
root - nofile 16384

Перезагрузим сервер. После подключим нашу Самбу к домену:

# net ads join -U admin@net.local

Потребуется снова ввести пароль администратора домена и после консоль покажет такой результат:

Using short domain name -- NET
Joined 'SERVER' to dns domain 'net.local'

Чтобы видеть пользователей и группы домена, настроим демон winbind. Для этого открываем файл /etc/nsswitch.conf и изменим параметры passwd и group на следующие:

passwd: files winbind
group: files winbind

Перезапустим winbind

# systemctl restart winbind

Проверяем доверительные отношения с КД:

# wbinfo -t

Мы должны увидеть:

checking the trust secret for domain HOMENET via RPC calls succeeded

Теперь мы можем посмотреть пользователей и группы из нашего домена:

# wbinfo -u
# wbinfo -g

Если все выводит то все настроено правильно. В противном случае может помочь перезагрузка.

И после этого мы наконец-то можем приступить к настройке ресурсов общего доступа. Создадим сами папки, где будут располагаться файлы на диске своего сервера через mc или командой

# mkdir /data/shared

В секции Share Definition файла конфигурации Самбы создадим нужные нам общие ресурсы, таким примерно образом:

[Shared] # имя общего ресурсы
writable = yes # разрешить запись в каталог

valid users = admin, @group1, user1, user2 # разрешить доступ админу группе 1 и двум отдельным пользователям
create mask = 0777 # задать всем права на запись/чтение и исполнение
directory mask = 0777
path = /data/shared # указать путь к конечной папке

Задав настройки нужных общих ресурсов, перезагружаем Самбу:

# systemctl restart smbd
# systemctl restart nmbd

Теперь можно переносить любым удобным способом файлы со старого сервера. Сразу скажу если это был сервер с Windows все разрешения будут стерты и по окончанию копирования права надо задать по новой, но в рамках Unix уже:

# chmod -R 0777 /data/shared
# chown -R admin:'Пользователи домена'

Эти команды делают владельцами всех файлов и папок внутри указанной папки админа и группу пользователей домена и разрешают им всем запись/чление и исполнение. При этом Cамба даст авторизоваться и войти в общие ресурсы только тем пользователям которые указаны в настройках опции valid users. Вложенные внутрь каталоги даже если будут содержать права разрешающие использование большему количеству пользователей все равно не будут им доступны. Важно это понимать при настройках доступа.

Если ваша 1С база файловая, то на этом настройка сервера закончена, просто поместите файлы с базой в папку общего ресурса и укажите путь в настройках программы как обычно:

//server/shared/1Cbase/

Если ваш вариант был на базе MS SQL или просто хотите перейти от файлового к базам данных то дальше я расскажу об установке сервера 1С на Linux.

Установка сервера 1С на базе Linux + PostgreSQL

Вторая часть статьи предполагает перенос сервера 1C на Linux + БД PostgreSQL. Первое что тут надо понимать, что обычная БД PostgreSQL которая предоставляется в репозитории любого дистрибутива Linux не годится для 1С. Тут нужна специальная пропатченная под 1С. Таких вариантов два: первый скачать с сайта 1С имя подписку ИТС, а второй вариант использовать PostgreSQL PRO. И именно этот второй вариант я и выбираю, потому что по отзывам других администраторов проблем и возни с ним меньше. А мне и думаю большинству если они только не являются экспертами в базах данных нет никакой необходимости разбираться в тонких настройках тюнинга Postgres и надо сделать чтобы работало здесь и сейчас. И оно будет хорошо работать наверное в 99% случаев при условии конечно нормального сервера с мощным железом а не PC с ролью сервера. Итак, определившись с действиями начнем.

Первый этап будет подготовительным. Сначала настроим локаль:

# dpkg-reconfigure locales

Необходимо выбрать ru_RU.UTF-8 UTF-8 и en_US.UTF-8. По умолчанию выбрать ru_RU.UTF-8 UTF-8. Это очень важно для корректного отображения в программе 1С.

Теперь заменим родные репозитории на яндексовские в файле настроек /etc/apt/sources.list

deb http://mirror.yandex.ru/debian bookworm main contrib non-free
deb-src http://mirror.yandex.ru/debian bookworm main contrib non-free

deb http://security.debian.org/debian-security bookworm-security main non-free-firmware
deb-src http://security.debian.org/debian-security bookworm-security main non-free-firmware

deb http://mirror.yandex.ru/debian bookworm-updates main contrib non-free
deb-src http://mirror.yandex.ru/debian bookworm-updates main contrib non-free

После этого обновим репозитории:

# apt update

После этого можно устанавливать необходимые пакеты:

# apt install ttf-mscorefonts-installer
# apt install imagemagick unixodbc sudo curl

Последний нужный пакет не получится установить из репозитория, его придется скачать отдельно.

# wget http://ftp.de.debian.org/debian/pool/main/e/enchant/libenchant1c2a_1.6.0-11.1+b1_amd64.deb
# dpkg -i libenchant1c2a_1.6.0-11.1+b1_amd64.deb

Если будет ругаться при попытке установки пакета, то вводим команду:

# export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Добавьте эту строку в файл /root/.bashrc и тогда не придется каждый раз вводить эти пути. Теперь когда все готово, можно приступить непосредственно к установке сервера баз данных.

Скачать PostgreSQL PRO можно бесплатно с сайта https://1c.postgres.ru Здесь предстоит ответить на простые вопросы и на почту пришлют инструкцию по установке Postgres. Она тоже будет простой:

# wget https://repo.postgrespro.ru/1c-15/keys/pgpro-repo-add.sh
# sh pgpro-repo-add.sh
# apt-get install postgrespro-1c-15

На этом установка БД завершена, запустится она автоматически. Добавим сервис в автозагрузку, и проверим статус:

# systemctl enable postgrespro-1c-15
# systemctl status postgrespro-1c-15

Теперь можно приступить к настройке БД. Сначала зададим пароль для пользователя postgres который и будет паролем администратора БД.

# sudo -u postgres /usr/bin/psql -U postgres -c "alter user postgres with password 'your_password';"
ALTER ROLE

ВАЖНО!!! Запишите себе этот пароль, чтобы потом не забыть. Как я уже ранее упоминала мы не будем касаться тонких настроек, а коснемся только необходимого минимума. Настройки базы данных находятся в файле /var/lib/pgpro/1c-15/data/postgresql.conf. Мы изменим два параметра, первый количество подключений:

max_connections = 100

Даже при небольшом количестве фактических пользователей они зачастую запускают сразу несколько сеансов с разными базами + фоновые задачи самого сервера 1С. А теперь изменим объем памяти для кэша страниц, по данной формуле, исходя из своего размера оперативной памяти всего сервера:

shared_buffers = RAM/4

Так, для сервера к примеру с памятью 32 Гб, это значение будет 8. Теперь изменим настройки подключения в файле /var/lib/pgpro/1c-15/data/pg_hba.conf

# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 0.0.0.0/0 md5

Метод авторизации только md5, по умолчанию будет peers, но с ним работать не будет и мы постоянно будем получать ошибку невозможности подключения к сокету. В адресах понятно что на свое усмотрение из каких сетей разрешать подключение. После этого надо перезагрузить сервер Postgres для применения изменений:

# systemctl restart postgrespro-1c-15

На этом этапе можно подключить какую-нибудь тестовую БД через свою консоль администрирования 1С еще на старом сервере если такой есть и погонять чтобы получше узнать узкие места и какие-нибудь параметры в настройках сервера подкрутить. Или двигаться дальше. И следующий шаг после установки Postgres - это установка сервера 1С и импорт баз данных.

На сайте ИТС необходимо скачать файл, который называется Технологическая платформа 1С:Предприятия (64-bit) для Linux, это будет server64_8_3_22_1851.tar.gz и любым способом передать его на свой сервер. Распакуем его в отдельную папку:

# mkdir 1c-server
# mv server64_8_3_22_1851.tar.gz 1c-server/
# cd 1c-server/
# tar xzvf server64_8_3_22_1851.tar.gz

В результате получится пакетный установщик setup-full-8.3.22.1851-x86_64.run. Сделаем его исполняемым и запустим:

# chmod 0777 setup-full-8.3.22.1851-x86_64.run
# ./setup-full-8.3.22.1851-x86_64.run --mode unattended --enable-components server

В случае если нужна публикация баз на веб-сервере то добавляем компонент ws через запятую после компонента server. Список всех опций есть в документации.
Зарегистрируем сервер и добавим в автозагрузку:

# systemctl link /opt/1cv8/x86_64/8.3.22.1851/srv1cv8-8.3.22.1851@.service
# systemctl start srv1cv8-8.3.22.1851@.default
# systemctl enable srv1cv8-8.3.22.1851@.service

На этом установка сервера 1С закончена. Установим консоль управления на своем компьютере с Windows, для этого скачаем с сайта Технологическую платформу для Windows и в графическом установщике выберем компоненты Администрирование серверов 1С Предприятия x86-64 и 1С:Предприятие 8. Версия платформы для подключения к серверу должна совпадать с той что была скачана для Linux. Теперь надо зарегистрировать компоненту, обычно в меню программы 1С предприятия будет такой пункт, запускать регистрацию надо только из под администратора (запуск от администратора). Когда мы подключимся к консоли кластера 1С просто указываем в настройках адрес или имя сервера и далее создаем БД как обычно с использованием пароля пользователя postgres

На этом этапе если у вас был ранее другой 1С сервер, то прежде чем переносить лицензию нам необходимо выгрузить из него все базы. Делается это запуском 1С в режиме конфигуратора, далее выгружаем базу в виде файла .*dt Если конфигурация нестандартная, то выгружаем конфигурацию в файле *.cf Тоже самое касается и файлового варианта.

После того как все базы выгружены, можно переносить лицензии. Здесь важно чтобы у вас были на руках комплекты с регистрационным номером продукта, регистрационными данными и пин-кодами если лицензия программная, если аппаратная то просто переносим ключ и устанавливаем HASP с официального сайта https://download.etersoft.ru/pub/Etersoft/HASP/stable/x86_64/Debian Рассматривать установку HASP я не буду потому что моя лицензия программная. И для ее переноса нужно просто вписать все коды и регистрационные данные после чего сервер успешно запустится и папке /var/1C/licenses появятся файлы лицензий.

ВАЖНО!!! После перенесения баз со старого сервера перед установкой программной лицензии на новом сервере необходимо старый сервер выключить иначе лицензия может заблокироваться!

После успешного получения лицензий выгружаем в конфигураторе все наши базы из файлов *.dt в новые только что созданные из консоли администрирования. Если необходимо обновление конфигураций обновите их как обычно из режима конфигуратора в 1С.

Сервер баз данных не мыслим без регулярного бэкапа. Данный скрипт делает бэкап всех баз данных кроме служебных и теста гилева.

#!/bin/bash
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
KEEP=3 # количество копий хранения
USER=postgres # имя пользователя БД
LOGDIR=/data/log/backup # каталог где будут храниться логи бэкапа
DIR=/data/backup # каталог где будут храниться сами бэкапы
STAMP=$(date +"%Y-%m-%d-%H:%M") # время
NOW=$(date +"%Y-%m-%d") # дата
DBS="$(psql -U $USER -lt |awk '{ print $1}'|egrep -v 'template|postgres|gilev'| tr -d '|')" # список баз
export PGPASSWORD=yourpass # пароль от БД

logit ()
{
STAMP=$(date +"%Y-%m-%d-%H:%M")
echo " $STAMP $1 $2 $3 $4 $5 $6 $7" >> $LOGDIR/$NOW-log.txt
}

for db in $DBS
do
logit "Clear old archives of $db keep $KEEP "
BACKUPS=`find $DIR -name "$db.*.gz" | wc -l | sed 's/\ //g'`
while [ $BACKUPS -ge $KEEP ]
do
ls -tr1 $DIR/$db.*.gz | head -n 1 | xargs rm -f
BACKUPS=`expr $BACKUPS - 1`
done
FILE=$DIR/$db.$NOW-$(date +"%H"-"%M").gz
pg_dump -U $USER $db | gzip -c > $FILE
logit "backup $db to $FILE done "
done
logit "Dump End"
unset PGPASSWORD
find $LOGDIR -type f -mtime +31 -delete

Добавим скрипт в крон для автоматического выполнения каждую ночь.
# su postgres
$ crontab -e

Напишем примерно такую вот строку и тогда наш скрипт будет запускаться сам каждую полночь.

0 0 * * * sh /data/scripts/backup.sh

Можно добавить как вариант задачи на переиндексацию и сжатие (вакуумизация) баз, но в принципе у постгреса есть автовакуум и я предполагаю устраивать обслуживание вручную при обновлении конфигурации.

----------------------------------------------------------

компьютеры, профессиональное

Previous post Next post
Up