суббота, 27 октября 2012 г.

1C:Предприятие 8.2 + PostgreSQL + CentOS 6

На работе решили внедрять сервер 1C. Посчитав стоимость решения на Windows + MSSQL, мы просто ох...обалдели. Поэтому было решено остановится на связке 1C + Linux. В сети достаточно много мануалов на тему установки 1С сервера на linux, но мне они показались неполными, да и к тому же себе на заметку никогда не помешает. Поэтому решил создать свой мануал по установке 1C сервера на CentOS 6.

В версии «1С: Предприятие 8.2» было сделано множество улучшений, таких как управляемый режим блокировок(являющийся режимом "по умолчанию" в версии 8.2), добавлена новая возможность в виде работы в режиме тонкого клиента и веб-клиента и др. Все это играет немаловажную роль  в работе платформы на серверах с линуксом на борту, тем более, что связка 1С сервер + Linux обретает все большую популярность. В этом небольшом howto была попытка описать процесс установки и запуска сервера 1С в эксплуатацию в наиболее полном виде.
Собственно, весь процесс установки и настройки можно разбить на несколько этапов, что дальше и будет сделано. Вся установка и настройка проводится на CentOS 6 x64. В качестве СУБД была выбрана PostgreSQL. И сервер 1С, и СУБД ставятся на одну и ту же «железку».

Подготовка системы


Перед установкой пакетов 1С и PostgreSQL, настроим некоторые системные параметры, необходимые для дальнейшего функционирования PostgreSQL и сервера 1С. В файл /etc/sysconfig/network внесем такие изменения:

NETWORKING=yes
HOSTNAME=server-1С.mydomain.com

В файл /etc/hosts нужно добавить следующее:

192.168.1.1 server-1C.mydomain.com server-1C

где 192.168.1.1 — это ip-адрес вашего сервера 1С (это необходимо для того, чтобы имя сервера однозначно разрешалось в его ip-адрес)

Заметка

На клиентских компьютерах, необходимо такое же одно­значное разреше­ние имя в ip-адрес, поэтому на каждой клиентской машине необходимо доба­вить такую запись или настроить вну­тренний DNS сервер (что более предпо­чтительно).

Проверим размер рабочей памяти в системе и, если необходимо, увеличим его (этот параметр необходим для нормальной работы PostgreSQL):

[root@server-1C~]# cat /proc/sys/kernel/shmmax

изменим этот параметр в файле /etc/sysctl.conf на kernel.shmmax и обновим параметры sysctl:

[root@server-1C~]# sysctl -p

либо

[root@server-1C~]# echo 1073741824 >> /proc/sys/kernel/shmmax

Отключим iptables, хотя бы на время запуска и настройки сервера

[root@server-1C~]# /etc/init.d/iptables stop
[root@server-1C~]# chkconfig iptables off
[root@server-1C~]# /etc/init.d/ip6tables stop
[root@server-1C~]# chkconfig ip6tables off

Отключаем SELinux (в локальной сети он не нужен IMHO) в файле /etc/sysconfig/selinux ставим SELINUX=disabled. Но так как это изменение вступит в силу только после перезагрузки, то проделаем еще одну операция выключения, чтоб не перегружаться:

[root@server-1C~]# setenforce 0

Установка PostgreSQL


Начиная с версии 8.1 1С официально поддерживает работу с СУБД PostgreSQL, однако в чистом виде PostgreSQL с 1С не работает. На сайте 1С представлены патчи для PostgreSQL, а также исходные коды в виде src.rpm для сборки пакетов на rpm-based системах (при желании можно собрать и в deb-based системах). Можно воспользоваться еще двумя способами -  зарегистрированным пользователям можно скачать готовые rpm пакеты с сайта 1C(или с диска ИТС) или воспользоваться готовой сборкой со всеми патчами от компании Etersoft (есть готовые пакеты для множества дистрибутивов). Мы воспользуемся вариантом от компании Etersoft.
Скачиваем все пакеты для нужного дистрибутива в определенный каталог (создадим, например, /root/install), переходим в него и устанавливаем все скачанные пакеты:

[root@server-1C~]# mkdir /root/install
[root@server-1C~]# cd /root/install
[root@server-1C install]# wget ftp://updates.etersoft.ru/pub/Etersoft/Postgre@Etersoft/stable/CentOS/6/*
[root@server-1C~]# yum localinstall --nogpgcheck *.rpm

и инициализируем базу:

[root@server-1C~]# su postgres
bash-4.1$ initdb -D /var/lib/pgsql/data --locale=ru_RU.UTF-8
bash-4.1$ exit
(для Украины нужно с другой локалью --locale=uk_UA.UTF-8)

