1C/: различия между версиями
Pauli (обсуждение | вклад) |
Pauli (обсуждение | вклад) |
||
Строка 186: | Строка 186: | ||
<pre>samba-tool domain exportkeytab /root/usr1cv8.keytab --principal=usr1cv8/server.domain.alt</pre> | <pre>samba-tool domain exportkeytab /root/usr1cv8.keytab --principal=usr1cv8/server.domain.alt</pre> | ||
Полученный usr1cv8.keytab нужно поместить в каталог c установленным 1C сервером, например /opt/1cv8/x86_64/8.3. | Полученный usr1cv8.keytab нужно поместить в каталог c установленным 1C сервером, например /opt/1cv8/x86_64/8.3.23.1688 и произвести запуск/перезапуск демона. | ||
{{note|При настройке аутентификации для пользователя 1С выбираем домен вида domain.alt}} | {{note|При настройке аутентификации для пользователя 1С выбираем домен вида domain.alt}} |
Версия от 11:31, 30 мая 2023
См. также
- Краткая инструкция по установке клиента 1С:Предприятие 8.3.
- Сервер удалённого администрирования (RAS) 1С:Предприятие 8.3
Для установки на СПТ используйте специальную сертифицированную версию, полученную от представителей 1С.
Установка сервера 1С:Предприятие на ALT Linux
Состав сервера 1С
- 1c-enterprise-8.3.23.1688-common… — Общие компоненты 1С Предприятие 8.3 для Linux
- 1c-enterprise-8.3.23.1688-server… — Сервер 1С Предприятие 8.3 для Linux
- 1c-enterprise-8.3.23.1688-ws… — Компоненты Web-сервисов 1С Предприятие 8.3 для Linux
Также для каждого из этих компонентов присутствуют пакеты -nls с поддержкой национальных символов. Архив с установочными пакетами можно получить на сайте releases.1c.ru (требуется авторизация) в разделе Технологические дистрибутивы, Технологическая платформа, по ссылке Сервер 1С:Предприятия (64-bit) для RPM-based Linux-систем.
Разрешение имён DNS
Главное требование состоит в том, что для правильной работы кластера серверов 1С, а речь идёт именно о запуске кластера по умолчанию участники, как сервер так и клиенты, должны иметь правильное разрешение имен серверных компонентов в адрес IP. Официальная рекомендация - наличие в сети работоспособного сервера DNS, правильная регистрация серверов-участников кластера в доменной зоне и обеспечение использования данной доменной зоны всеми клиентами. Вопросы настройки DNS выходят за рамки этой статьи.
Простой способ проверить правильность разрешения имени в адрес на сервере - команда
host `hostname`
в случае выполнения без ошибок и адреса IP, соответствующего hostname вашего будущего сервера, позволяет надеяться на успешный запуск кластера с именем hostname по умолчанию.
Языковая локализация системы
Проверьте настройку локализации системы:
cat /etc/sysconfig/i18n LANG=ru_RU.UTF-8 SUPPORTED=ru_RU.UTF-8
или
locale LANG=ru_RU.UTF-8 ...
Дело в том, что если сервер 1С не найдёт тут кодировки ru_RU.UTF-8 (например, если установка происходит в OVZ-контейнере), то он будет пытаться подключиться к нашей базе с локалью en_EN.UTF-8. А в chroot postgresql копируется только та локаль, которая задана при создании базы. Таким образом 1С-сервер не сможет подключиться к базе.
Изменить локаль можно командой (требует перезагрузки):
sed -i s/en_EN/ru_RU/ /etc/sysconfig/i18n
Итак, данное руководство предполагает, что вы используете локаль ru_RU.UTF-8 в качестве общесистемной. Если вы хотите использовать для доступа к БД имя хоста, а не IP, то хорошо бы настроить обратную DNS-зону. Это избавит вас от некоторых хлопот и возможной путаницы (подробности ниже).
Установка и запуск защиты HASP
Для сервера 1С на Linux технически не требуется серверный ключ при количестве подключенных пользователей менее 10, но сама лицензия на использование должна быть. В любом случае для клиентских компьютеров лицензии нужны, и если они хранятся на ключе, лучше всего подключить его к серверу. Чтобы USB ключ был распознан платформой, требуется работающий менеджер лицензий.
Устанавливаем менеджер лицензий:
# apt-get install i586-haspd
После его установки достаточно запустить сервис:
# service haspd start
Проверка состояния:
# service haspd status Hardware protection keys support bundle. Etersoft (c) 2008-2012 HASPD package 3.3 with /dev/bus/usb support Aladdin HASP 4/HL/SRM driver status: kernel module aksparlnx is not loaded (WARNING: HASP LPT keys support is disabled! Run service haspd build if needed.) aksusbd is running winehasp is running hasplm is running hasplmd is running Daemon version: 1.14 (#7779) - key API (USB) version: 3.88 (parallel driver not available) /proc/bus/usb workaround is enabled Smartkey 3 USB/LPT driver status: skeyd is stopped SafeNet Sentinel status: usbsentinel is stopped SntlKeysSrvrlnx is stopped Use $ eterkeytest [--hasp] [--sentinel] [--eutron] for test key presence
Проверяем, будет ли он запускаться при загрузке:
# chkconfig haspd --list haspd 0:выкл 1:выкл 2:вкл 3:вкл 4:вкл 5:вкл 6:выкл
Если на уровнях 3 и 5 не включен - включите:
# chkconfig haspd on
Установка и запуск сервера 1С
Зависимости и установка
В каталоге с распакованным архивом rpm64_8_3_23_1688.tar.gz выполнить команду установки пакетов (с поправкой на свою версию):
apt-get install 1c-enterprise-8.3.23.1688-common-8.3.23-1688.x86_64.rpm 1c-enterprise-8.3.23.1688-server-8.3.23-1688.x86_64.rpm
Серверу 1С может понадобится библиотека fontconfig.so
— пакет fontconfig
или i586-fontconfig
, libWand.so
— пакет libImageMagick
или i586-libImageMagick
Для нормальной работы тонкого и Web-клиента 1С Предприятия также требуются: unixodbc, libgsf, glib2, ttf2pt1, ImageMagick (+ создание символических ссылок /usr/lib64/libWand.so → libMagickWand-6.Q16.so.1.0.0 и /usr/lib64/libWand.so.1 → libMagickWand-6.Q16.so.1.0.0). Все это можно сделать вручную, либо установив пакет 1c-preinstall-full, который тянет многие зависимости нужные для рабочей станции, но излишние для сервера.
Начиная с версии 1с 8.3.19, на сервере нужен пакет liblcms2
Регистрация сервиса
Актуальные версии платформы 1С:Предприятие ориентированы на систему инициализации systemd, использование инитскриптов для запуска в качестве сервиса не предусмотрено и не поддерживается. Результатом такого решения стала возможность одновременного запуска нескольких экземпляров сервиса в одной операционной системе. Подробности можно уточнить в документации по платформе на сайте its.1c.ru, Клиент-серверный вариант. Руководство администратора Глава 4. Запуск компонентов системы(требуется авторизация).
Соответствующий версии платформы юнит systemd поставляется в составе пакета 1c-enterprise-*-server и после установки находится в каталоге установки под именем srv1cv8-*@.service
Прежде всего, необходимо зарегистрировать юнит в systemd:
systemctl link /opt/1cv8/<архитектура>/<версия>/srv1cv8-<версия>@.service
Запуск сервиса
Запуск сервиса:
systemctl start srv1cv8-*@default
Остановка сервиса:
systemctl stop srv1cv8-*@default
1С-сервер практически не пишет никаких отчётов, поэтому если что-то не работает, понять, что именно не так, бывает сложно. Например, srv1cv83 попросту не запустится, если HOSTNAME= из /etc/sysconfig/network почему-то не разрешается в адрес. Чтобы избежать этого, проследите, чтобы имя сервера было зарегистрировано в доменной зоне, а также добавьте соответствующую запись в /etc/hosts, тогда неисправность/сбой/недоступность DNS будут не так страшны.
В случае необходимости, для диагностики можно подключить технологический журнал. Технологический журнал включается специальным файлом конфагурации logcfg.xml, помещаемым в каталог конфигурации, обычно /opt/1cv8/conf
Пример содержимого файла logcfg.xml (наиболее полный журнал):
<?xml version="1.0" encoding="UTF-8"?> <config xmlns="http://v8.1c.ru/v8/tech-log"> <log location="/home/usr1cv8/log" history="24"> <event> <ne value="" property="Name"/> </event> <property name="all"/> </log> <dump location="/home/usr1cv8/dump" create="1" type="3" externaldump="1"/> </config>
Подробные сведения о возможностях технологического журнала смотрите в документации по платформе на сайте its.1c.ru (требуется авторизация).
Порты, которые слушает 1С по умолчанию:
tcp 0 0 *:1540 *:* LISTEN 18704/ragent tcp 0 0 *:1541 *:* LISTEN 18711/rmngr tcp 0 0 *:1560 *:* LISTEN 18711/rmngr tcp 0 0 *:1561 *:* LISTEN 18704/ragent tcp 0 0 *:1562 *:* LISTEN 18720/rphost tcp 0 0 *:1563 *:* LISTEN 18720/rphost
О (пере)назначении портов сервера 1С:Предприятие смотрите в документации по платформе.
Ротация логов
1С ведёт журнал действий пользователя для каждой информационной базы. Эти журналы сохраняются в домашнем каталоге пользователя usr1cv8. К сожалению, эти журналы не ограничены в размерах средствами 1С и в некоторый момент том будет переполнен, из-за чего сервер 1С будет отвергать соединения клиентов. Одно из решений — отключить журнал в конфигураторе.
Если журнал нужен, решение простое — нужно настроить ротацию файлов ~usr1cv8/.1cv8/1C/1cv8/reg_*/*/1Cv8Log средствами logrotate.
Также полезно создать для домашнего каталога пользователя usr1cv8 отдельный том и/или назначить профиль пользователя в каталог /var/lib/1cv8 (usermod -d /var/lib/1cv8 usr1cv8 ; mv /home/usr1cv8 /var/lib/)
- Пример файла /etc/logrotate.d/srv1cv8 (цифры в имени каталога "reg_1541" - номер порта, на котором процесс rmngr принимает подключения клиентов):
/var/lib/1cv8/.1cv8/1C/1cv8/reg_1541/*/1Cv8Log { notifempty missingok rotate 1 size=500M nocompress }
Настройка аутентификации в домене Active Directory на базе Samba 4
Предполагается, что компьютер с сервером 1С является членом домена и работоспособность аутентификации Kerberos проверена. Действия выполняются на контроллере домена от суперпользователя, исходные данные (пример):
Полное имя компьютера с 1C сервером (FQDN): server.domain.alt
Имя доменного пользователя сервера 1С: usr1cv8
Realm: DOMAIN.ALT
Создаем доменного пользователя usr1cv8 с случайным паролем:
samba-tool user add usr1cv8 --random-password
Изменяем атрибут UserPrincipalName (UPN) у пользователя usr1cv8:
samba-tool user rename usr1cv8 --upn usr1cv8/server.domain.alt@DOMAIN.ALT
Отключаем срок действия пароля у пользователя usr1cv8:
samba-tool user setexpiry usr1cv8 --noexpiry
Добавляем атрибут ServicePrincipalName (SPN) пользователю usr1cv8
samba-tool spn add usr1cv8/server.domain.alt usr1cv8
Проверяем SPN для пользователя usr1cv8
samba-tool spn list usr1cv8 usr1cv8 User CN=usr1cv8,CN=Users,DC=domain,DC=alt has the following servicePrincipalName: usr1cv8/server.domain.alt
Экспортируем keytab для пользователя usr1cv8
samba-tool domain exportkeytab /root/usr1cv8.keytab --principal=usr1cv8/server.domain.alt
Полученный usr1cv8.keytab нужно поместить в каталог c установленным 1C сервером, например /opt/1cv8/x86_64/8.3.23.1688 и произвести запуск/перезапуск демона.
Создание сервера предприятия
Из Windows это можно сделать так:
Запустите оснастку управления серверами предприятия из меню Пуск → 1С Предприятие 8.3 → Серверы 1С Предприятия. Создайте центральный сервер. Для этого войдите в контекстное меню и выберите пункт "Создать центральный сервер 1С Предприятия". Введите имя и описание линукс-сервера. Теперь после закрытия окна нажмите на плюсик рядом с новым сервером. Если сообщений об ошибках не было выдано, то создастся кластер.
Имя кластера лучше задавать в виде адреса IP, иначе на каждом компьютере с клиентом 1С придётся обеспечить разрешение имени сервера в адрес.
Информационные базы создаются прямо из оснастки управления кластером 1С:Предприятие, либо при запуске Конфигуратора. Для каждой ИБ нужна своя база данных в postgres. При этом можно задать для каждой такой БД своего пользователя в postgres, но для работы с 1С пользователю postgres нужна роль postgres — точнее, нужны права на создание и удаление функций в схеме public.
После создания (или загрузки базы) можно подключаться к серверу толстым или тонким клиентом, для Web-доступа базу нужно дополнительно опубликовать (см. ниже)
Файлы конфигурации и рабочие файлы информационной базы (временные, протоколы, ...) размещены в ~usr1cv8/.1cv8
Из Linux это можно сделать так:
Войдите в меню Все функции... - Стандартные - Управление серверами тонкого или толстого клиента 1С:Предприятие 8.3. Для управления кластером клиентское приложение требует RAS, запущенный на рабочем сервере к которому идёт обращение. Создайте центральный сервер аналогично тому, как описано для Windows.
PostgreSQL
Стандартный Postgresql не будет работать с 1С, а rpm-пакеты с Postgres, которые идут в дистрибутиве 1C, предназначены только для установки на fedora-совместимых дистрибутивах. Устанавливаем пакеты от Etersoft, при этом не забывая обновить дистрибутив до последней версии:
# apt-get update && apt-get dist-upgrade # apt-get install postgresql15-1C-server postgresql15-1C-contrib
Для установивших ОС с образа, а не развернувших контейнер, с кодировками проблем быть не должно. В любом случае, проверяйте locale. Если нет UTF-8, устанавливайте:
localedef -c -i ru_RU -f UTF-8 ru_RU.UTF-8 # для российских и белорусских баз localedef -c -i uk_UA -f UTF-8 uk_UA.UTF-8 # для украинских баз
Создаём файлы базы данных:
# service postgresql initdb
После этого открываем файл /var/lib/pgsql/data/postgresql.conf и проверяем, чтобы postgres слушал нужный интерфейс, имел соответствующую локаль и настройки, описанные в документации 1С-сервера. Вот пример работающего файла конфигурации (закомментированные строки пропущены):
listen_addresses = '*' max_connections = 100 shared_buffers = 16MB max_fsm_pages = 204800 effective_cache_size = 128MB stats_row_level = on autovacuum = on datestyle = 'iso, dmy' lc_messages = 'ru_RU.UTF-8' lc_monetary = 'ru_RU.UTF-8' lc_numeric = 'ru_RU.UTF-8' lc_time = 'ru_RU.UTF-8' max_locks_per_transaction = 150 default_with_oids = on
Возможно, настройка по умолчанию далека от идеальной и производительной. Данное руководство не ставит перед собой такой задачи, поэтому настроить PostgreSQL под свои нужды надо будет самостоятельно (вот, к примеру, руководство по настройке производительности, ещё конкретно для 1С, а вот официальная документация по используемой версии PostgreSQL)
Также учтите, что postgres использует разделяемую память (shared memory) и в ядре есть ограничения, возможно, придётся их увеличить (по информации с gilev.ru, начиная с postgresql 9.4 это делать не нужно):
- sysctl kernel.shmall — the total amount of shared memory pages that can be used system wide, default 2097152.
- sysctl kernel.shmmax — the maximum size in bytes of a single shared memory segment that a Linux process can allocate in its virtual address space, default 1073741824 (1 GiB)
- sysctl kernel.shmmni — the system wide maximum number of shared memory segments, default 4096.
Также в файле /var/lib/pgsql/data/pg_hba.conf вам надо будет определить политику доступа пользователей к СУБД (для этого читайте документацию postgresql). По умолчанию после /etc/init.d/postgresql initdb все базы доступны всем без проверки (правило "trust"). Как минимум, можно сделать так:
host all all 0.0.0.0/0 md5
Что означает разрешение подключаться с любых адресов к любым базам с авторизацией по паролю.
Не забываем поставить СУБД на автостарт (годится и для sysvinit, и для systemd):
chkconfig postgresql on
Затем запускаем его:
service postgresql start
Для первоначальной настройки достаточно сменить пароль суперпользователя СУБД командой psql -h localhost -U postgres template1
или (короче) psql -U postgres
:
[root@localhost ~]# psql -U postgres template1=# ALTER USER postgres WITH PASSWORD 'secret';
- Лучше создать отдельного пользователя для каждой базы данных (см. #Пользователи СУБД)
На этом настройка Postgresql завершена.
Настоятельно рекомендуется настроить автоматическое резервное копирование.
Вопросы безопасности
Доступ через сокет unix
По умолчанию в файле /var/lib/pgsql/data/postgres.conf задано, что postresql создаёт сокет с правами доступа 0777 ("все могут писать-читать"), при этом в /var/lib/pgsql/data/pg_hba.conf при подключении через сокет нет проверки пользователя.
Есть два пути решения.
1. Разрешить доступ к сокету только членам группы postgres в файле postgres.conf:
unix_socket_group = # default use main group of the user postgres #unix_socket_permissions = 0777 # default unix_socket_permissions = 0770
2. Требовать аутентификацию при подключениях через сокет в файле pg_hba.conf:
#local all all trust # default local all all md5
В первом случае, если сервер 1С будет подключаться к postresql через сокет unix, нужно включить пользователя usr1cv8 в группу postgres:
usermod -a -G postgres usr1cv8
Обычно это не нужно — используется подключение TCP.
Доступ через TCP
Если это не было сделано, установите пароль пользователя postgres
# pwqgen Dark*Plan7Smoky # echo "ALTER USER postgres WITH PASSWORD 'Dark*Plan7Smoky';" | psql -h localhost -U postgres
Затем в файле pg_hba.conf укажите требование аутентификации для подключений через сокеты TCP (исходно там указано "trust" - то есть без аутентификации):
host all all 127.0.0.1/32 md5 host all all 0.0.0.0/0 md5 host all all ::1/128 md5
Пользователи СУБД
Для работы 1С можно создать отдельного пользователя или даже отдельного пользователя для каждой информационной базы 1С:
# pwqgen Bunch!Climb$pay # psql -U postgres psql (9.6.6) Введите "help", чтобы получить справку. postgres=# CREATE USER cluster1c WITH password 'Bunch!Climb$pay'; postgres=# CREATE DATABASE db1c OWNER cluster1c; postgres=# \q #
Возможно, понадобится также дополнительно назначить полные права пользователю:GRANT ALL ON DATABASE db1c TO cluster1c;
Проблема в том, что для работы 1С нужны права на создание и изменение функций в схеме public. (Самый простой путь тут - дать пользователю роль postgres, что эквивалентно работе с СУБД под суперпользователем: GRANT postgres TO cluster1c;
. Если есть более корректный путь - укажите его здесь.)
Сервер 1С:Предприятия в контейнере OVZ
Cоздадим ovz-инстанцию. Для этого:
- Можно воспользоваться готовым spt-профилем из пакета spt-profiles-ovz-1C
Установка профиля производится так
apt-get install spt-profiles-ovz-1C
Для работы с spt вы должны иметь установленные и настроенные hasher и spt. Читайте соответствующие руководства.
Либо вы можете взять готовый ovz-шаблон отсюда.
Далее размещаем шаблон в /var/lib/vz/template/cache/
cp altlinux-1c-server.tar.gz /var/lib/vz/template/cache/
и создаём ovz-инстанцию:
vzctl create 101 --ostemplate altlinux-1c-server --config myserver
Здесь 101 — это номер инстанции (у вас он может быть другой) и myserver - конфигурация сервера; вам также нужно произвести её самостоятельно, для чего читайте руководство по OpenVZ.
В файле ~usr1cv81/.1cv81/1C/1Cv81/reg_1541/1CV8Reg.lst (версия 8.1) или ~usr1cv8/.1cv8/1C/1cv8/reg_1541/1CV8Clst.lst (версия 8.3) можно найти конфигурацию кластера 1С в формате JSON. Например, такую:
{0, {332873ae-75ed-11dc-9f9f-00fc390012a1,"Локальный кластер",1541,"banzay.aspirinka.net",0,0}, {1, {0dd04482-9367-11dc-748b-00fc390012a1,"1c","","PostgreSQL","1c.aspirinka.net","1c","postgres","zPurhs5czp8pJJ9Z6craZ2vrNnl9u7bkfzlIoDTEfW8=","CrSQLDB=Y;DB=1c;DBMS=PostgreSQL;DBSrvr=1c.aspirinka.net;DBUID=postgres;Descr=;Locale=ru_RU;Ref=1c;SLev=0;SQLYOffs=0;Srvr=banzay.aspirinka.net",0, {0,00010101000000,00010101000000,"","",""},0} }, {1, {36713c62-75ed-11dc-9f9f-00fc390012a1,"banzay.aspirinka.net",1,1, {9.827956989247312e-2,9.548387096774194e-2,0,0,2.795698924731183e-3,93,1.150875992227514e-3,0},1000} }, {0}, {1, {366b0522-75ed-11dc-9f9f-00fc390012a1,"Центральный сервер",1540,"banzay.aspirinka.net",1, {1, {1560,1591} },"","gjZ6h/5H95FpOCqDeLmg2Q=="} } }
UUID, расположенный в начале каждой секции JSON, идентифицирует конкретную конфигурацию. 1С сервер создаёт для конфигурации подкаталоги, именованные этим UUID, в приведённом примере это: ~usr1cv8/.1cv8/1C/1cv8/reg_1541/0dd04482-9367-11dc-748b-00fc390012a1
Запускаем инстанцию:
vzctl start 101
Копируем внутрь rpm-пакеты с 1С-сервером:
cp 1C_Enterprise-* /var/lib/vz/root/101/root/
После этого можно зайти в инстанцию и установить пакеты 1С-сервера:
vzctl enter 101 entered into VE 101 cd /root apt-get install 1C_Enterprise-common-8.1.8-76.i386.rpm 1C_Enterprise-server-nls-8.1.8-76.i386.rpm 1C_Enterprise-common-nls-8.1.8-76.i386.rpm 1C_Enterprise-server-8.1.8-76.i386.rpm
1С:Предприятие на системах Эльбрус
Возможные проблемы и методы решения
- 1С не сможет подключиться к базе Postgresql, если настройки локали не совпадают. Так что приведите параметр Locale= в соответствие с настройками вашей базы.
- 1С берёт значение хоста откуда угодно, только не из настроек, введённых пользователем. При необходимости укажите правильные имена хостов для «Центрального сервера» и «Локального кластера» вручную. Однако если у вас правильно настроена обратная зона DNS, ручных исправлений не потребуется.
- Если том с домашним каталогом пользователя usr1cv8 переполнился, сервер сбрасывает подключения клиентов без какой-либо диагностики. Решение - перенесите домашний каталог сервера 1С на отдельный том или в /var и настройте ротацию журналов действий пользователей (файлы "1Cv8Log").
- Не запускается менеджер кластера, не запускается рабочий процесс. В технологическом журнале записи о таймауте разрешения адреса IPv6. Отключить поддержку IPv6 или настроить разрешение адресов IPv6 в DNS.
Дополнительно
- its.1c.ru Установка Платформы «1С:Предприятие» в ОС Linux (требуется авторизация)
- forum.altlinux.org Обсуждение установки сервера 1С:Предприятие 8.
[[Категория:Enterprise Software|]]
[[Категория:1C|]]