Автор Тема: Сервер 1С на AltLinux p8\p9. Пошаговое развертывание.  (Прочитано 6241 раз)

Оффлайн freddyb

  • Начинающий
  • *
  • Сообщений: 40
Делюсь решением.

Для установки берём серверный дистрибутив 8(или 9)-й платформы с последними обновлениями, т.е. серверный стартер-кит с  http://nightly.altlinux.org/p8/release/alt-p8-server-20181212-x86_64.iso или более поздний.
Этот дистрибутив можно бесплатно использовать в коммерческих целях.

Загружаемся.
Подготовка диска: Выберите профиль: Вручную.
Создать раздел.
Создаем swap-раздел. Если хотите, и место на дисках позволяет, можете создать раздел размером в два размера оперативной памяти. Лично я создал маленький раздел 2048 Мб. Тип раздела Linux swap.
Создать раздел.
Создаем корневой раздел. Тип раздела Linux. Отдаем ему всё остальное место. Файловая система ext4. Опции монтирования relatime.
Замечание: большое место будет занимать папка /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/ - там будут логи 1С. Если у вас недостаток места на дисках, то логи можно удалять вручную или настроить в Конфигураторе 1С "Регистрировать только ошибки", при этом логи будут гораздо меньшего размера. Можно вообще создать для /home отдельный раздел.

Даем имя и IP-адрес серверу 1С, указываем адреса своего DNS-сервера и шлюза. Не забываем на своем DNS-сервере создать прямую и обратную записи о сервере 1С.
Создаем пароль root-а. Создаем пользователя. В дальнейшем будем на сервер 1С заходить по ssh этим пользователем, а затем брать привилегии root-а командой "su -"
ОС установлена.

Заходим на сервер 1С через putty. Редактировать конфигурационные файлы будем по F4 в Midnight Commander (mc). Для полного просмотра коммандной строки, mc удобно скрывать по Ctrl+O.

Убеждаемся что брэндмауэр открыт: iptables -L -v -n : видим всё ACCEPT

Если у вас в сети прокси-сервер, то в /root/.bash_profile добавьте:
http_proxy="http://IP-прокси:порт"
export http_proxy
и перезайдите в ОС

Обновляем ОС:
apt-get update
update-kernel -t std-def
apt-get dist-upgrade

Настраиваем синхронизацию времени.
В /etc/ntpd.conf поставим свои или общедоступные серверы времени:
server 192.168.0.х
server 192.168.0.у
или
server 2.ru.pool.ntp.org
server 3.ru.pool.ntp.org
Удаляем файл /etc/localtime и делаем новый, как ссылку на файл временной зоны:
ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime

В /etc/hosts запишем имя и IP-адрес сервера 1С:
127.0.0.1 server1C.moj_domen.local server1C
192.168.0.X server1C.moj_domen.local server1C

Проверяем интернационализацию:
cat /etc/sysconfig/i18n
должно быть так:
LANG=ru_RU.UTF-8
SUPPORTED=ru_RU.UTF-8

Согласно  https://its.1c.ru/db/v8313doc#bookmark:cs:TI000000016
для использования некоторых возможностей сервера 1С8.3.13 и 1С8.3.14, работающего под управлением ОС Linux, может потребоваться наличие следующих библиотек:
- FreeType (в ОС уже есть libfreetype)
- Libgsf (надо ставить libgsf)
- Glib (в ОС уже есть glib2)
- unixOdbc (надо ставить unixOdbc)
- Kerberos (в ОС уже есть libkrb5)
- GSS-API Kerberos - непонятно, что за библиотека
- Microsoft Core Fonts (надо ставить fonts-ttf-ms)
- Бибиотека ImageMagick уже не нужна. При работе в ОС Linux, система использует библиотеку ImageMagick, входящую в состав дистрибутива платформы 1С а не в состав ОС, как было на 1с8.3.12.
- Для печати штрих-кодов надо в 1С взять КомпонентаПечатиШтрихкода.zip и оттуда lib1CBarCodLin64_8_4_1_1.so скопировать в /opt/1C/v8.3/x86_64.
ldd lib1CBarCodLin64_8_4_1_1.so говорит, что для него нужна libpng12.
- Начиная с версии 1с 8.3.19, на сервере нужен пакет liblcms2, иначе при попытке входа в базу у клиента будет ошибка "Ошибка загрузки компоненты moxel"