Стартуем PostgreSQL и добавляем его в автозагрузку:

[root@server-1C~]# service postgresql start
[root@server-1C~]# chkconfig postgresql on

Создаем пароль пользователю postgres:

[root@server-1C~]# su postgres
bash-4.1$ psql
postgres=#
postgres=# ALTER USER postgres WITH PASSWORD 'your_password';
postgres=# ALTER ROLE
postgres=# postgres=# \q
bash-4.1$ exit

Установка сервера 1С


Теперь приступим к установке пакетов 1С. Необходим следующий список пакетов(версии могут отличаться):

1C_Enterprise82-common-8.2.15-289.x86_64.rpm
1C_Enterprise82-common-nls-8.2.15-289.x86_64.rpm
1C_Enterprise82-server-8.2.15-289.x86_64.rpm
1C_Enterprise82-server-nls-8.2.15-289.x86_64.rpm
1C_Enterprise82-ws-8.2.15-289.x86_64.rpm
1C_Enterprise82-ws-nls-8.2.15-289.x86_64.rpm

Взять эти пакеты можно или с диска ИТС или скачать у с сайта 1С, если вы являетесь зарегистрированным пользователем системы 1С. Переходим в каталог, в который вы сложили эти пакеты и выполняем знакомую нам команду установки:

[root@server-1C~]# yum localinstall --nogpgcheck *.rpm

Запустим и добавим в автозагрузку службу 1С:

[root@server-1C~]# /etc/init.d/srv1cv82 start
[root@server-1C~]# chkconfig srv1cv82 on

Установка Веб-клиента


На этом установку можно было бы считать законченной и пользоваться нативными клиентами из под Windows(ну или через wine). Но в версии 1С:Предприятие 8.2 появилась одна очень интересная возможность — веб клиент. Веб-клиент дает возможность работать в 1С прям из браузера, что дает множество преимуществ, в том числе и независимость от Windows (конфигуратор будет работать только из нативного клиента для Windows). Кстати, стоит сказать, что в браузере будет работать только интерфейс, созданный с помощью управляемых форм, но это уже удел программистов 1С :). Итак, приступим.
Считаем, что http сервер apache уже установлен, в противном случае установите его. Выполним публикацию веб-клиента с помощью специальной утилиты:

[root@server-1C ~]# cd /opt/1C/v8.2/x86_64/
[root@server-1C x86_64]# ./webinst -apache22 -wsdir test -dir '/var/www/html/test/' -connStr 'Srvr="server-1C.mydomain.com";Ref="test"' -confPath /etc/httpd/conf/httpd.conf

где

apache22 — публикация веб-клиента для сервера apache версии 2.2 (возможно еще 2.0)
wsdir — имя алиаса который добавится в файл конфигурации apache(будем обращаться к нашей базе http://server-1C.mydomain.com/test)
dir — физический каталог, куда указывает wsdir (в этом каталоге будет лежать файл default.vrd)
connStr — строка соединения с информационной базой
confPath — путь к файлу конфигурации apache

Теперь переопределим владельца файла default.vrd, чтобы apache имел к нему доступ:

[root@server-1C ~]# chown apache:apache /var/www/html/basa/default.vrd

Веб-клиент может работать только в том случае, если 1С работает в режиме «управляемого приложения» и пользовательский интерфейс разработан с помощью концепции «управляемого интерфейса». Следует заметить, что этот функционал в версии 8.1 не реализован, поэтому совместимости нет.
Для нормального функционирования в «управляемом режиме» необходимы шрифты truetype от Microsoft. По лицензионным соображениям, в стандартных репозиториях пакета с нужными нам шрифтами нет, поэтому будем собирать пакет из исходников. Для этого установим несколько необходимых пакетов, подключив сторонний репозиторий atrpms(считаем, что репозиторий epel уже подключен):

[root@server-1C ~]# rpm -i http://dl.atrpms.net/el6-x86_64/atrpms/stable/atrpms-repo-6-5.el6.x86_64.rpm
[root@server-1C ~]# yum install ImageMagick cabextract ttf2pt1
[root@server-1C ~]# wget http://corefonts.sourceforge.net/msttcorefonts-2.0-1.spec
[root@server-1C ~]# rpmbuild -bb msttcorefonts-2.0-1.spec
[root@server-1C ~]# yum localinstall /root/rpmbuild/RPMS/noarch/msttcorefonts-2.0-1.noarch.rpm

Запускаем утилиту кинфигурации сервера 1С, указывая путь к установленным шрифтам:

[root@server-1C ~]# cd /opt/1C/v8.2/x86_64/utils/
[root@server-1C utils]# ./config_server /usr/share/fonts/msttcorefonts

Заметка

Утилита config_server зависит от 32х битных библиотек (которые будут необходимо и для драйвера hasp), поэтому необходимо доустановить пакет glib2.i686.
Если вы устанавливаете (как в данном случае) или обновляетесь до платформы версии 8.2.15, то необходимо еще доустановить пакет glib2-devel.

Перезапустим службу сервера и на этом установка завершена.

Установка HASP


Если не использовать тонкий или веб-клиент, то установленный сервер 1С .8.2 позволяет использовать до 12 соединений без hasp-ключа, только это не совсем законно :). Поэтому есть 2 варианта, как использовать hasp-ключ: сетевой и локальный.
Для использования сетевого ключа необходимо создать файл nethasp.ini в каталоге /opt/1C/v8.2/x86_64/conf с таким содержимым:

