1C/
См. также
- Краткая инструкция по установке клиента 1С:Предприятие 8.3.
- Сервер удалённого администрирования (RAS) 1С:Предприятие 8.3
Для установки на СПТ используйте специальную сертифицированную версию, полученную от представителей 1С.
Установка сервера 1С:Предприятие
Предварительная подготовка
Разрешение имён DNS
Главное требование состоит в том, что для правильной работы кластера серверов 1С (а речь именно о запуске кластера по умолчанию) участники — как сервер, так и клиенты — должны иметь правильное разрешение имен серверных компонентов в адрес IP. Официальная рекомендация — наличие в сети работоспособного сервера DNS, правильная регистрация серверов —участников кластера в доменной зоне, и обеспечение использования данной доменной зоны всеми клиентами. Вопросы настройки DNS выходят за рамки этой статьи.
Простой способ проверить правильность разрешения имени в адрес на сервере — команда host `hostname`
Выполнение без ошибок и вывод IP-адреса, соответствующего hostname вашего будущего сервера, позволяют надеяться на успешный запуск кластера с именем hostname по умолчанию.
Если хотите использовать для доступа к БД не IP, а имя хоста, хорошо бы настроить обратную DNS-зону. Это избавит вас от возможной путаницы.
Доменная аутентификации на базе Samba 4
Предполагается, что компьютер с сервером 1С является членом домена и работоспособность аутентификации Kerberos проверена.
Действия на контроллере домена
| Пример исходных данных | |
|---|---|
| Полное имя компьютера с 1C сервером (FQDN) | server.domain.alt |
| Realm | DOMAIN.ALT |
| Имя доменного пользователя для сервера 1С | server1c |
- Создать доменного пользователя server1c со случайным паролем:
- # samba-tool user add server1c --random-password
- Отключить ему срок действия пароля:
- # samba-tool user setexpiry server1c --noexpiry
- Изменить его атрибут UserPrincipalName (UPN):
- # samba-tool user rename server1c --upn usr1cv8/server.domain.alt@DOMAIN.ALT
- Добавить ему ServicePrincipalName (SPN):
- # samba-tool spn add usr1cv8/server.domain.alt server1c
- Проверить этот SPN:
- # samba-tool spn list server1c
server1c User CN=server1c,CN=Users,DC=domain,DC=alt has the following servicePrincipalName: usr1cv8/server.domain.alt
- Экспортировать keytab пользователя:
# samba-tool domain exportkeytab /root/usr1cv8.keytab --principal=usr1cv8/server.domain.alt
Действия на сервере 1С
- Полученный выше usr1cv8.keytab следует поместить в каталог c установленным сервером 1C, например /opt/1cv8/x86_64/8.3.24.1667/, где 8.3.24.1667 — версия установленной платформы 1С.
- Задать для него допуски:
- chown usr1cv8:grp1cv8 /opt/1cv8/x86_64/8.3.24.1667/usr1cv8.keytab && chmod 0600 /opt/1cv8/x86_64/8.3.24.1667/usr1cv8.keytab
- Добавить в /etc/hosts строку вида:
192.168.0.100 server.domain.alt- где 192.168.0.100 — IP-адрес данного сервера 1C.
192.168.0.100 server server.domain.alt
ведет к неработоспособности аутентификации.
После чего следует произвести (пере)запуск сервиса 1С.
Языковая локализация системы
Проверьте настройку локализации системы:
cat /etc/sysconfig/i18n LANG=ru_RU.UTF-8 SUPPORTED=ru_RU.UTF-8
или
locale LANG=ru_RU.UTF-8 ...
Предполагается, что в качестве общесистемной локали вы используете ru_RU.UTF-8, и не найдя здесь этой кодировки (например, при установке в OVZ-контейнер), сервер 1С будет пытаться подключиться к нашей базе с локалью en_EN.UTF-8. А в chroot postgresql копируется только та локаль, которая задана при создании базы. В результате 1С-сервер не сможет подключиться к базе.
Изменить локаль можно командой (требует перезахода в систему): # sed -i s/en_EN/ru_RU/ /etc/sysconfig/i18n
Содержимое установщика
Архив с установочными пакетами можно получить на сайте https://releases.1c.ru/total (требуется авторизация) в разделе Технологические дистрибутивы ⇾ Технологическая платформа 8.x требуемой версии и сборки по ссылке Сервер 1С:Предприятия (64-bit) для RPM-based Linux-систем.
Пакеты серверного состава имеют следующий вид:
1c-enterprise-<версия.сборка>-<компонент>[-nls]-<версия-сборка>.x86_64.rpm
| Компонент | Описание |
|---|---|
| server | Собственно сервер |
| common | Общие компоненты |
| crs | Компоненты хранилища конфигурации |
| ws | Компоненты Web-сервисов |
Ко всем этим компонентам (кроме crs) прилагаются пакеты -nls с поддержкой национальных символов.
Установка и запуск защиты HASP
Для сервера 1С версий до 8.2.х при количестве подключённых пользователей менее 10 наличие серверного ключа на Linux технически не обязательно, но сама лицензия на использование должна наличествовать. В любом случае для клиентских компьютеров лицензии нужны, и если они хранятся на ключе, лучше всего подключить его к серверу.
Чтобы ключ USB был распознан платформой, требуется работающий менеджер лицензий.
Платформа 10 и новее
- Установка поддержки ключей HASP: epm -y play aksusbd
- Запуск сервисов навсегда: # systemctl enable --now aksusbd hasplmd
Прежние платформы
- Установка менеджера лицензий: # 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С
Подготовка
Во избежание проблем с зависимостями, можно установить пакет 1c-preinstall либо дополненный и проприетарными компонентами 1c-preinstall-full. Оба тянут многие зависимости, нужные для рабочей станции, но излишние для сервера.
Серверу же могут понадобиться пакеты fontconfig и libImageMagick, а начиная с версии 8.3.19 требуется пакет liblcms2.
Для нормальной работы клиентов (тонкого и Web-) также нужны:
- glib2,
- libgsf,
- ttf2pt1,
- unixodbc,
- ImageMagick + создание символических ссылок
- /usr/lib64/libWand.so ⇾ libMagickWand-6.Q16.so.1.0.0 и
- /usr/lib64/libWand.so.1 ⇾ libMagickWand-6.Q16.so.1.0.0.
Установка
В каталоге с распакованным архивом сервера 1С скомандовать:
epmi -y 1c-enterprise-*-{server,common,ws}-*.x86_64.rpm
Регистрация и запуск
Актуальные версии платформы 1С:Предприятие ориентированы на систему инициализации systemd, использование инит-скриптов для запуска в качестве сервиса не предусмотрено и не поддерживается. Результатом такого решения стала возможность одновременного запуска нескольких экземпляров сервиса в одной операционной системе. Подробности можно уточнить в документации по платформе на сайте its.1c.ru (требуется авторизация): Клиент-серверный вариант, руководство администратора. Глава 4. Запуск компонентов системы.
- Прежде всего серверу 1С требуется свой пользователь в собственной же группе:
- # groupadd grp1cv8 && useradd -g grp1cv8 usr1cv8
- Далее следует зарегистрировать юнит в systemd:
- # systemctl link /opt/1cv8/<архитектура>/<версия>/srv1cv8-<версия>@.service
- Запуск сервиса навсегда:
- # systemctl enable --now srv1cv8-<версия>@default
- По умолчанию 1С слушает следующие порты (об их переназначении см. документацию по платформе):
lsof -ni | awk '/^r/&&/:15/&&/LISTEN/'ragent 14076 usr1cv8 9u IPv6 78232240 0t0 TCP *:1540 (LISTEN) ragent 14076 usr1cv8 10u IPv4 78232241 0t0 TCP *:1540 (LISTEN) rmngr 14085 usr1cv8 8u IPv6 78232220 0t0 TCP *:1541 (LISTEN) rmngr 14085 usr1cv8 9u IPv4 78232221 0t0 TCP *:1541 (LISTEN) rphost 14109 usr1cv8 9u IPv6 78232240 0t0 TCP *:1540 (LISTEN) rphost 14109 usr1cv8 10u IPv4 78232241 0t0 TCP *:1540 (LISTEN) rphost 14109 usr1cv8 14u IPv6 78232276 0t0 TCP *:1560 (LISTEN) rphost 14109 usr1cv8 15u IPv4 78232277 0t0 TCP *:1560 (LISTEN)
Дополнительные сведения по работе со службами systemd см, например, здесь.
Отчёты и временные файлы
Журналирование событий
1С-сервер практически не пишет никаких отчётов, поэтому бывает сложно понять, что именно не так, если что-то не работает. Например, сервис попросту не запустится, если HOSTNAME= из /etc/sysconfig/network по какой-либо причине не разрешается в адрес. Во избежание этого проследите, чтобы имя сервера было зарегистрировано в доменной зоне, а также добавьте соответствующую запись в /etc/hosts — тогда неисправность/сбой/недоступность DNS будут не столь страшны.
Для диагностики можно при необходимости подключить технологический журнал. Делается это специальным файлом logcfg.xml в каталоге конфигурации (обычно в /opt/1cv8/conf), например (наиболее полный журнал):
| /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С для всех информационных баз ведёт журналы действий в домашнем каталоге пользователя usr1cv8. Но поскольку в размерах эти журналы средствами 1С не ограничены, то в некоторый момент том будет переполнен, из-за чего сервер 1С станет отвергать соединения клиентов.
Одно из решений — отключить журнал в конфигураторе.
Если же он нужен, следует средствами logrotate настроить ротацию файлов в ~/usr1cv8/.1cv8/1C/1cv8/reg_*/*/1Cv8Log — например:
| /etc/logrotate.d/srv1cv8 |
|---|
# "1541" в имени каталога — номер порта, который слушает rmngr
/var/lib/1cv8/.1cv8/1C/1cv8/reg_1541/*/1Cv8Log {
notifempty
missingok
rotate 1
size=500M
nocompress
}
|
Не лишне и создать пользователю usr1cv8 отдельный том для домашнего каталога и/или назначить профиль пользователя в каталог /var/lib/1cv8 (см. выше пример ротации логов):
# usermod -d /var/lib/1cv8 usr1cv8; mv /home/usr1cv8 /var/lib/
Изменение временного каталога
Для сервера 1С характерно создание большого количества файлов, в том числе значительного размера, во временном каталоге, причем очень часто они не удаляются и, соответственно, накапливаются в процессе работы. Сервер 1С использует временный каталог пользователя usr1cv8, по умолчанию размещаемый в /tmp/.private/usr1cv8/ — файловая система tmpfs находится в оперативной памяти и имеет ограниченный размер. Таким образом, в процессе работы можно столкнутся с нехваткой места во временном каталоге — например, при загрузке выгруженной в формате *.dt информационной базы 1С. Поэтому крайне рекомендуется разместить временной каталог в другом месте, для чего, к примеру, можно изменить unit-файл сервиса /lib/systemd/system/srv1cv8.service, добавив в секцию [Service] строку:
Environment = TMPDIR=/home/usr1cv8/.tmp/
где /home/usr1cv8/.tmp/ — путь ко временному каталогу сервера 1С.
Создание сервера предприятия
Из Windows
- Запустите оснастку управления серверами предприятия из меню Пуск ⇾ 1С Предприятие 8.3 ⇾ Серверы 1С Предприятия.
- Создайте центральный сервер:
- выберите из контекстного меню пункт «Создать центральный сервер 1С Предприятия»;
- введите имя и описание линукс-сервера.
- После закрытия окна нажмите на плюс рядом с новым сервером.
- Если сообщений об ошибках не было выдано, то создастся кластер.
Имя кластера лучше задавать в виде адреса IP, иначе на каждом компьютере с клиентом 1С придётся обеспечить разрешение имени сервера в адрес.
Информационные базы создаются прямо из оснастки управления кластером 1С:Предприятие либо при запуске «Конфигуратора». Для каждой ИБ нужна своя база данных в СУБД. При этом для каждой базы можно задать своего пользователя в postgres, но для работы с 1С такому пользователю нужна роль postgres — точнее, права на создание и удаление функций в схеме public.
После создания или загрузки базы можно подключаться к серверу толстым или тонким клиентом, для Web-доступа базу нужно дополнительно опубликовать (см. ниже)
Файлы конфигурации и рабочие файлы информационной базы (временные, протоколы и т.п.) размещены в ~/usr1cv8/.1cv8
Из Linux
- Войдите в меню Все функции… ⇾ Стандартные ⇾ Управление серверами тонкого или толстого клиента 1С:Предприятие 8.3
- (для управления кластером клиентское приложение требует RAS, запущенный на рабочем сервере, к которому идёт обращение).
- Создайте центральный сервер аналогично тому, как описано для Windows.
Cервер 1С в контейнере
LXC
- Развернуть контейнер любым способом: Incus, OpenStack, PVE, systemd-nspawn и т.п.
- При использовании HASP-ключа вместо программной лицензии — пробросить устройство в контейнер.
- Действовать по вышеприведённой инструкции.
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
Подключение к СУБД
MSSQL
(см. по ссылке в заголовке раздела)
PostgreSQL
Стандартный Postgresql не будет работать с 1С, а rpm-пакеты с Postgres, которые идут в дистрибутиве 1C, предназначены только для установки на fedora-совместимых дистрибутивах.
Так что установим пакеты от Etersoft, обновив дистрибутив до последней версии:
# apt-get update; apt-get dist-upgrade; apt-get install postgresql15-1C-{server,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
По умолчанию postresql создаёт сокет без проверки пользователя при подключении через него, и с допусками 0777 ("все могут писать-читать").
Есть два пути решения.
- Через /var/lib/pgsql/data/postgres.conf разрешить доступ к сокету только членам группы postgres:
unix_socket_group = '' # use main group of the user postgres #unix_socket_permissions = 0777 # default permissions unix_socket_permissions = 0770
- При этом в данную группу следует включить пользователя usr1cv8:
- # usermod -aG postgres usr1cv8
- В /var/lib/pgsql/data/pg_hba.conf для подключений к сокету требовать аутентификацию, заменив "trust" на "md5":
#local all all trust # default local all all md5
Через TCP
- Если этого ещё не сделано, задайте пароль пользователю postgres:
- # pwqgen
Dark*Plan7Smoky- # echo "ALTER USER postgres WITH PASSWORD 'Dark*Plan7Smoky';"
- Для TCP-подключений укажите в /var/lib/pgsql/data/pg_hba.conf аутентификацию по "md5":
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С можно создать отдельного пользователя — или даже по пользователю на каждую информационную базу.
- Установить генератор паролей:
- root@localhost:~# apt-get install -y passwdqc-utils
- Сгенерировать новый пароль:
- root@localhost:~# pwqgen
Bunch!Climb$pay
- Создать нового пользователя с этим паролем, новую базу во владении этого пользователя, и предоставить ему полный доступ к ней:
- root@localhost:~# psql -U postgres
psql (9.6.6) Введите "help", чтобы получить справку. postgres=# CREATE USER cluster1c WITH password 'Bunch!Climb$pay'; postgres=# CREATE DATABASE db1c OWNER cluster1c; postgres=# GRANT ALL ON DATABASE db1c TO cluster1c; postgres=# \q
- root@localhost:~#
- А полный доступ — поскольку 1С нужны права на создание/изменение функций в схеме public (если есть способ достичь этого без повышения привилегий, укажите его здесь.
Возможные проблемы и методы решения
| Проблема | Решение |
|---|---|
| 1С не может подключиться к базе Postgresql при несовпадении локалей. | Привести параметр Locale= в соответствие настройкам базы. |
| 1С берёт значение хоста откуда угодно, только не из введённых пользователем настроек. | Вручную указать правильные имена хостов для «Центрального сервера» и «Локального кластера» (при правильной настройке обратной зоны DNS ручных исправлений не требуется). |
| Сервер 1С сбрасывает подключения клиентов без какой-либо диагностики при переполнении домашнего каталога у пользователя usr1cv8. |
|
| Не запускается менеджер кластера, рабочий процесс; в технологическом журнале записи о таймауте разрешения адреса IPv6. |
|
| Сообщение «На сервере отсутствуют шрифты из состава Microsoft Core Fonts…». | Доустановить недостающее ПО — возможно, не только на сервере 1С, но и на клиенте с поддержкой файловых ИБД:
|