apt-get install libgsf unixODBC fonts-ttf-ms libpng12 liblcms2

Если нужно, устанавливаем менеджер лицензий для аппаратного ключа сервера 1С:
apt-get install i586-haspd
service haspd start
Проверка состояния: service haspd status

Устанавливаем postgresql 10-й версии. С ним работает платформа 1С8.3.13 и выше.
apt-get install postgresql10-1C postgresql10-1C-contrib postgresql10-1C-server

Создаём файлы базы данных и стартуем:
service postgresql initdb
service postgresql start
Автозагрузка: chkconfig postgresql on

Настройки авторизации в postgres находятся в файле /var/lib/pgsql/data/pg_hba.conf. Изначально стоит:
host    all             all             0.0.0.0/0            trust
т.е. во все базы с любого адреса можно входить без пароля, так и останется. Будем использовать парольную защиту из 1С, а не из postgres.

Кажется, для чего-то все-таки нужно задать пароль для пользователя postgres, хотя работаем без проверки пароля:
psql -U postgres -d template1 -c "ALTER USER postgres PASSWORD 'пароль'"

Настройка Postgres:
Вносим изменения в файл /var/lib/pgsql/data/postgresql.conf
Пусть у нас в сервере 32Гб оперативной памяти. Считаем что postgres использует 16Гб, а остальное - 1С и ОС. В дальнейших рассчётах под RAM имеется в виду именно память остающаяся на postgres.
Учитывая советы:
- Фирмы 1С: https://its.1c.ru/db/metod8dev#content:5866:hdoc
- Алексея Васильева с онлайн утилитой pgtune: http://pgtune.leopard.in.ua/ (выбираем DB Type: Data warehouses)
- Некоторые пояснения этих настроек есть на https://postgrespro.ru/docs/postgrespro/10/config-one-c и http://www.gilev.ru/postgresql/

max_connections = 1000
1С советует разрешить на сервере 500-1000 подключений, т.к. 1С сама может их много открывать (независимо от числа пользователей?)
shared_buffers = 4GB
1С советует RAM/4
temp_buffers = 256MB
Такое постоянное значение советует 1С
work_mem = 64MB
1С советует от 32MB до 128MB, возьмем среднее
maintenance_work_mem = 2GB
1С советует от 256MB до 4GB, возьмём 2GB, как советует pgtune
effective_cache_size = 12GB
1С советует RAM - shared_buffers, т.е. 16-4=12GB, то же советует и pgtune
effective_io_concurrency = если база данных на HDD - 2, если на SDD - 100
 Это число запросов, которое может одновременно обслужить дисковая система. Для HDD это число шпинделей. У 1С совет 1 для одного HDD и 2 и больше для RAID. У pgtune есть настройка для SDD, которая даёт 200. Лично я ставлю 100.
random_page_cost = для HDD - 1.7, для SDD - 1.2
1С советует 1.5-2.0 для HDD, 1.1-1.3 для SSD
autovacuum = on
Явно включим автовакуум и не будем выключать, как советует 1С
autovacuum_max_workers = 4
1С советует ядер_ЦПУ/4..2 но не меньше 4
autovacuum_naptime = 20s
bgwriter_delay = 20ms
bgwriter_lru_multiplier = 4.0
bgwriter_lru_maxpages = 400
Верхние 4 пункта так советует 1С
synchronous_commit = off
По уверению 1С значительно увеличивает производительность
checkpoint_segments не настраиваем, параметр был до 9.5 версии PgSQL
checkpoint_completion_target = 0.9
1С говорит от 0.5 до 0.9, pgtune говорит 0.9
max_wal_size = 4GB
min_wal_size = 2GB
1С говорит min_wal_size от 512MB до 4GB, max_wal_size = 2 * min_wal_size, параметры появились в PgSQL9.5
ssl = off
Явно выключим шифрование, как советует 1С
fsync = off
Т.к. у меня дисковый кеш с батарейкой и 2 БП + 2 ИБП на сервере, то выключу, хоть 1С и не советует
commit_delay = 1000
commit_siblings = 5
row_security = off
Верхние 3 пункта так советует 1С
max_files_per_process = 1000
Явно укажем, как советует 1С. Максимальное количество открытых файлов на один процесс PostreSQL. Если PostgreSQL упирается в этот лимит, он начинает открывать/закрывать файлы, что может сказываться на производительности. Лично у меня на уже работающем сервере 30 процессов postmaster. Команда lsof -u postgres | wc -l даёт 13000, т.е. на один процесс примерно 433 файла. Значит для моего случая 1000 хватит.
standard_conforming_strings = off
escape_string_warning = off
max_locks_per_transaction = 256
Верхние 3 пункта так советует 1С
plantuner.fix_empty_table = 'on'
online_analyze.table_type = 'temporary'
online_analyze.verbose = off
Верхние 3 пункта так советует 1С для расширений plantuner и online_analyze. 1-й из них пункт просто добавляем.
shared_preload_libraries = 'online_analyze, plantuner'
Явно включим эти расширения

