1C: различия между версиями
Pauli (обсуждение | вклад) Нет описания правки |
|||
(не показаны 124 промежуточные версии 31 участника) | |||
Строка 1: | Строка 1: | ||
[[ | {{Historical}}[[1C/|Обновлённая версия страницы тут]] | ||
=== Установка сервера 1С Предприятие | {{attention|Служба обеспечения совместимости Базальт СПО не отвечает за содержимое данной страницы. Актуальную информацию о совместимости и актуальную информацию по установке от службы обеспечения совместимости смотрите в соответствующих таблицах: [https://www.basealt.ru/fileadmin/user_upload/compatibility/P10-view2.html p10] и [https://www.basealt.ru/fileadmin/user_upload/compatibility/P9-view2.html p9].}} | ||
Унифицированная статья для разворачивания сервера 1С:Предприятие 8.3 и 8.2. | |||
См. также | |||
* Краткая инструкция для установки клиента 1С:Предприятие 8.3 вынесена на [[1C/Client|отдельную страницу]]. | |||
* [http://forum.altlinux.org/index.php/topic,30681.0.html Инструкция по установке сервера 1С:Предприятие 8.x]. | |||
* [[1C/RAS|Сервер удалённого администрирования (RAS) 1С:Предприятие 8.3]] | |||
'''Для установки на [[Альт Линукс 6.0 СПТ|СПТ]] используйте специальную сертифицированную версию, полученную от представителей 1С.''' | |||
=== Установка сервера 1С:Предприятие на ALT Linux === | |||
==== Состав сервера 1С ==== | ==== Состав сервера 1С ==== | ||
Для версии 8.2: | |||
* 1C_Enterprise82-common… — Общие компоненты 1С Предприятие 8.2 для Linux | |||
* 1C_Enterprise82-crs… — Компоненты хранилища конфигураций 1С Предприятие 8.2 для Linux | |||
* 1C_Enterprise82-server… — Сервер 1С Предприятие 8.2 для Linux | |||
* 1C_Enterprise82-ws… — Компоненты Web-сервисов 1С Предприятие 8.2 для Linux | |||
Для версии 8.3: | |||
* 1C_Enterprise83-common… — Общие компоненты 1С Предприятие 8.3 для Linux | |||
* 1C_Enterprise83-server… — Сервер 1С Предприятие 8.3 для Linux | |||
* 1C_Enterprise83-ws… — Компоненты Web-сервисов 1С Предприятие 8.3 для Linux | |||
Также для каждого из этих компонентов присутствуют пакеты -nls с поддержкой национальных символов. | |||
Также для каждого из | |||
==== Подготовка к установке ==== | ==== Подготовка к установке ==== | ||
Строка 21: | Строка 36: | ||
SUPPORTED=ru_RU</pre> | SUPPORTED=ru_RU</pre> | ||
Дело в том, что если сервер 1С не найдёт тут кодировки ru_RU.UTF-8 (например, если установка происходит в OVZ-контейнере), то он будет настойчиво пытаться подключиться к нашей базе с локалью en_EN.UTF-8. А в chroot postgresql копируется только та локаль, которая задана при создании базы. Таким образом 1С-сервер не сможет подключиться к базе | Дело в том, что если сервер 1С не найдёт тут кодировки ru_RU.UTF-8 (например, если установка происходит в OVZ-контейнере), то он будет настойчиво пытаться подключиться к нашей базе с локалью en_EN.UTF-8. А в chroot postgresql копируется только та локаль, которая задана при создании базы. Таким образом 1С-сервер не сможет подключиться к базе. | ||
Изменить локаль можно командой (подействует после перезагрузки): | |||
<pre>sed -i s/en_EN/ru_RU/ /etc/sysconfig/i18n</pre> | |||
Итак, данное руководство предполагает, что вы используете локаль ru_RU.UTF-8 в качестве общесистемной. | |||
Если вы хотите использовать для доступа к БД имя хоста, а не IP, то хорошо бы настроить обратную DNS-зону. Это избавит вас от некоторых хлопот и возможной путаницы (подробности ниже). | |||
==== 32bit на x86_64 ==== | |||
Обязательно установите пакет {{pkg|i586-glibc-nss}}, если устанавливаете 32-битную версию 1С на x86_64 сервер - без этого не будет работать DNS в сервере 1С. | |||
==== Устанавливаем Postgresql ==== | |||
Стандартный Postgresql не будет работать с 1С, а rpm-пакеты с Postgres, которые идут в дистрибутиве 1C, предназначены только для установки на fedora-совместимых дистрибутивах. Устанавливаем пакеты от Etersoft, при этом не забывая обновить дистрибутив до последней версии: | |||
# apt-get update && apt-get dist-upgrade | |||
В p7: | |||
# apt-get install postgresql9.6-1C postgresql9.6-1C-contrib postgresql9.6-1C-server glibc-i18ndata | |||
В p8/p9: | |||
# apt-get install postgresql10-1C postgresql10-1C-contrib postgresql10-1C-server | |||
Для Седьмой платформы ALT Linux есть более актуальные релизы от [https://postgrespro.ru/products/postgrespro/standard Postgres Pro]. Там же можно найти документацию на русском. Для этого сначала подключаем репозиторий и затем устанавливаем (для ) | |||
<pre> | |||
# echo "rpm http://1c.postgrespro.ru/rpm/9.6/altlinux/7 x86_64 pgpro-1c" >/etc/apt/sources.list.d/pgpro-1c.list | |||
# apt-get update && apt-get install postgresql-pro-1c-9.6 | |||
</pre> | |||
Для установивших ОС с образа, а не развернувших контейнер, с кодировками проблем быть не должно. | |||
Если | В любом случае, проверяйте locale. Если нет UTF-8, устанавливайте: | ||
<pre> | <pre> | ||
localedef -c -i ru_RU -f UTF-8 ru_RU.UTF-8 # для российских и белорусских баз | |||
< | localedef -c -i uk_UA -f UTF-8 uk_UA.UTF-8 # для украинских баз | ||
</pre> | |||
Создаём файлы базы данных: | |||
# service postgresql initdb | |||
В седьмой платформе при попытке первого запуска сервиса (инициализации базы данных) postgresql версии 9 и новее может ругаться на отсутствующий каталог базы данных (/var/lib/pgsql/data), после ручного его создания (<tt>install -o postgres -g postgres -d /var/lib/pgsql/data</tt>) СУБД инициализируется нормально. Как рекомендует скрипт проверки базы, можно выполнить <tt>/etc/init.d/postgresql initdb</tt>, он создаёт также все необходимые файлы конфигурации. | |||
После этого открываем файл /var/lib/pgsql/data/postgresql.conf и проверяем, чтобы postgres слушал нужный интерфейс, имел соответствующую локаль и настройки, описанные в документации 1С-сервера. Вот пример работающего файла конфигурации (закомментированные строки пропущены): | |||
<pre> | |||
<pre>listen_addresses = '*' | listen_addresses = '*' | ||
max_connections = 100 | max_connections = 100 | ||
shared_buffers = 16MB | shared_buffers = 16MB | ||
Строка 65: | Строка 85: | ||
lc_time = 'ru_RU.UTF-8' | lc_time = 'ru_RU.UTF-8' | ||
max_locks_per_transaction = 150 | max_locks_per_transaction = 150 | ||
default_with_oids = on</pre> | default_with_oids = on | ||
</pre> | |||
{{Attention|Не копируйте бездумно эту конфигурацию себе — в комментариях дефолтного postgresql.conf содержится масса полезной информации.}} | |||
Учтите, что эта настройка далека от идеальной и производительной. Данное руководство не ставит перед собой такой задачи, поэтому настроить Postgresql под свои нужды вам надо будет самостоятельно (вот, к примеру, [http://oc.cs.msu.su/club/html/ руководство по настройке производительности], ещё [http://www.gilev.ru/postgresql/ конкретно для 1С], а вот [https://www.postgresql.org/docs/10/static/index.html официальная документация] по используемой версии PostgreSQL) | |||
Также учтите, что postgres использует разделяемую память (shared memory) и в ядре есть ограничения, возможно, придётся их увеличить (по информации с gilev.ru, начиная с postgresql 9.4 это делать не нужно): | |||
Также в файле /var/lib/pgsql/data/pg_hba.conf вам надо будет определить политику доступа пользователей к СУБД (для этого читайте документацию postgresql), | *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). По умолчанию после <tt>/etc/init.d/postgresql initdb</tt> все базы доступны всем без проверки (правило "trust"). Как минимум, можно сделать так: | |||
<pre>host all all 0.0.0.0/0 md5</pre> | <pre>host all all 0.0.0.0/0 md5</pre> | ||
Что означает разрешение подключаться с любых адресов к любым базам с авторизацией по паролю. | Что означает разрешение подключаться с любых адресов к любым базам с авторизацией по паролю. | ||
Для первоначальной настройки достаточно сменить пароль суперпользователя СУБД: | |||
<pre>[root@localhost ~]# psql | Не забываем поставить СУБД на автостарт (годится и для sysvinit, и для systemd): | ||
chkconfig postgresql on | |||
Затем запускаем его: | |||
service postgresql start | |||
Для первоначальной настройки достаточно сменить пароль суперпользователя СУБД командой <code>psql -h localhost -U postgres template1</code> или (короче) <code>psql -U postgres</code>: | |||
<pre>[root@localhost ~]# psql -U postgres | |||
template1=# ALTER USER postgres WITH PASSWORD 'secret';</pre> | template1=# ALTER USER postgres WITH PASSWORD 'secret';</pre> | ||
: Лучше создать отдельного пользователя для каждой базы данных (см. [[#Пользователи СУБД]]) | |||
На этом настройка Postgresql завершена. | На этом настройка Postgresql завершена. | ||
Настоятельно рекомендуется настроить [http://wiki.postgresql.org/wiki/Automated_Backup_on_Linux автоматическое резервное копирование]. | |||
===== Вопросы безопасности ===== | |||
====== Доступ через сокет unix ====== | |||
По умолчанию в файле /var/lib/pgsql/data/postgres.conf задано, что postresql создаёт сокет с правами доступа 0777 ("все могут писать-читать"), при этом в /var/lib/pgsql/data/pg_hba.conf при подключении через сокет нет проверки пользователя. | |||
Есть два пути решения.<br> | |||
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С: | |||
<pre> | |||
# 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 | |||
# | |||
</pre> | |||
Возможно, понадобится также дополнительно назначить полные права пользователю:<code>GRANT ALL ON DATABASE db1c TO cluster1c;</code> | |||
Проблема в том, что для работы 1С нужны права на создание и изменение функций в схеме public. ''(Самый простой путь тут - дать пользователю роль postgres, что эквивалентно работе с СУБД под суперпользователем: <code>GRANT postgres TO cluster1c;</code>. Если есть более корректный путь - укажите его здесь.)'' | |||
==== Установка и запуск защиты HASP ==== | ==== Установка и запуск защиты HASP ==== | ||
В 2018 году обычно приобретаются и устанавливаются программные лицензии, аппаратный ключ используется редко. | |||
К тому же для сервера 1С на Linux технически не требуется серверный ключ при количестве подключенных пользователей менее 10, но сама лицензия на использование должна быть. | |||
HASP | В любом случае для клиентских компьютеров лицензии нужны, и если они хранятся на ключе, лучше всего подключить его к серверу и установить менеджер лицензий. | ||
Устанавливаем менеджер лицензий: | |||
# apt-get install i586-haspd | |||
После его установки достаточно запустить сервис: | |||
# service haspd start | |||
Если | Проверка состояния: | ||
<pre> | |||
# 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 | |||
</pre> | |||
Проверяем, будет ли он запускаться при загрузке: | |||
# chkconfig haspd --list | |||
haspd 0:выкл 1:выкл 2:вкл 3:вкл 4:вкл 5:вкл 6:выкл | |||
Если на уровнях 3 и 5 не включен - включите: | |||
# chkconfig haspd on | |||
{{Note|текущая версия haspd не отслеживает события USB и требует перезапуска после подключения ключа во время работы службы.}} | |||
==== Установка и запуск сервера 1С ==== | ==== Установка и запуск сервера 1С ==== | ||
===== Зависимости и установка ===== | |||
Заходим в каталог с распакованным rpm64.tar.gz и выполняем следующую команду (с поправкой на свою версию): | |||
<pre>apt-get install 1C_Enterprise83-common-8.3.4-365.x86_64.rpm 1C_Enterprise83-common-nls-8.3.4-365.x86_64.rpm \ | |||
1C_Enterprise83-server-8.3.4-365.x86_64.rpm 1C_Enterprise83-server-nls-8.3.4-365.x86_64.rpm \ | |||
1C_Enterprise83-ws-8.3.4-365.x86_64.rpm 1C_Enterprise83-ws-nls-8.3.4-365.x86_64.rpm</pre> | |||
< | Серверу 1С может понадобится библиотека <code>fontconfig.so</code> — пакет <code>fontconfig</code> или <code>i586-fontconfig</code>, <code>libWand.so</code> — пакет <code>libImageMagick</code> или <code>i586-libImageMagick</code> | ||
Для нормальной работы тонкого и 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 | |||
===== Автостарт сервиса ===== | |||
su - # если вдруг ещё не сделан | |||
ln -s /opt/1cv8/x86_64/8.3.19.1229/srv1cv83 /etc/init.d/srv1cv83 # внимание: следите за конкретной версией платформы | |||
chkconfig srv1cv83 on | |||
systemctl start srv1cv83 | |||
также для остановки и перезапуска можно использовать, соответственно, команды: | |||
systemctl stop srv1cv83 | |||
systemctl restart srv1cv83 | |||
а для просмотра статуса, команду: | |||
systemctl status srv1cv83 | |||
Важно: эти два момента уже описаны в нескольких разделах этой статьи и не ясно наверняка оба ли они нужны для успешного старта сервиса. | |||
1. У самого файла /opt/1cv8/x86_64/8.3.19.1229/srv1cv83 шебанг должен быть не | |||
#!/bin/bash | |||
а | |||
#!/bin/sh | |||
2. Сервер может не стартовать из-за отсутствия файла (но это не точно) | |||
/etc/hostname | |||
, который отсутствует в ОС Альт | |||
Его можно создать так: | |||
hostname > /etc/hostname | |||
===== Ротация логов ===== | |||
1С ведёт журнал действий пользователя для каждой информационной базы. Эти журналы сохраняются в домашнем каталоге пользователя usr1cv8. К сожалению, эти журналы не ограничены в размерах средствами 1С и в некоторый момент том будет переполнен, из-за чего сервер 1С будет отвергать соединения клиентов. | |||
Одно из решений — отключить журнал в конфигураторе. | |||
Если журнал нужен, решение простое — нужно настроить ротацию файлов ~usr1cv8/.1cv8/1C/1cv8/reg_*/*/1Cv8Log средствами logrotate. | |||
{{Note|Сотрудники компаний, занимающихся сопровождением 1С, называют это "очисткой кэша".}} | |||
Также полезно создать для домашнего каталога пользователя usr1cv8 отдельный том и/или назначить профиль пользователя в каталог /var/lib/1cv8 (<tt>usermod -d /var/lib/1cv8 usr1cv8 ; mv /home/usr1cv8 /var/lib/</tt>) | |||
: Пример файла /etc/logrotate.d/srv1cv8 (цифры в имени каталога "reg_1541" - номер порта, на котором процесс rmngr принимает подключения клиентов): | |||
/var/lib/1cv8/.1cv8/1C/1cv8/reg_1541/*/1Cv8Log { | |||
notifempty | |||
missingok | |||
rotate 1 | |||
size=500M | |||
nocompress | |||
} | |||
===== Запуск ===== | |||
Запуск демона: | |||
<pre>service srv1cv83 start</pre> | |||
И автозапуск: | |||
<pre>chkconfig srv1cv83 on</pre> | |||
К сожалению, 1С-сервер практически не пишет никаких отчётов, поэтому если что-то не работает, понять, что именно не так, бывает сложно. | К сожалению, 1С-сервер практически не пишет никаких отчётов, поэтому если что-то не работает, понять, что именно не так, бывает сложно. | ||
Разумеется, можно подключить технологический журнал. Но даже самое усердное курение самого подробного технологического журнала может оказаться малопродуктивно, если мы имеем дело с чем-то вроде "Unknown error". | |||
Например, srv1cv83 попросту не запустится, если HOSTNAME= из /etc/sysconfig/network почему-то не разрешается в адрес. Чтобы избежать этого, проследите, чтобы имя сервера было зарегистрировано в доменной зоне, а также добавьте соответствующую запись в /etc/hosts, тогда неисправность/сбой/недоступность DNS будут не так страшны. | |||
Порты, которые слушает 1С: | Порты, которые слушает 1С: | ||
Строка 104: | Строка 283: | ||
tcp 0 0 *:1562 *:* LISTEN 18720/rphost | tcp 0 0 *:1562 *:* LISTEN 18720/rphost | ||
tcp 0 0 *:1563 *:* LISTEN 18720/rphost</pre> | tcp 0 0 *:1563 *:* LISTEN 18720/rphost</pre> | ||
===== Особенности автозапуска 1С-сервера при системе запуска systemd ===== | |||
В случае установки альт-сервера 8 в системе по умолчанию устанавливается systemd. Вместе с ним устанавливается пакет, позволяющий запускать автоматически пакеты, прописанные для запуска системы в sysV. В поставке 1С-сервера присутствует скрипт для запуска в sysV, и после установки 1С-сервера он копируется в каталог /etc/init.d/srv1cv83. В этом скрипте есть небольшая ошибка, которая не проявляется при интерактивном запуске 1С-сервера и при автостарте в sysV, но при автостарте из под systemd она проявляется и не дает ему стартовать. Для исправления этой ошибки открываем скрипт автозапуска 1С-сервера /etc/init.d/srv1cv83 в любом редакторе, добавляем первую строку #!/bin/sh и сохраняем скрипт. | |||
После такой модификации скрипта можно спокойно рестартовать систему. 1С-сервер будет автоматически запускаться. | |||
===== Настройка аутентификации для 1С-сервера в домене Active Directory на базе Samba 4 ===== | |||
Предполагается что компьютер с сервером 1с является членом домена, работоспособность аутентификации Kerberos проверена. Действия выполняются на контроллере домена от суперпользователя, исходные данные (пример): | |||
Полное имя компьютера с 1C сервером (FQDN): server.domain.alt | |||
Имя доменного пользователя сервера 1С: usr1cv8 | |||
Realm: DOMAIN.ALT | |||
Создаем доменного пользователя usr1cv8 с случайным паролем: | |||
<pre>samba-tool user add usr1cv8 --random-password</pre> | |||
Изменяем атрибут UserPrincipalName (UPN) у пользователя usr1cv8: | |||
<pre>samba-tool user rename usr1cv8 --upn usr1cv8/server.domain.alt@DOMAIN.ALT</pre> | |||
Отключаем срок действия пароля у пользователя usr1cv8: | |||
<pre>samba-tool user setexpiry usr1cv8 --noexpiry</pre> | |||
Добавляем атрибут ServicePrincipalName (SPN) пользователю usr1cv8 | |||
<pre>samba-tool spn add usr1cv8/server.domain.alt usr1cv8</pre> | |||
{{note|В SPN usr1cv8 - имя локального пользователя от имени которого запускается сервер 1С}} | |||
Проверяем SPN для пользователя usr1cv8 | |||
<pre>samba-tool spn list usr1cv8 | |||
usr1cv8 | |||
User CN=usr1cv8,CN=Users,DC=domain,DC=alt has the following servicePrincipalName: | |||
usr1cv8/server.domain.alt</pre> | |||
Экспортируем keytab для пользователя usr1cv8 | |||
<pre>samba-tool domain exportkeytab /root/usr1cv8.keytab --principal=usr1cv8/server.domain.alt</pre> | |||
Полученный usr1cv8.keytab нужно поместить в каталог c установленным 1C сервером, например /opt/1cv8/x86_64/8.3.22.1750/ и произвести запуск/перезапуск демона. | |||
{{note|При настройке аутентификации для пользователя 1С выбираем домен вида domain.alt}} | |||
==== Создание сервера предприятия ==== | ==== Создание сервера предприятия ==== | ||
Строка 109: | Строка 329: | ||
Из Windows это можно сделать так: | Из Windows это можно сделать так: | ||
Запустите оснастку управления серверами предприятия из меню Пуск | Запустите оснастку управления серверами предприятия из меню Пуск → 1С Предприятие 8.3 → Серверы 1С Предприятия. | ||
Создайте центральный сервер. Для этого войдите в контекстное меню и выберите пункт "Создать центральный сервер 1С Предприятия". | |||
Введите имя и описание линукс-сервера. | Введите имя и описание линукс-сервера. | ||
Теперь после закрытия окна нажмите на плюсик рядом с новым сервером | Теперь после закрытия окна нажмите на плюсик рядом с новым сервером. | ||
Если сообщений об ошибках не было выдано, то создастся кластер. | Если сообщений об ошибках не было выдано, то создастся кластер. | ||
Имя кластера лучше задавать в виде адреса IP, иначе на каждом компьютере с клиентом 1С придётся обеспечить разрешение имени сервера в адрес. | |||
Информационные базы создаются прямо из оснастки управления кластером 1С:Предприятие, либо при запуске Конфигуратора. Для каждой ИБ нужна своя база данных в postgres. При этом можно задать для каждой такой БД своего пользователя в postgres, но для работы с 1С пользователю postgres нужна роль postgres — точнее, нужны права на создание и удаление функций в схеме public. | |||
После создания (или загрузки базы) можно подключаться к серверу толстым или тонким клиентом, для Web-доступа базу нужно дополнительно опубликовать (см. ниже) | |||
Файлы конфигурации и рабочие файлы информационной базы (временные, протоколы, ...) размещены в ~usr1cv8/.1cv8 | |||
Из Linux это можно сделать так: | |||
Войдите в меню Все функции... - Стандартные - Управление серверами тонкого или толстого клиента 1С:Предприятие 8.3. Для управления кластером клиентское приложение требует [[1C/RAS|RAS]], запущенный на рабочем сервере к которому идёт обращение. Создайте центральный сервер аналогично тому, как описано для Windows. | |||
=== Установка сервера 1С Предприятие 8.2 или 8.3 на ALT Linux для документооборота === | |||
Стенд для 1С:Документооборот разворачивали двое - представитель ALT Linux и представитель 1c-kpd. | |||
Опишу линуксовую часть. | |||
Порядок шагов: | |||
* Разворачиваем сервер. Использовался сервер на 5-ой платформе, после установки дотянут до текущего p5 | |||
* устанавливаем [http://wiki.etersoft.ru/PostgreSQL PostgreSQL от Etersoft]: postgresql-8.3eter - установка и настройка по стандарту | |||
* Устанавливаем Алладиновские ключи. HASP-ключи взяты для Red Hat, usb-ключ воткнут - должен загореться после установки | |||
* Устанавливаем 1С 8.2.10.77 (с более старыми версиями проблема с документооборотом) взято с фтпшника компании http://1c-kpd.ru/ (нужен пароль) | |||
* Настраиваем apache для работы веб-клиента | |||
Все шаги, кроме последнего достаточно тривиальны, за исключением мелочи - человек (из 1С) настраивающий сервер со стороны винды сообщил о каких-то ошибках | |||
которые лечатся запуском скрипта <tt>/opt/1C/8.2/i386/utils/config-server</tt> (актуально только для 1C 8.2). Скрипт капризный, требует указания пути к мелкомягким шрифтам, потому понадобилось установить <tt>fonts-ttf-ms</tt> и конвертер <tt>ttf2pt1</tt>, после чего скрипт запускается с указанием пути к каталогу шрифтов как параметра командной строки и молча отрабатывает. Помогло. | |||
==== Настройка Apache для веб-клиентов документооборота ==== | |||
Описан дефолтный вариант — подкаталог в основном сайте. В примерах используется версия сервера 1С 8.3. | |||
Настройка проводится в четыре шага: | |||
#Надо создать в домашнем каталоге пользователя usr1cv82 в случае 1С 8.2 или usr1cv8 в случае 1C 8.3 корень будущего сервера | |||
#положить в него файл-описание подключения к серверу (*.vrd), | |||
#затем подключить модуль 1С к апачу | |||
#и создать конфиг хоста в апаче. | |||
Информация о модуле: | |||
*имя модуля: _1cws_module | |||
*файл модуля 1C 8.* для apache 2.2: /opt/1C/v8.*/x86_64/wsap22.so | |||
*файл модуля 1C 8.* для apache 2.4: /opt/1C/v8.*/x86_64/wsap24.so | |||
*файл модуля 1C 8.* для apache 2.0: /opt/1C/v8.*/x86_64/wsapch2.so | |||
На 2017 год внедренцы рекомендуют использовать apache 2.2, хотя в пакете 1C_Enterprise83-ws есть модули для apache 2.0, 2.2 и 2.4. | |||
: '''Шаг 1. Создаем корень сервера''' | |||
install -d -o usr1cv8 -g grp1cv8 ~usr1cv8/www/DemoApp | |||
Это просто каталог, владельцы которого usr1cv8:grp1cv8 (или можно сделать apache2:grp1cv8 и дать права доступа владельцу только на чтение). | |||
Надо позаботиться о том, чтобы <tt>apache2</tt> мог его увидеть в <tt>~usr1cv8</tt>: | |||
chmod 750 ~usr1cv8 | |||
usermod -a -G grp1cv8 apache2 | |||
Остальное можно сделать автоматически разом либо вручную поэтапно. Второй способ гибче, например, можно назначить каждой информационной базе отдельное доменное имя (создать VirtualHost). | |||
===== Автоматически ===== | |||
В главе 7 документации администратора описана команда webinst. | |||
Используя webinst, нужно создавать файл в /etc/httpd2/conf/extra-available/ и симлинк на него в /etc/httpd2/conf/extra-enabled/. Пример для версии 8.3: | |||
touch /etc/httpd2/conf/extra-available/1c.conf | |||
/opt/1C/v8.3/x86_64/webinst -publish -apache22 -wsdir DemoApp -dir ~usr1cv8/www/DemoApp -connstr "Srvr=127.0.0.1;Ref=doc_demo;" -confpath /etc/httpd2/conf/extra-available/1c.conf | |||
ln -s ../extra-available/1c.conf /etc/httpd2/conf/extra-enabled/1c.conf | |||
Смотрим, что получилось: | |||
<pre> | |||
# cat /etc/httpd2/conf/extra-enabled/1c.conf | |||
LoadModule _1cws_module "/opt/1C/v8.3/x86_64/wsap22.so" | |||
# 1c publication. | |||
# В вашей конфигурации путь может быть другим! | |||
Alias "/crm" "/home/usr1cv8/www/DemoApp/" | |||
<Directory "/home/usr1cv8/www/DemoApp/"> | |||
AllowOverride All | |||
Options None | |||
Order allow,deny | |||
Allow from all | |||
SetHandler 1c-application | |||
ManagedApplicationDescriptor "/home/usr1cv8/www/DemoApp/default.vrd" | |||
</Directory> | |||
# cat ~usr1cv8/www/DemoApp/default.vrd | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system" | |||
xmlns:xs="http://www.w3.org/2001/XMLSchema" | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||
base="/DemoApp" | |||
ib="Srvr=127.0.0.1;Ref=doc_demo;"/> | |||
<standardOdata enable="false" | |||
reuseSessions="autouse" | |||
sessionMaxAge="20" | |||
poolSize="10" | |||
poolTimeout="5"/> | |||
</point></pre> | |||
===== Вручную ===== | |||
: '''Шаг 2: пишем default.vrd''' | |||
В ~usr1cv8/www/DemoApp/ надо создать файл default.vrd такого содержания: | |||
<pre> | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system" | |||
xmlns:xs="http://www.w3.org/2001/XMLSchema" | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||
base="/DemoApp" | |||
ib="Srvr=192.0.2.54;Ref=doc_demo;"> | |||
</point> | |||
</pre> | |||
В третьей строке значение параметра "base" отражает тот факт, что ~usr1cv8/www/DemoApp - корень веб-интерфейса информационной базы. | |||
В четвертой строке в параметре "ib" указана строка подключения к информационной базе (connection string), в примере IP сервера — 192.0.2.54 (можно указать доменное имя интерфейса, можно localhost), база 1С называется "doc_demo". База должна быть создана в Конфигураторе.<br> | |||
Правильное значение connection string посмотрите в клиенте 1С внизу окна выбора информационной базы. | |||
: '''Шаг 3: Добавляем модуль в конфигурацию apache''' | |||
Для этого в /etc/httpd2/conf/mods-available создаём файл _1cws_module.load: | |||
echo LoadModule _1cws_module /opt/1C/v8.*/i386/wsap22.so > /etc/httpd2/conf/mods-available/_1cws_module.load | |||
Затем включаем его в работу: | |||
ln -s ../mods-available/_1cws_module.load /etc/httpd2/conf/mods-enabled/_1cws_module.load | |||
: '''Шаг 4. Конфиг хоста''' | |||
Простейший вариант - подкаталог в стандартном сайте. | |||
Cоздаем файл /etc/httpd2/conf/include/1c.conf такого вида: | |||
<pre> | |||
Alias /DemoApp /home/usr1cv8/www/DemoApp | |||
<Directory "/home/usr1cv8/www/DemoApp"> | |||
AllowOverride None | |||
Options None | |||
Order allow,deny | |||
Allow from all | |||
SetHandler 1c-application | |||
ManagedApplicationDescriptor /home/usr1cv8/www/DemoApp/default.vrd | |||
</Directory> | |||
</pre> | |||
Включаем /etc/httpd2/conf/include/1c.conf в конфигурацию стандартного виртуального хоста: | |||
sed 's,\(</Virt\),\tInclude /etc/httpd2/conf/include/1c.conf\n\1,' /etc/httpd2/conf/sites-available/default.conf | |||
Другой вариант - виртуальный хост со своим доменным именем. | |||
* Cоздаем файл /etc/httpd2/conf/sites-available/1c.conf | |||
<pre> | |||
<Virtualhost 192.2.0.15:80> | |||
<Directory "/var/lib/1cv8/www/DemoApp"> # ~usr1cv8 назначен в /var/lib/1cv8 | |||
AllowOverride None | |||
Options None | |||
Order allow,deny | |||
Allow from all | |||
SetHandler 1c-application | |||
ManagedApplicationDescriptor /var/lib/1cv8/www/DemoApp/default.vrd | |||
</Directory> | |||
servername 1c.example.net | |||
documentRoot /var/lib/1cv8/www/DemoApp | |||
ErrorLog "/var/log/httpd2/1c_log" | |||
TransferLog "/var/log/httpd2/1c_log" | |||
</Virtualhost> | |||
</pre> | |||
===== Проверка ===== | |||
Перезапускаем апач. Если ругнулся на ManagedApplicationDescriptor, значит модуль от 1С не загрузился. | |||
Проверяем с клиента по адресу http://IP/DemoApp — должна показаться морда информационной базы. | |||
Для входа далее нужен специальный клиентский ключ. Программные ключи предоставляет специальная win32-only программа. Обычно ключи запрашивает у неё и распределяет между клиентами сам сервер. Первые 8 клиентов работают без него, при этом, если настроен технологический журнал, в его файлах rpmngr на каждое обращение клиента сообщает об отсутствии лицензии. | |||
==== Размещение пользовательских файлов конфигурации “Документооборот” ==== | |||
В конфигурации “1С:Документооборот” есть возможность хранить произвольные файлы в информационной базе. В действительности они хранятся не в СУБД, а в виде файлов. Подходящее место для таких файлов - домашний каталог пользователя usr1cv8, например, подкаталог <tt>~usr1cv8/1sfiles</tt>. Перед использованием его нужно создать: | |||
install -d -o usr1cv8 -g grp1cv8 -m2770 ~usr1cv8/1sfiles | |||
А затем посмотрите, какой он в файловой системе (<tt>ls -d ~usr1cv8/1sfiles</tt>) и укажите его в конфигурации. | |||
=== Часто возникающие проблемы === | === Часто возникающие проблемы === | ||
В файле | В файле ~usr1cv81/.1cv81/1C/1Cv81/reg_1541/1CV8Reg.lst (версия 8.1) или ~usr1cv8/.1cv8/1C/1cv8/reg_1541/1CV8Clst.lst (версия 8.3) можно найти конфигурацию кластера 1С в формате JSON. Например, такую: | ||
<pre>{0, | <pre>{0, | ||
Строка 142: | Строка 534: | ||
} | } | ||
}</pre> | }</pre> | ||
UUID, расположенный в начале каждой секции JSON, идентифицирует конкретную конфигурацию. 1С сервер создаёт для конфигурации подкаталоги, именованные этим UUID, в приведённом примере это: | |||
~usr1cv8/.1cv8/1C/1cv8/reg_1541/0dd04482-9367-11dc-748b-00fc390012a1 | |||
* 1С не сможет подключиться к базе Postgresql, если настройки локали не совпадают. Так что приведите параметр Locale= в соответствие с настройками вашей базы. | * 1С не сможет подключиться к базе Postgresql, если настройки локали не совпадают. Так что приведите параметр Locale= в соответствие с настройками вашей базы. | ||
* | * 1С берёт значение хоста откуда угодно, только не из настроек, введённых пользователем. :) При необходимости укажите правильные имена хостов для «Центрального сервера» и «Локального кластера» вручную. Однако если у вас правильно настроена обратная зона DNS, ручных исправлений не потребуется. | ||
* Если том с домашним каталогом пользователя usr1cv8 переполнился, сервер сбрасывает подключения клиентов без какой-либо диагностики. Решение - перенесите домашний каталог сервера 1С на отдельный том или в /var и настройте ротацию журналов действий пользователей (это файлы "1Cv8Log"). | |||
==== Установка 1С-сервера в OVZ-контейнер ==== | ==== Установка 1С-сервера в OVZ-контейнер ==== | ||
Строка 152: | Строка 549: | ||
Для этого: | Для этого: | ||
: Можно воспользоваться готовым spt-профилем из пакета spt-profiles-ovz-1C | : Можно воспользоваться готовым spt-профилем из пакета spt-profiles-ovz-1C | ||
Установка профиля производится так | |||
apt-get install spt-profiles-ovz-1C | |||
Для работы с spt вы должны иметь установленные и настроенные hasher и spt. Читайте соответствующие руководства. | |||
Либо вы можете взять готовый ovz-шаблон [ftp://ftp.altlinux.ru/pub/people/rt/1c/altlinux-1c-server.tar.gz отсюда]. | |||
Далее размещаем шаблон в /var/lib/vz/template/cache/ | Далее размещаем шаблон в /var/lib/vz/template/cache/ | ||
cp altlinux-1c-server.tar.gz /var/lib/vz/template/cache/ | |||
и создаём ovz-инстанцию: | и создаём ovz-инстанцию: | ||
vzctl create 101 --ostemplate altlinux-1c-server --config myserver | |||
Здесь 101 — это номер инстанции (у вас он может быть другой) и myserver - конфигурация сервера; вам также нужно произвести её самостоятельно, для чего читайте руководство по [[OpenVZ|OpenVZ]]. | Здесь 101 — это номер инстанции (у вас он может быть другой) и myserver - конфигурация сервера; вам также нужно произвести её самостоятельно, для чего читайте руководство по [[OpenVZ|OpenVZ]]. | ||
Строка 180: | Строка 578: | ||
cd /root | 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</pre> | 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</pre> | ||
=== [[1C/Эльбрус|1С:Предприятие на системах Эльбрус]] === | |||
Вынесено в отдельную [[1C/Эльбрус|статью]]. | |||
{{Category navigation|title=ПО уровня предприятия|category=Enterprise Software|sortkey={{SUBPAGENAME}}}} | |||
{{Category navigation|title=1C|category=1C|sortkey={{SUBPAGENAME}}}} |
Текущая версия от 17:26, 30 мая 2023
Обновлённая версия страницы тут
Унифицированная статья для разворачивания сервера 1С:Предприятие 8.3 и 8.2.
См. также
- Краткая инструкция для установки клиента 1С:Предприятие 8.3 вынесена на отдельную страницу.
- Инструкция по установке сервера 1С:Предприятие 8.x.
- Сервер удалённого администрирования (RAS) 1С:Предприятие 8.3
Для установки на СПТ используйте специальную сертифицированную версию, полученную от представителей 1С.
Установка сервера 1С:Предприятие на ALT Linux
Состав сервера 1С
Для версии 8.2:
- 1C_Enterprise82-common… — Общие компоненты 1С Предприятие 8.2 для Linux
- 1C_Enterprise82-crs… — Компоненты хранилища конфигураций 1С Предприятие 8.2 для Linux
- 1C_Enterprise82-server… — Сервер 1С Предприятие 8.2 для Linux
- 1C_Enterprise82-ws… — Компоненты Web-сервисов 1С Предприятие 8.2 для Linux
Для версии 8.3:
- 1C_Enterprise83-common… — Общие компоненты 1С Предприятие 8.3 для Linux
- 1C_Enterprise83-server… — Сервер 1С Предприятие 8.3 для Linux
- 1C_Enterprise83-ws… — Компоненты Web-сервисов 1С Предприятие 8.3 для Linux
Также для каждого из этих компонентов присутствуют пакеты -nls с поддержкой национальных символов.
Подготовка к установке
Сначала проверьте настройку интернационализации системы:
cat /etc/sysconfig/i18n LANG=ru_RU.UTF-8 SUPPORTED=ru_RU
Дело в том, что если сервер 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-зону. Это избавит вас от некоторых хлопот и возможной путаницы (подробности ниже).
32bit на x86_64
Обязательно установите пакет i586-glibc-nss, если устанавливаете 32-битную версию 1С на x86_64 сервер - без этого не будет работать DNS в сервере 1С.
Устанавливаем Postgresql
Стандартный Postgresql не будет работать с 1С, а rpm-пакеты с Postgres, которые идут в дистрибутиве 1C, предназначены только для установки на fedora-совместимых дистрибутивах. Устанавливаем пакеты от Etersoft, при этом не забывая обновить дистрибутив до последней версии:
# apt-get update && apt-get dist-upgrade
В p7:
# apt-get install postgresql9.6-1C postgresql9.6-1C-contrib postgresql9.6-1C-server glibc-i18ndata
В p8/p9:
# apt-get install postgresql10-1C postgresql10-1C-contrib postgresql10-1C-server
Для Седьмой платформы ALT Linux есть более актуальные релизы от Postgres Pro. Там же можно найти документацию на русском. Для этого сначала подключаем репозиторий и затем устанавливаем (для )
# echo "rpm http://1c.postgrespro.ru/rpm/9.6/altlinux/7 x86_64 pgpro-1c" >/etc/apt/sources.list.d/pgpro-1c.list # apt-get update && apt-get install postgresql-pro-1c-9.6
Для установивших ОС с образа, а не развернувших контейнер, с кодировками проблем быть не должно.
В любом случае, проверяйте 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
В седьмой платформе при попытке первого запуска сервиса (инициализации базы данных) postgresql версии 9 и новее может ругаться на отсутствующий каталог базы данных (/var/lib/pgsql/data), после ручного его создания (install -o postgres -g postgres -d /var/lib/pgsql/data) СУБД инициализируется нормально. Как рекомендует скрипт проверки базы, можно выполнить /etc/init.d/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;
. Если есть более корректный путь - укажите его здесь.)
Установка и запуск защиты HASP
В 2018 году обычно приобретаются и устанавливаются программные лицензии, аппаратный ключ используется редко. К тому же для сервера 1С на Linux технически не требуется серверный ключ при количестве подключенных пользователей менее 10, но сама лицензия на использование должна быть. В любом случае для клиентских компьютеров лицензии нужны, и если они хранятся на ключе, лучше всего подключить его к серверу и установить менеджер лицензий.
Устанавливаем менеджер лицензий:
# 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.tar.gz и выполняем следующую команду (с поправкой на свою версию):
apt-get install 1C_Enterprise83-common-8.3.4-365.x86_64.rpm 1C_Enterprise83-common-nls-8.3.4-365.x86_64.rpm \ 1C_Enterprise83-server-8.3.4-365.x86_64.rpm 1C_Enterprise83-server-nls-8.3.4-365.x86_64.rpm \ 1C_Enterprise83-ws-8.3.4-365.x86_64.rpm 1C_Enterprise83-ws-nls-8.3.4-365.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
Автостарт сервиса
su - # если вдруг ещё не сделан ln -s /opt/1cv8/x86_64/8.3.19.1229/srv1cv83 /etc/init.d/srv1cv83 # внимание: следите за конкретной версией платформы chkconfig srv1cv83 on systemctl start srv1cv83
также для остановки и перезапуска можно использовать, соответственно, команды:
systemctl stop srv1cv83 systemctl restart srv1cv83
а для просмотра статуса, команду:
systemctl status srv1cv83
Важно: эти два момента уже описаны в нескольких разделах этой статьи и не ясно наверняка оба ли они нужны для успешного старта сервиса.
1. У самого файла /opt/1cv8/x86_64/8.3.19.1229/srv1cv83 шебанг должен быть не
#!/bin/bash
а
#!/bin/sh
2. Сервер может не стартовать из-за отсутствия файла (но это не точно)
/etc/hostname
, который отсутствует в ОС Альт
Его можно создать так:
hostname > /etc/hostname
Ротация логов
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 }
Запуск
Запуск демона:
service srv1cv83 start
И автозапуск:
chkconfig srv1cv83 on
К сожалению, 1С-сервер практически не пишет никаких отчётов, поэтому если что-то не работает, понять, что именно не так, бывает сложно. Разумеется, можно подключить технологический журнал. Но даже самое усердное курение самого подробного технологического журнала может оказаться малопродуктивно, если мы имеем дело с чем-то вроде "Unknown error".
Например, srv1cv83 попросту не запустится, если HOSTNAME= из /etc/sysconfig/network почему-то не разрешается в адрес. Чтобы избежать этого, проследите, чтобы имя сервера было зарегистрировано в доменной зоне, а также добавьте соответствующую запись в /etc/hosts, тогда неисправность/сбой/недоступность DNS будут не так страшны.
Порты, которые слушает 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С-сервера при системе запуска systemd
В случае установки альт-сервера 8 в системе по умолчанию устанавливается systemd. Вместе с ним устанавливается пакет, позволяющий запускать автоматически пакеты, прописанные для запуска системы в sysV. В поставке 1С-сервера присутствует скрипт для запуска в sysV, и после установки 1С-сервера он копируется в каталог /etc/init.d/srv1cv83. В этом скрипте есть небольшая ошибка, которая не проявляется при интерактивном запуске 1С-сервера и при автостарте в sysV, но при автостарте из под systemd она проявляется и не дает ему стартовать. Для исправления этой ошибки открываем скрипт автозапуска 1С-сервера /etc/init.d/srv1cv83 в любом редакторе, добавляем первую строку #!/bin/sh и сохраняем скрипт. После такой модификации скрипта можно спокойно рестартовать систему. 1С-сервер будет автоматически запускаться.
Настройка аутентификации для 1С-сервера в домене 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.22.1750/ и произвести запуск/перезапуск демона.
Создание сервера предприятия
Из Windows это можно сделать так:
Запустите оснастку управления серверами предприятия из меню Пуск → 1С Предприятие 8.3 → Серверы 1С Предприятия. Создайте центральный сервер. Для этого войдите в контекстное меню и выберите пункт "Создать центральный сервер 1С Предприятия". Введите имя и описание линукс-сервера. Теперь после закрытия окна нажмите на плюсик рядом с новым сервером. Если сообщений об ошибках не было выдано, то создастся кластер.
Имя кластера лучше задавать в виде адреса IP, иначе на каждом компьютере с клиентом 1С придётся обеспечить разрешение имени сервера в адрес.
Информационные базы создаются прямо из оснастки управления кластером 1С:Предприятие, либо при запуске Конфигуратора. Для каждой ИБ нужна своя база данных в postgres. При этом можно задать для каждой такой БД своего пользователя в postgres, но для работы с 1С пользователю postgres нужна роль postgres — точнее, нужны права на создание и удаление функций в схеме public.
После создания (или загрузки базы) можно подключаться к серверу толстым или тонким клиентом, для Web-доступа базу нужно дополнительно опубликовать (см. ниже)
Файлы конфигурации и рабочие файлы информационной базы (временные, протоколы, ...) размещены в ~usr1cv8/.1cv8
Из Linux это можно сделать так:
Войдите в меню Все функции... - Стандартные - Управление серверами тонкого или толстого клиента 1С:Предприятие 8.3. Для управления кластером клиентское приложение требует RAS, запущенный на рабочем сервере к которому идёт обращение. Создайте центральный сервер аналогично тому, как описано для Windows.
Установка сервера 1С Предприятие 8.2 или 8.3 на ALT Linux для документооборота
Стенд для 1С:Документооборот разворачивали двое - представитель ALT Linux и представитель 1c-kpd.
Опишу линуксовую часть.
Порядок шагов:
- Разворачиваем сервер. Использовался сервер на 5-ой платформе, после установки дотянут до текущего p5
- устанавливаем PostgreSQL от Etersoft: postgresql-8.3eter - установка и настройка по стандарту
- Устанавливаем Алладиновские ключи. HASP-ключи взяты для Red Hat, usb-ключ воткнут - должен загореться после установки
- Устанавливаем 1С 8.2.10.77 (с более старыми версиями проблема с документооборотом) взято с фтпшника компании http://1c-kpd.ru/ (нужен пароль)
- Настраиваем apache для работы веб-клиента
Все шаги, кроме последнего достаточно тривиальны, за исключением мелочи - человек (из 1С) настраивающий сервер со стороны винды сообщил о каких-то ошибках которые лечатся запуском скрипта /opt/1C/8.2/i386/utils/config-server (актуально только для 1C 8.2). Скрипт капризный, требует указания пути к мелкомягким шрифтам, потому понадобилось установить fonts-ttf-ms и конвертер ttf2pt1, после чего скрипт запускается с указанием пути к каталогу шрифтов как параметра командной строки и молча отрабатывает. Помогло.
Настройка Apache для веб-клиентов документооборота
Описан дефолтный вариант — подкаталог в основном сайте. В примерах используется версия сервера 1С 8.3.
Настройка проводится в четыре шага:
- Надо создать в домашнем каталоге пользователя usr1cv82 в случае 1С 8.2 или usr1cv8 в случае 1C 8.3 корень будущего сервера
- положить в него файл-описание подключения к серверу (*.vrd),
- затем подключить модуль 1С к апачу
- и создать конфиг хоста в апаче.
Информация о модуле:
- имя модуля: _1cws_module
- файл модуля 1C 8.* для apache 2.2: /opt/1C/v8.*/x86_64/wsap22.so
- файл модуля 1C 8.* для apache 2.4: /opt/1C/v8.*/x86_64/wsap24.so
- файл модуля 1C 8.* для apache 2.0: /opt/1C/v8.*/x86_64/wsapch2.so
На 2017 год внедренцы рекомендуют использовать apache 2.2, хотя в пакете 1C_Enterprise83-ws есть модули для apache 2.0, 2.2 и 2.4.
- Шаг 1. Создаем корень сервера
install -d -o usr1cv8 -g grp1cv8 ~usr1cv8/www/DemoApp
Это просто каталог, владельцы которого usr1cv8:grp1cv8 (или можно сделать apache2:grp1cv8 и дать права доступа владельцу только на чтение).
Надо позаботиться о том, чтобы apache2 мог его увидеть в ~usr1cv8:
chmod 750 ~usr1cv8 usermod -a -G grp1cv8 apache2
Остальное можно сделать автоматически разом либо вручную поэтапно. Второй способ гибче, например, можно назначить каждой информационной базе отдельное доменное имя (создать VirtualHost).
Автоматически
В главе 7 документации администратора описана команда webinst.
Используя webinst, нужно создавать файл в /etc/httpd2/conf/extra-available/ и симлинк на него в /etc/httpd2/conf/extra-enabled/. Пример для версии 8.3:
touch /etc/httpd2/conf/extra-available/1c.conf /opt/1C/v8.3/x86_64/webinst -publish -apache22 -wsdir DemoApp -dir ~usr1cv8/www/DemoApp -connstr "Srvr=127.0.0.1;Ref=doc_demo;" -confpath /etc/httpd2/conf/extra-available/1c.conf ln -s ../extra-available/1c.conf /etc/httpd2/conf/extra-enabled/1c.conf
Смотрим, что получилось:
# cat /etc/httpd2/conf/extra-enabled/1c.conf LoadModule _1cws_module "/opt/1C/v8.3/x86_64/wsap22.so" # 1c publication. # В вашей конфигурации путь может быть другим! Alias "/crm" "/home/usr1cv8/www/DemoApp/" <Directory "/home/usr1cv8/www/DemoApp/"> AllowOverride All Options None Order allow,deny Allow from all SetHandler 1c-application ManagedApplicationDescriptor "/home/usr1cv8/www/DemoApp/default.vrd" </Directory> # cat ~usr1cv8/www/DemoApp/default.vrd <?xml version="1.0" encoding="UTF-8"?> <point xmlns="http://v8.1c.ru/8.2/virtual-resource-system" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" base="/DemoApp" ib="Srvr=127.0.0.1;Ref=doc_demo;"/> <standardOdata enable="false" reuseSessions="autouse" sessionMaxAge="20" poolSize="10" poolTimeout="5"/> </point>
Вручную
- Шаг 2: пишем default.vrd
В ~usr1cv8/www/DemoApp/ надо создать файл default.vrd такого содержания:
<?xml version="1.0" encoding="UTF-8"?> <point xmlns="http://v8.1c.ru/8.2/virtual-resource-system" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" base="/DemoApp" ib="Srvr=192.0.2.54;Ref=doc_demo;"> </point>
В третьей строке значение параметра "base" отражает тот факт, что ~usr1cv8/www/DemoApp - корень веб-интерфейса информационной базы.
В четвертой строке в параметре "ib" указана строка подключения к информационной базе (connection string), в примере IP сервера — 192.0.2.54 (можно указать доменное имя интерфейса, можно localhost), база 1С называется "doc_demo". База должна быть создана в Конфигураторе.
Правильное значение connection string посмотрите в клиенте 1С внизу окна выбора информационной базы.
- Шаг 3: Добавляем модуль в конфигурацию apache
Для этого в /etc/httpd2/conf/mods-available создаём файл _1cws_module.load:
echo LoadModule _1cws_module /opt/1C/v8.*/i386/wsap22.so > /etc/httpd2/conf/mods-available/_1cws_module.load
Затем включаем его в работу:
ln -s ../mods-available/_1cws_module.load /etc/httpd2/conf/mods-enabled/_1cws_module.load
- Шаг 4. Конфиг хоста
Простейший вариант - подкаталог в стандартном сайте.
Cоздаем файл /etc/httpd2/conf/include/1c.conf такого вида:
Alias /DemoApp /home/usr1cv8/www/DemoApp <Directory "/home/usr1cv8/www/DemoApp"> AllowOverride None Options None Order allow,deny Allow from all SetHandler 1c-application ManagedApplicationDescriptor /home/usr1cv8/www/DemoApp/default.vrd </Directory>
Включаем /etc/httpd2/conf/include/1c.conf в конфигурацию стандартного виртуального хоста:
sed 's,\(</Virt\),\tInclude /etc/httpd2/conf/include/1c.conf\n\1,' /etc/httpd2/conf/sites-available/default.conf
Другой вариант - виртуальный хост со своим доменным именем.
- Cоздаем файл /etc/httpd2/conf/sites-available/1c.conf
<Virtualhost 192.2.0.15:80> <Directory "/var/lib/1cv8/www/DemoApp"> # ~usr1cv8 назначен в /var/lib/1cv8 AllowOverride None Options None Order allow,deny Allow from all SetHandler 1c-application ManagedApplicationDescriptor /var/lib/1cv8/www/DemoApp/default.vrd </Directory> servername 1c.example.net documentRoot /var/lib/1cv8/www/DemoApp ErrorLog "/var/log/httpd2/1c_log" TransferLog "/var/log/httpd2/1c_log" </Virtualhost>
Проверка
Перезапускаем апач. Если ругнулся на ManagedApplicationDescriptor, значит модуль от 1С не загрузился.
Проверяем с клиента по адресу http://IP/DemoApp — должна показаться морда информационной базы.
Для входа далее нужен специальный клиентский ключ. Программные ключи предоставляет специальная win32-only программа. Обычно ключи запрашивает у неё и распределяет между клиентами сам сервер. Первые 8 клиентов работают без него, при этом, если настроен технологический журнал, в его файлах rpmngr на каждое обращение клиента сообщает об отсутствии лицензии.
Размещение пользовательских файлов конфигурации “Документооборот”
В конфигурации “1С:Документооборот” есть возможность хранить произвольные файлы в информационной базе. В действительности они хранятся не в СУБД, а в виде файлов. Подходящее место для таких файлов - домашний каталог пользователя usr1cv8, например, подкаталог ~usr1cv8/1sfiles. Перед использованием его нужно создать:
install -d -o usr1cv8 -g grp1cv8 -m2770 ~usr1cv8/1sfiles
А затем посмотрите, какой он в файловой системе (ls -d ~usr1cv8/1sfiles) и укажите его в конфигурации.
Часто возникающие проблемы
В файле ~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
- 1С не сможет подключиться к базе Postgresql, если настройки локали не совпадают. Так что приведите параметр Locale= в соответствие с настройками вашей базы.
- 1С берёт значение хоста откуда угодно, только не из настроек, введённых пользователем. :) При необходимости укажите правильные имена хостов для «Центрального сервера» и «Локального кластера» вручную. Однако если у вас правильно настроена обратная зона DNS, ручных исправлений не потребуется.
- Если том с домашним каталогом пользователя usr1cv8 переполнился, сервер сбрасывает подключения клиентов без какой-либо диагностики. Решение - перенесите домашний каталог сервера 1С на отдельный том или в /var и настройте ротацию журналов действий пользователей (это файлы "1Cv8Log").
Установка 1С-сервера в OVZ-контейнер
Для начала создадим 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.
Запускаем инстанцию:
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С:Предприятие на системах Эльбрус
Вынесено в отдельную статью.