[NH_COMMON]
NH_TCPIP =Enabled ;протокол передачи данных(TCP или UDP)

[NH_TCPIP]
NH_SERVER_ADDR = 192.168.0.232 ;ip-адрес компьютера, куда вставлен
NH_PORT_NUMBER = 475 ;порт, на котором слушает hasp-ключ
NH_TCPIP_METHOD = TCP ;протокол, по которому ведется обмен информации с ключом

Более подробную информацию о синтаксисе в nethasp.ini можно прочесть здесь, а также примеры файлов можно скачать с сайта Alladin.
Для использования локального ключа необходимо установить драйвер для hasp-ключа. Стоит отметить, что на 64х битных драйверов для hasp не выпускается, поэтому будет устанавливаться 32х битный драйвер, для которого могут потребоваться дополнительные зависимости в виде 32х битных библиотек. Заходим на страницу Alladin и скачиваем файл Sentinel_HASP_RedHat_and_SuSE_RPM_Run-time_Installer.tar.gz. Распакуем архив в каталог /root/install и установим пакет:

[root@server-1C ~]# wget ftp://ftp.aladdin.com/pub/hasp/Sentinel_HASP/Linux/Sentinel_HASP_RedHat_and_SuSE_RPM_Run-time_Installer.tar.gz
[root@server-1C ~]# tar -xzf Sentinel_HASP_RedHat_and_SuSE_RPM_Run-time_Installer.tar.gz
[root@server-1C ~]# cd /root/install/Sentinel_HASP_RedHat_and_SuSE_RPM_Run-time_Installer
[root@server-1C Sentinel_HASP_RedHat_and_SuSE_RPM_Run-time_Installer]# yum localinstall aksusbd-1.16-1.i386.rpm

Перезапустим службу драйвера hasp и добавим в автозагрузку(возможно придется перегрузить сервер, чтобы ключ определился):

[root@server-1C ~]# /etc/init.d/aksusbd restart
[root@server-1C ~]# chkconfig aksusbd on

Программные лицензии


Помимо аппаратных лицензий в виде usb-ключей последнее время фирма 1C настоятельно рекомендует использовать программные лицензии(есть свои плюсы) и аппаратные ключи получить очень проблемно. Подробно описывать активацию программных ключей не представляет смысла, потому как вместе с этими ключами прилагается подробное руководство по активации, да и к тому же интерфейс активации довольно интуитивный. Единственное, на что я бы хотел обратить ваше внимание(хотя это и очевидно, но всё же) - производите активацию лицензий(и сервера, и многопользовательские) "на сервер"(в терминологии 1С). При такой активации ваши лицензии будут лежать на сервере и им же раздаваться. При такой активации возможен один глюк(это не связано с лицензиями и типом активации) - "слетает" лицензия и после повторной активации лицензии не применяются(активация проходит успешно, но при попытке войти клиентом или через веб пишет об отсутствии лицензии и снова просит активировать). Выход из данной ситуации простой. Файлы лицензий после активации лежат в каталоге /home/usr1cv82/.1cv82/1C/1Cv82/conf вашего сервера. Просто переместите их в каталог /opt/1C/v8.2/x86_64/conf и перзапустите сервис 1C:

[root@server-1C ~]# /etc/init.d/srv1cv82 restart

Если у вас возникли вопросы или замечания, пишите в комментариях. Также, обратите внимание на форум http://1clinux.org/

3 комментария:

  1. мне понравилась статья сделал как все описано все поставилось. Единственное вот что выполняю postgres=# \q он пишет:
    could not save history to file "/var/lib/pgsql/.psql_history": Нет такого файла или каталога у меня centos 6.3 86_x64

    ОтветитьУдалить
  2. вот ответ на ваш вопрос
    http://www.postgresql.org/message-id/4A463C15.8010309@Sheeky.Biz

    ОтветитьУдалить
  3. Спасибо за подробную статью!

    ОтветитьУдалить