Из pgtune следующие 5 параметров не будем настраивать, т.к. их нет в рекомендациях 1С:
wal_buffers = 16MB
default_statistics_target = 500
max_worker_processes = 8
max_parallel_workers_per_gather = 4
max_parallel_workers = 8

после этого service postgresql restart

Устанавливаем х64 сервер 1c8.3.13.1809. Или х32, если у вас такой.
Скачиваем с сайта 1С "Cервер 1С:Предприятия (64-bit) для RPM-based Linux-систем", распаковываем. Все файлы .rpm в одной папке. Установка:
apt-get install *.rpm
service srv1cv83 start

Если у вас в сети прокси-сервер, то чтобы 1С подключалась к интернет (для сдачи отчетности), пользователю usr1cv8 надо добавить в .bash_profile:
http_proxy="http://IP-прокси:порт"
export http_proxy

В принципе, уже можно работать с 1С.

Дополнение 1: перенос данных
Спойлер
Данные postgres лежат в /var/lib/pgsql/data. Желающие могут перенести их в другое место, например на SSD-диск. У меня SSD-диск монтируется в /var/ssd.
1. /etc/init.d/postgresql stop
2. Путь к базе прописан в переменной PGDATA в скрипте /etc/init.d/postgresql. Меняем путь на /var/ssd/data
3. Переносим папку /var/lib/pgsql/data в /var/ssd/data. /var/lib/pgsql остается на месте.
4. /etc/init.d/postgresql start

Дополнение 2: резервное копирование
Спойлер
Организуем резервное копирование баз данных на сетевой ресурс. В моем случае сетевой ресурс - это общая папка на сервере Windows 2003. Для получения доступа к сетям Майкрософт поставим cifs-utils:
apt-get install cifs-utils

Пароль на доступ к общей папке будем хранить в файле sambacreds:
touch /etc/sambacreds
в нём 2 строки:
username=имя
password=пароль

Оставим на него права только root-у:
chmod 600 /etc/sambacreds

Создадим в /mnt/ папку arh, к которой будем подключать общую папку Windows.
В /etc/fstab укажем:
//IP_сервера_Windows/общая_папка /mnt/arh cifs credentials=/etc/sambacreds 0 0

Создадим папку, где будут лежать скрипты для резервирования  /etc/bat_ar/ и в ней скрипт sohran.sh с таким содержимым:
#!/bin/bash
pg_dump -U postgres -Fc -Z1 baza > $1/baza.arhiv

-Fc (--format=c) - выходной формат custom, только такой формат делает сжатие.
-Z, --compress=0-9 - уровень сжатия при архивации. Мне важно, чтобы быстрее сделался резерв, а не степень сжатия. При увеличении сжатия размер становится немного меньше, а время тратится значительно больше.
Расширение .arhiv - произвольное
baza - название базы в postgres-е

В /etc/cron.d/ создадим файл pg_dump с таким содержимым:
59 0 * * * root /bin/mount -a
0 1 * * 2 root /etc/bat_ar/sohran.sh /mnt/arh/arhiv1
0 1 * * 3 root /etc/bat_ar/sohran.sh /mnt/arh/arhiv2
0 1 * * 4 root /etc/bat_ar/sohran.sh /mnt/arh/arhiv3
0 1 * * 5 root /etc/bat_ar/sohran.sh /mnt/arh/arhiv4
0 1 * * 6 root /etc/bat_ar/sohran.sh /mnt/arh/arhiv5
В конце обязательно Enter

