Thank you for reading this post, don't forget to subscribe!
Оригинал статьи:
Установка 1C Server + Postgres PRO + Apache + Эмулятор HASP в Centos 8
Подготовка
Обновляемся, добавляем репозиторий EPEL, устанавливаем софт
1 2 3 |
$ sudo dnf -y update $ sudo dnf -y install epel-release $ sudo dnf -y install wget bzip2 traceroute net-tools nano bind-utils telnet htop atop iftop lsof git rsync policycoreutils-python-utils tar zip unzip |
Изменим hostname сервера
1 2 3 4 |
$ sudo hostnamectl set-hostname server1c $ sudo nano /etc/hosts … 192.168.11.235 server1c |
На клиентской машине сервер должен отвечать на ping по доменному имени
Установка Postgres PRO
Добавляем репозиторий Postgres Pro
1 2 |
$ sudo rpm -i http://repo.postgrespro.ru/pgpro-12/keys/centos.rpm $ sudo dnf makecache |
Устанавливаем PostgreSQL PRO std
1 |
$ sudo dnf -y install postgrespro-std-12 |
Проверяем статус
1 |
$ sudo systemctl status postgrespro-std-12 |
Удаляем базу, которая создалась по-умолчанию
1 |
$ sudo rm -rf /var/lib/pgpro/std-12/data |
Инициализируем БД, модифицируем настройки под работу с 1с и добавляем поддержку русского языка
1 |
$ sudo /opt/pgpro/std-12/bin/pg-setup initdb --tune=1c --locale=ru_RU.UTF-8 |
без —locale=… выскакивает ошибка: порядок сортировки не поддерживается базой данных
Добавляем сервис в автозагрузки и проверяем доступность порта 5432
1 2 |
$ sudo systemctl enable --now postgrespro-std-12 $ ss -nltup |
Настройка Postgres PRO
Разрешим авторизовываться пользователям из нашей сети
1 2 3 4 5 |
$ sudo nano /var/lib/pgpro/std-12/data/pg_hba.conf … #IPv4 local connections: host all all 127.0.0.1/32 md5 host all all 192.168.11.0/24 md5 |
Создадим пароль для пользователя postgres
1 2 3 4 5 |
$ sudo su - postgres $ psql =# ALTER USER postgres WITH ENCRYPTED PASSWORD 'vTH886v4g2TqcD'; =# \q $ exit |
Перезапускаем сервис postgrespro-std-12
1 |
$ sudo systemctl restart postgrespro-std-12 |
Установка сервера 1C
Для начала необходимо скачать дистрибутив server 1c под linux в каталог /tmp
Сделать это можно с официального сайта, либо поискать в интернете
Распаковываем архив с дистрибутивом и устанавливаем
1 2 3 |
$ cd /tmp $ tar xvf rpm64_8_3_17_1549.tar.gz $ sudo dnf -y localinstall *.rpm |
Меняем владельца и группу директории /opt/1C
1 |
$ sudo chown -R usr1cv8:grp1cv8 /opt/1C |
Добавляем сервис srv1cv83 в автозагрузку, запускаем его и проверяем статус
1 2 3 |
$ sudo systemctl enable srv1cv83 $ sudo systemctl start srv1cv83 $ sudo systemctl status srv1cv83 |
Настройка сервера 1C
Создаем каталог, в котором будут храниться конфигурации 1с для подключения к базе
1 2 |
$ sudo mkdir -p /mnt/1c/base $ sudo chown -R usr1cv8:grp1cv8 /mnt/1c/base |
Редактируем конфигурационный файл сервера 1с srv1cv83, указываем путь к новому каталогу
1 2 3 |
$ sudo nano /etc/sysconfig/srv1cv83 … SRV1CV8_DATA=/mnt/1c/base |
Перезапускаем сервис srv1cv83 и проверяем статус
1 2 |
$ sudo systemctl restart srv1cv83 $ sudo systemctl status srv1cv83 |
Установка и настройка драйвера HASP
Устанавливаем необходимую утилиту
1 |
$ sudo dnf -y install glibc |
Скачиваем rpm-пакеты
1 2 3 |
$ cd /tmp $ wget http://download.etersoft.ru/pub/Etersoft/HASP/last/x86_64/CentOS/7/haspd-7.90-eter2centos.x86_64.rpm $ wget http://download.etersoft.ru/pub/Etersoft/HASP/last/x86_64/CentOS/7/haspd-modules-7.90-eter2centos.x86_64.rpm |
Устанавливаем их
1 |
$ sudo dnf -y localinstall haspd* |
Настраиваем
1 2 3 |
$ sudo nano /etc/haspd/hasplm.conf … NHS_IP_LIMIT = 127.0.0.1, 192.168.11.0/24 |
В этой строчке перечислены сети и хосты, которые смогут видеть HASP-ключ
Перезапускаем сервис haspd, смотрим статус
1 2 |
$ sudo systemctl restart haspd $ sudo systemctl status haspd |
Настройка Firewalld
Открываем порты
1 2 3 4 5 6 7 |
$ sudo firewall-cmd --permanent --add-port=80/tcp $ sudo firewall-cmd --permanent --add-port=1540/tcp $ sudo firewall-cmd --permanent --add-port=1541/tcp $ sudo firewall-cmd --permanent --add-port=1560/tcp $ sudo firewall-cmd --permanent --add-port=5432/tcp $ sudo firewall-cmd --reload $ sudo firewall-cmd --list-all |
Создание базы 1с (на windows-машине через консоль администрирования серверов 1С Предприятия)
Запускаем консоль администрирования серверов 1С Предприятия
Правой кнопкой мыши (ПКМ):
1 |
Central 1C:Enterprise 8.3 servers - Создать - Центральный сервер 1С:Предприятие 8.3 |
1 2 3 |
Протокол: TCP Имя: server1c IP порт: 1540 |
Кластер «Local cluster» при этом будет создан автоматически
Теперь создаем информационную базу
1 |
Выбираем "Local cluster" - Информационные базы - ПКМ - Создать - Информационная база |
1 2 3 4 5 6 7 8 |
Имя: base1c Защищенное соединение: выключено Сервер баз данных: sever1c Тип СУБД: PostgreSQL База данных: base1c Пользователь сервера БД: postgres Пароль пользователя БД: vTH886v4g2TqcD (этот пароль был задан на этапе установки БД) Создать базу данныз в случае ее отсутствия: + |
Установка шрифтов для подготовки к публикации web-сервера
Установка необходимых пакетов
1 |
$ sudo dnf -y install rpm-build ttmkfdir fontconfig freetype libgsf unixODBC |
Так же нам нужен пакет cabextract, но под Centos 8 в базовых репозиториях его нет. По-этому скачиваем его из стороннего источника и устанавливаем
1 2 3 |
$ cd /tmp $ wget https://pkgs.dyn.su/el8/base/x86_64/cabextract-1.9-2.el8.x86_64.rpm $ sudo dnf -y localinstall cabextract-1.9-2.el8.x86_64.rpm |
Скачиваем файл спецификации для установки шрифтов microsoft
1 |
$ wget http://corefonts.sourceforge.net/msttcorefonts-2.5-1.spec |
Подготавливаем пакет шрифтов
1 |
$ rpmbuild -bb msttcorefonts-2.5-1.spec |
При выполнении команды rpmbuild … должны скачаться все шрифты, и собраться пакет. Если в процессе выполнения команды появится ошибка, например: «Connection timed out, не удалось разрешить адрес зеркала», нужно запустить команду еще раз.
Устанавливаем пакет шрифтов
1 |
$ sudo rpm -ivh $HOME/rpmbuild/RPMS/noarch/msttcorefonts-2.5-1.noarch.rpm |
Установка web-сервера Apache
Устанавливаем Apache
1 |
$ sudo dnf -y install httpd |
Добавляем его в автозагрузку, запускаем и смотрим статус
1 2 |
$ sudo systemctl enable --now httpd $ sudo systemctl status httpd |
Создадим каталог, он будет использован как путь публикации для web-сервера 1с
1 |
$ sudo mkdir -p /var/www/infobase |
Создадим пустой файл, он будет указан в качестве конфигурационного файла web-сервера 1с
1 |
$ sudo touch /etc/httpd/conf.d/base.conf |
Далее публикуем базу 1С
1 2 3 |
$ cd /opt/1C/v8.3/x86_64 $ sudo ./webinst -apache24 -wsdir base -dir /var/www/infobase/ -connStr "Srvr=server1c;Ref=base1c;" -confPath /etc/httpd/conf.d/base.conf Publication successful |
где
1 2 3 4 5 6 |
-dir — путь к папке вебсервера, ранее созданная директория -connStr — путь к расположеныю файловой базы 1С -confPath — путь к файлу конфигурации вебсервера, ранее созданный файл (должен быть быть пустым) -publish - указывает необходимое действие, в данном случае публикацию, может быть опущен, так как это действие по умолчанию -wsdir - имя публикации, по которому к базе следует обращаться из браузера, обратите внимание, что оно регистрозависимое -connstr - строка соединения, состоит из нескольких частей: Srvr - имя сервера, Ref - имя базы на сервере, каждая часть должна заканчиваться служебным символом ";" |
Меняем владельца и группу созданного файла, перезапускаем Apache
1 2 |
$ sudo chown apache:apache /var/www/infobase/default.vrd $ sudo systemctl restart httpd |
Настройка SELinux
Создаем файл с описанием политик web 1с для Selinux
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
$ cd /tmp $ nano httpd_1c.te module httpd_1c 1.0; require { type httpd_t; type httpd_tmp_t; type user_home_t; type httpd_sys_content_t; class dir { add_name create read remove_name rmdir write }; class file { create lock open read rename setattr unlink write }; class file execute; } ============= httpd_t ============== !!!! This avc is allowed in the current policy allow httpd_t httpd_sys_content_t:file write; !!!! This avc is allowed in the current policy allow httpd_t user_home_t:dir { add_name create read remove_name rmdir write }; allow httpd_t user_home_t:file rename; !!!! This avc is allowed in the current policy allow httpd_t user_home_t:file { create lock open read setattr unlink write }; !!!! This avc can be allowed using the boolean ‘httpd_tmp_exec’ allow httpd_t httpd_tmp_t:file execute; |
Cомпилируем и установим политику
1 2 3 |
$ sudo checkmodule -M -m -o httpd_1c.mod httpd_1c.te $ sudo semodule_package -o httpd_1c.pp -m httpd_1c.mod $ sudo semodule -i httpd_1c.pp |
Перезапустим сервер Apache
1 |
$ sudo systemctl restart httpd |
В моем случае верхнее правило не помогло, пришлось поступать следующим образом:
Анализируем лог, компилируем и устанавливаем еще одну политику
1 2 3 4 |
$ cd /tmp $ sudo grep httpd /var/log/audit/audit.log | grep denied | audit2allow -m httpdlocalconf > httpdlocalconf.te $ sudo grep httpd /var/log/audit/audit.log | grep denied | audit2allow -M httpdlocalconf $ sudo semodule -i httpdlocalconf.pp |
Проверяем в браузере:
1 |
http://192.168.11.235/base |
Или через тонкий клиент 1С по тому же адресу.
На этом установка Сервера 1с с базой данных PostgreSQL и публикацией сервера в web завершена. Можно подключать USB-ключ с лицензией к серверу и работать.
Но, если вы разворачиваете ради тестирования, можно установить эмулятор HASP.
Установка эмулятора HASP в Centos 8 из исходников
Устанавливаем утилиты сборки
1 |
$ sudo dnf -y install gcc gcc-c++ make |
Устанавливаем заголовки ядра
1 |
$ sudo dnf -y install kernel-devel |
Устанавливаем утилиты для сборки зависимостей
1 |
$ sudo dnf -y install jansson-devel libusb.i686 elfutils-libelf-devel |
Устанавливаем GIT
1 |
$ sudo dnf -y install git |
Скачиваем исходники VHCI_HCD, LIBUSB_VHCI и USB_HASP в каталог /usr/src
1 2 3 4 |
$ cd /usr/src $ sudo wget https://sourceforge.net/projects/usb-vhci/files/linux%20kernel%20module/vhci-hcd-1.15.tar.gz/download -O vhci-hcd-1.15.tar.gz $ sudo wget https://sourceforge.net/projects/usb-vhci/files/native%20libraries/libusb_vhci-0.8.tar.gz/download -O libusb_vhci-0.8.tar.gz $ sudo git clone https://github.com/sam88651/UsbHasp.git |
Распаковываем исходники VHCI_HCD и LIBUSB_VHCI
1 2 |
$ sudo tar -xpf libusb_vhci-0.8.tar.gz $ sudo tar -xpf vhci-hcd-1.15.tar.gz |
Компилируем VHCI_HCD
1 2 3 4 5 6 7 8 9 |
$ KVER=uname -r $ cd vhci-hcd-1.15 $ sudo mkdir -p linux/${KVER}/drivers/usb/core $ sudo cp /usr/src/kernels/${KVER}/include/linux/usb/hcd.h linux/${KVER}/drivers/usb/core $ sudo sed -i 's/#define DEBUG/\/\/#define DEBUG/' usb-vhci-hcd.c $ sudo sed -i 's/#define DEBUG/\/\/#define DEBUG/' usb-vhci-iocifc.c $ sudo sed -i 's/VERIFY_READ, //' usb-vhci-iocifc.c $ sudo sed -i 's/VERIFY_WRITE, //' usb-vhci-iocifc.c $ sudo make KVERSION=${KVER} |
Устанавливаем VHCI_HCD
1 |
$ sudo make install |
Загружаем модуль usb_vhci_hcd
1 2 |
$ echo "usb_vhci_hcd" | sudo tee /etc/modules-load.d/usb_vhci.conf $ sudo modprobe usb_vhci_hcd |
Загружаем модуль usb_vhci_iocifc
1 2 |
$ echo "usb_vhci_iocifc" | sudo tee -a /etc/modules-load.d/usb_vhci.conf $ sudo modprobe usb_vhci_iocifc |
Компилируем LIBUSB_VHCI
1 2 3 |
$ cd ../libusb_vhci-0.8 $ sudo ./configure $ sudo make -s |
Устанавливаем LIBUSB_VHCI
1 2 3 |
$ sudo make install $ echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/libusb_vhci.conf $ sudo ldconfig |
Компилируем UsbHasp
1 2 |
$ cd ../UsbHasp $ sudo make -s |
Устанавливаем UsbHasp
1 |
$ sudo cp dist/Release/GNU-Linux/usbhasp /usr/local/sbin |
Создаем директорию для дампов usb-ключей
1 |
$ sudo mkdir /etc/usbhaspkey/ |
Создаем системный unit usbhaspemul.service
1 |
$ sudo nano /etc/systemd/system/usbhaspemul.service |
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 |
[Unit] Description=Emulation HASP key for 1C Requires=haspd.service After=haspd.service [Service] Type=simple ExecStart=/usr/bin/sh -c 'find /etc/usbhaspkey -name "*.json" | xargs /usr/local/sbin/usbhasp' Restart=always [Install] WantedBy=multi-user.target |
[/codesyntax]
Добавляем службу usbhaspemul в автозагрузку
1 2 |
$ sudo systemctl daemon-reload $ sudo systemctl enable usbhaspemul |
Загружаем дампы usb-ключей в каталог /etc/usbhaspkey/ (дампы искать в интернете)
1 2 |
$ sudo cp /tmp/Dumps/1c_server_x64.json /etc/usbhaspkey/ $ sudo cp /tmp/Dumps/100user.json /etc/usbhaspkey/ |
Пробуем запустить USB HASP Emulator, проверяем статус
1 2 |
$ sudo systemctl start usbhaspemul $ sudo systemctl status usbhaspemul |
Разное
Сервер разворачивался в VirtualBox, параметры:
1 2 3 4 5 6 7 |
OS: Centos 8.2 dvd iso сеть: сетевой мост $ cat /etc/hosts 192.168.11.235 server1c В винде в drivers/etc/hosts 192.168.11.235 server1c |