Т.е. в 1 час ночи, со вторника по субботу запускается архивация. За каждый будний день архив кладётся в свою папку arhivХ. Папки arhivХ должны существовать в общей папке на сервере Windows.

В логах /var/log/syslog/messages видно, что архивация запускается:
Jul  9 01:00:02 server1C crond[27284]: (root) CMD (/etc/bat_ar/sohran.sh /mnt/arh/arhiv5)

mount -a - это чтобы сетевой ресурс уже наверняка был бы подключен, т.к. бывает, что после пропадания и возобновления питания, сервер Windows загружается позже чем server1C и тогда подключение в fstab не срабатывает.

Дополнение3:  соображения по 1С
Спойлер
Папка сервера 1С: /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/
reg_1541/ - тут лежат ID баз, в т.ч. уже удалённых. В файле 1CV8Clst.lst видно, к какой базе какой ID относится, а каких ID в этом файле нет, они лишние. Лишние можно удалить. В ID каждой базы:
1Cv8FTxt - полнотекстовый поиск
1Cv8Log - логи журнала регистраций. Если он разросся, логи можно удалить. В Конфигураторе можно журнал Сократить. Там же можно настроить не собирать лишние сведения, а только Регистрировать ошибки.

/etc/sysconfig/srv1cv83 — файл конфигурации сервера 1С

Платформа 1С обновляется простой процедурой скачивания rpm пакетов с сайта 1С, далее необходимо зайти в каталог с ними и выполнить команды:
service srv1cv83 stop
apt-get install *.rpm
service srv1cv83 start

Проверить версию платформы 1С можно командой: rpm -qa | grep 1C_Enterprise

Дополнение4: работа с 1С по http (https), т.е. через веб-клиент
Спойлер
Установим веб-сервер апач:
apt-get install apache2
chkconfig httpd2 on
service httpd2 start

Создадим папку /var/www/1c_base/
У нас на сервере 1с есть база с названием roznica. Чтобы работать с ней через веб-клиент, сделаем следующее:

1) создадим подпапку roznica в /var/www/1c_base/

2) создадим для этой базы отдельный конфиг апача в /etc/httpd2/conf/sites-available/:
touch /etc/httpd2/conf/sites-available/roznica.conf
командой a2ensite сделаем ссылку на только что созданный конфиг в /etc/httpd2/conf/sites-enabled:
a2ensite roznica

3) опубликуем базу roznica на веб-сервере с помощью webinst:
/opt/1C/v8.3/x86_64/webinst -apache24 -wsdir roznica -dir /var/www/1c_base/roznica -connstr "Srvr=server1C.moj_domen.local;Ref=roznica;" -confpath /etc/httpd2/conf/sites-available/roznica.conf
В ответ будет: sh: httpd: команда не найдена (т.к. webinst ищет httpd а не httpd2, но это не критично) и Публикация выполнена
В результате запуска webinst появится файл /var/www/1c_base/roznica/default.vrd и заполнится файл /etc/httpd2/conf/sites-available/roznica.conf. В нём будет следующее:
LoadModule _1cws_module "/opt/1C/v8.3/x86_64/wsap22.so"
# 1c publication
Alias "/roznica" "/var/www/1c_base/roznica/"
<Directory "/var/www/1c_base/roznica/">
    AllowOverride All
    Options None
    Order allow,deny
    Allow from all
    SetHandler 1c-application
    ManagedApplicationDescriptor "/var/www/1c_base/roznica/default.vrd"
</Directory>

4) перезапустим апач: service httpd2 restart

5) Файл default.vrd имеет права 640. Надо дать доступ на чтение всем:
chmod 644 /var/www/1c_base/roznica/default.vrd

После этого база roznica доступна в обозревателе по адресу:
http://server1C.moj_domen.local/roznica

Если мы хотим работать с 1с не только из локальной сети, но и из интернета, то канал связи надо шифровать, т.е. работать по https а не по http. Для этого нужен сертификат. Можно использовать только сертификат веб-сервера. Канал будет шифрованным. Но чтобы быть уверенными, что к базе 1с из интернета смогут подключиться только нужные нам пользователи, надо вместе с сертификатом веб-сервера использовать и сертификаты клиентов.

Создадим сертификаты с помощью EasyRSA2 из состава OpenVPN: установим на клиентский ПК с Windows программу OpenVPN, но не всю, а только EasyRSA2. И установим не на диск C: а в любое другое место.

- для начала редактируем EasyRSA2\vars.bat. Параметры страны, почты и т.д.  заполняем любыми данными, какими хотим. Значения CN пока оставляем как есть:
set KEY_COUNTRY=RU
set KEY_PROVINCE=.
set KEY_CITY=Gorod
set KEY_ORG=Organizacija
set KEY_EMAIL=info@organizacija.com
set KEY_CN=changeme
set KEY_NAME=.
set KEY_OU=.
set PKCS11_MODULE_PATH=neznaju
set PKCS11_PIN=krutojparol

- затем в build-ca.bat и build-key-pkcs12.bat убираем параметр -nodes.

- идем в командную строку и запускаем последовательно нижеуказанные команды:
vars
clean-all
vars
build-ca (это мы создаём Центр Сертификации, с паролем на его закрытый ключ)
vars
build-key-server server1C.domain.ru (это мы создаём сертификат веб-сервера, без пароля на закрытый ключ)
vars
build-key-pkcs12 1c-user (это мы создаём сертификат клиента, с паролем на его закрытый ключ)

При этом придумываем и вводим имена CN (Common Name):
CN для Центра Сертификации (CA) - 1c-ca
CN для веб-сервера - тут ставим DNS-имя нашего веб-сервера, как он будет виден из интернета, когда мы пробросим на него порт 443 (https) - server1C.domain.ru
CN для клиента - 1c-user
На запрос параметров set KEY_COUNTRY и всех ниже, нажимаем Enter, кроме CN.
При соответствующих запросах придумываем пароли:
Enter PEM pass phrase: - это будет пароль на файл закрытого ключа .key
Enter Export Password: - это будет пароль на файл 1c-user.p12. Этот пароль мы дадим пользователю вместе с файлом 1c-user.p12
На вопрос A challenge password []: нажимаем Enter.

Сертификаты готовы.

Настроим веб-сервер на использование https:
установим пакет ssl:
apt-get install apache2-mod_ssl
включим модуль ssl:
a2enmod ssl
включим порт 443:
a2enport  https

В /etc/httpd2/conf/ssl.key/ положим файл server1C.domain.ru.key
В /etc/httpd2/conf/ssl.srt/ положим файлы ca.crt и server1C.domain.ru.crt
права на все эти файлы поставим 600
Для работы с базой roznica и по http и по https, в файле /etc/httpd2/conf/sites-available/roznica.conf сделаем изменения:
директиву LoadModule... вынесем в начало файла, всё то идет дальше (это будет секция HTTP) обрамим тегами <VirtualHost server1C:80> ... </VirtualHost>, сдублируем эту секцию ещё раз ниже, но тег сделаем <VirtualHost server1C:443> и после этого тега вставим строки:
SSLEngine on
    SSLProtocol all -SSLv2
    SSLCertificateFile    /etc/httpd2/conf/ssl.crt/server1C.domain.ru.crt
    SSLCertificateKeyFile /etc/httpd2/conf/ssl.key/server1C.domain.ru.key
    SSLCACertificateFile /etc/httpd2/conf/ssl.crt/ca.crt
    #можно отзывать сертификаты:
   #SSLCARevocationFile /etc/httpd2/conf/ca.crl
   #можно включать проверку сертификата клиента:
    SSLVerifyClient require
...
Это будет секция HTTPS

Перезапустим апач: service httpd2 restart

Теперь мы пробросим 443 порт снаружи на свой веб-сервер и попробуем войти по https из интернета:
https://server1C.domain.ru/roznica
или, если проброшен нестандартный порт 12345:
https://server1C.domain.ru:12345/roznica
Если мы не включили проверку сертификата клиента "SSLVerifyClient require", то канал будет шифроваться и 1с будет работать.
Если же мы включили проверку сертификата клиента "SSLVerifyClient require", то при попытке входа по https без клиентского сертификата будет выдана ошибка: "Ваш сертификат отклонен сайтом server1C.domain.ru или не был выдан." Нужно вначале импортировать себе клиентский сертификат 1c-user.p12.
В обоих случаях обозреватель будет сообщать, что сертификат сервера не правильный. Происходит это от того, что сертификаты мы сделали себе сами (самоподписанные сертификаты) и наш обозреватель ничего о них не знает.
« Последнее редактирование: 18.11.2021 12:02:41 от freddyb »