0. Если ставим на виртуалку - обязательно в нее добавляем USB-контроллер, иначе хаcпэмулятор не заведется
1. Устанавливаем CentOS 7 в минимальной конфигурации, назначаем IP и имя сервера
2. Обновляем CentOS, устанавливаем исходники ядра и необходимые пакеты
yum -y install epel-release
yum -y update
yum -y install wget bzip2 traceroute net-tools nano bind-utils telnet htop atop iftop lsof tar zip unzip mc usbutils git jansson-devel ImageMagick unixODBC glibc
3. Отключаем CElinux, выставив celinux=disabled в /etc/celinux/config и перезагружаемся
Установка и настройка PostgreSQL
4. Добавляем репозиторий Postgres Pro
rpm -i http://repo.postgrespro.ru/pgpro-13/keys/centos.rpm
yum makecache
5. Устанавливаем PostgreSQL PRO std 13 версии
yum -y install postgrespro-std-13
6. Проверяем статус
systemctl status postgrespro-std-13
7. Останавливаем сервис СУБД и удаляем базу, которая создалась по-умолчанию
systemctl stop postgrespro-std-13
rm -rf /var/lib/pgpro/std-13/data
8. Инициализируем БД, модифицируем настройки под работу с 1с и добавляем поддержку русского языка
/opt/pgpro/std-13/bin/pg-setup initdb --tune=1c --locale=ru_RU.UTF-8
9. Добавляем сервис в автозагрузки и проверяем доступность порта 5432
systemctl enable --now postgrespro-std-13
ss -nltup
10. Разрешим авторизовываться пользователям из нашей сети
nano /var/lib/pgpro/std-13/data/pg_hba.conf
#IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all 192.168.0.0/16 md5
11. Создадим пароль для пользователя postgres
$ su - postgres psql
ALTER USER postgres WITH ENCRYPTED PASSWORD 'наш_пароль';
\q
12. Перезапускаем сервис postgrespro-std-13
systemctl restart postgrespro-std-13
13. Настраиваем firewall для доступа к серверу извне
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-port=475/tcp
firewall-cmd --permanent --add-port=1540/tcp
firewall-cmd --permanent --add-port=1541/tcp
firewall-cmd --permanent --add-port=1560/tcp
firewall-cmd --permanent --add-port=5432/tcp
firewall-cmd --reload
firewall-cmd --list-all
Установка и настройка драйвера и эмулятора HASP
14. Скачиваем драйвер HASP
cd /tmp
wget http://download.etersoft.ru/pub/Etersoft/HASP/last/x86_64/CentOS/7/haspd-8.23-eter2centos.x86_64.rpm
yum -y localinstall haspd*
systemctl restart haspd
systemctl status haspd
15. Собираем драйвера виртуального USB и UsbHasp
yum -y install "kernel-devel-uname-r == $(uname -r)"
yum -y groupinstall "Development Tools"
cd /usr/src
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
wget https://sourceforge.net/projects/usb-vhci/files/native%20libraries/libusb_vhci-0.8.tar.gz/download -O libusb_vhci-0.8.tar.gz
git clone https://github.com/sam88651/UsbHasp.git
tar -xpf vhci-hcd-1.15.tar.gz
tar -xpf libusb_vhci-0.8.tar.gz
cd vhci-hcd-1.15
mkdir -p "/usr/src/vhci-hcd-1.15/linux/$(uname -r)/drivers/usb/core"
cp "/usr/src/kernels/$(uname -r)/include/linux/usb/hcd.h" "/usr/src/vhci-hcd-1.15/linux/$(uname -r)/drivers/usb/core/"
# В файлах "usb-vhci-hcd.c" и "usb-vhci-iocifc.c" находим "#define DEBUG" и комментируем //
make KVERSION="$(uname -r)" KSRC="/usr/src/kernels/$(uname -r)"
make install
# Загружаем модули в ядро
echo "usb_vhci_hcd" | sudo tee /etc/modules-load.d/usb_vhci.conf
modprobe usb_vhci_hcd
echo "usb_vhci_iocifc" | sudo tee -a /etc/modules-load.d/usb_vhci.conf
modprobe usb_vhci_iocifc
# Собираем библиотеки libusb_vhci
cd ../libusb_vhci-0.8
./configure
make
make install
echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/libusb_vhci.conf
ldconfig -v
# Собираем эмулятор UsbHasp
cd ../UsbHasp
# В /usr/src/UsbHasp/nbproject/Makefile-Release.mk заменить "CFLAGS=" на "CFLAGS=-std=gnu99"
make
cp /usr/src/UsbHasp/dist/Release/GNU-Linux/usbhasp /usr/bin
16. Настраиваем и запускаем USB HASP emulator
mkdir /etc/haspkey/
nano /etc/systemd/system/usbhaspemul.service
[Unit]
Description=Emulation HASP key for 1C
Requires=haspd.service
After=haspd.service
[Service]
Type=simple
ExecStart=/usr/bin/sh -c 'find /etc/haspkey -name "*.json" | xargs /usr/bin/usbhasp'
Restart=always
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable usbhaspemul
# Загружаем дампы usb-ключей в каталог /etc/haspkey/
cp /tmp/Dumps/1c_server_x64.json /etc/haspkey/
cp /tmp/Dumps/100user.json /etc/haspkey/
# Пробуем запустить USB HASP Emulator, проверяем статус
systemctl start usbhaspemul
systemctl status usbhaspemul
Установка и настройка 1С-сервера
17. Качаем последнюю версию 1С сервера с сайта 1С
18. Распаковываем архив с сервером 1С и устанавливаем его
cd /tmp
tar xvf rpm64_8.3.19.1264.tar.gz
yum -y localinstall *.rpm
19. Создадим симлинки для старта 1С-сервера как сервиса
ln -s /opt/1cv8/x86_64/8.3.19.1264 /opt/1cv8/x86_64/current
ln -s /opt/1cv8/x86_64/current/srv1cv83.conf /etc/sysconfig/srv1cv83
ln -s /opt/1cv8/x86_64/current/srv1cv83 /etc/init.d/srv1cv83
20. Меняем владельца и группу директории /opt/1C
chown -R usr1cv8:grp1cv8 /opt/1cv8/
21. Создадим и запустим сервис, проверим его статус
systemctl enable srv1cv83
systemctl start srv1cv83
systemctl status srv1cv83
22. Создаем каталог, в котором будут храниться конфигурации 1с для подключения к базе
mkdir -p /opt/1cv8/base
chown -R usr1cv8:grp1cv8 /opt/1cv8/base
23. Редактируем конфигурационный файл сервера 1с srv1cv83, указываем путь к новому каталогу
nano /etc/sysconfig/srv1cv83
SRV1CV8_DATA=/opt/1cv8/base
24. Перезапускаем сервис srv1cv83 и проверяем статус
systemctl restart srv1cv83
systemctl status srv1cv83
25. На любой компьютер устанавливаем толстый клиент 1С Предприятие той же версии что и сервер, во время установки обязательно выбираем компонент «Администрирование серверов 1С Предприятия»
26. Запускаем утилиту «Администрирование серверов 1С Предприятия», в открывшемся окне выбираем Создать - Центральный сервер 1С:Предприятие 8.3, вписываем данные настроенного сервера
Протокол: tcp
Имя: IP-адрес сервера
IP порт: 1540
Описание: Сервер 1С CentOS 7
27. Переходим в раздел Кластеры - Локальный кластер. Выбираем Создать - Информационная база. Заполняем параметры для создания новой базы
Имя: zup30
Описание: Зарплата
Защищенное соединение: выключено
Сервер баз данных: 127.0.0.1
Тип СУБД: PostgreSQL
База данных: zup30
Пользователь сервера БД: postgres
Пароль пользователя БД: ‘password’
Разрешить выдачу лицензий сервером 1С:Предприятия: Да
Язык (Страна): русский (Россия)
Создать базу данных в случае ее отсутствия: Да
Установить блокировку регламентных заданий: Нет
28. Если получаем ошибку «Этот хост неизвестен», надо прописать либо запись в DNS, либо в файле hosts
Установка и настройка публикации 1С на вебсервере Apache
29. Установка шрифтов для публикации на вебсервере
yum -y install rpm-build ttmkfdir fontconfig freetype libgsf
cd /tmp
wget https://pkgs.dyn.su/el8/base/x86_64/cabextract-1.9-2.el8.x86_64.rpm
yum -y localinstall cabextract-1.9-2.el8.x86_64.rpm
wget http://corefonts.sourceforge.net/msttcorefonts-2.5-1.spec
rpmbuild -bb msttcorefonts-2.5-1.spec
(если не скачиваются шрифты, надо запустить команду еще раз)
yum -y install $HOME/rpmbuild/RPMS/noarch/msttcorefonts-2.5-1.noarch.rpm
30. Устанавливаем веб-сервер Apache c поддержкой ssl
yum -y install httpd mod_ssl
Так как компания 1С рекомендует использовать модуль мультипроцессорной обработки worker, выясняем с каким модулем работает наш сервер
apachectl -V | grep -I mpm
И если это prefork или event
меняем его на mpm_worker в /etc/httpd/conf.modules.d/00-mpm.conf
создаем службу, запускаем апач и проверяем статус
systemctl enable --now httpd
systemctl status httpd
31. Создадим каталог, он будет использован как путь публикации для web-сервера 1с
mkdir -p /var/www/infobase
32. Создадим пустой файл, он будет указан в качестве конфигурационного файла web-сервера 1с
touch /etc/httpd/conf.d/base.conf
33. Публикуем базу 1С
cd /opt/1cv8/x86_64/current/
./webinst -apache24 -wsdir base -dir /var/www/infobase/ -connStr "Srvr=1c.server.ru;Ref= zup30;» -confPath /etc/httpd/conf.d/base.conf
chown apache:apache /var/www/infobase/default.vrd
Расширенная конфигурация публикации базы 1С на вебсервере Apache
34. Подобная публикация базы создает минимальную конфигурацию VRD, которой достаточно для работы с базой через веб, но недостаточно для работы того же Bitrix в связке с 1С, так как должны быть опубликованы и сервисы. Для Битрикса и подобных связок конфигурация должна быть примерно такая:
<?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="/zup30"
ib="Srvr=1c.server.ru;Ref=zup30;">
<ws publishExtensionsByDefault="true">
<point name="AccHRMDataTransfer"
alias="AccHRMDataTransfer.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="EnterpriseDataExchange_1_0_1_1"
alias="EnterpriseDataExchange_1_0_1_1.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="EnterpriseDataUpload_1_0_1_1"
alias="EnterpriseDataUpload_1_0_1_1.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="EquipmentService"
alias="EquipmentService.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="Exchange"
alias="exchange.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="Exchange_2_0_1_6"
alias="exchange_2_0_1_6.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="Exchange_3_0_1_1"
alias="exchange_3_0_1_1.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="InterfaceVersion"
alias="InterfaceVersion.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="MobileAccounting"
alias="MobileAccounting.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="MobileEntrepreneur"
alias="MobileAcc.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="MobileEntrepreneur_1_0_2_1"
alias="MobileEntrepreneur.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="RemoteAdministrationOfExchange"
alias="RemoteAdministrationOfExchange.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="RemoteAdministrationOfExchange_2_0_1_6"
alias="RemoteAdministrationOfExchange_2_0_1_6.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="RemoteAdministrationOfExchange_2_1_6_1"
alias="RemoteAdministrationOfExchange_2_1_6_1.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="RemoteAdministrationOfExchange_2_4_5_1"
alias="RemoteAdministrationOfExchange_2_4_5_1.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="RemoteControl"
alias="RemoteControl.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
</ws>
<httpServices publishExtensionsByDefault="true">
<service name="ExternalAPI"
rootUrl="api"
enable="false"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<service name="MobileAppReceiptScanner"
rootUrl="MobileAppReceiptScanner"
enable="false"
reuseSessions="autouse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<service name="ПередачаДанных"
rootUrl="dt"
enable="false"
reuseSessions="use"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<service name="ЭДО"
rootUrl="edi"
enable="false"
reuseSessions="autouse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
</httpServices>
<standardOdata enable="false"
reuseSessions="autouse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<analytics enable="true"/>
</point>
Бэкапирование и восстановление баз 1С
35. Создаем бэкап базы данных
mkdir /opt/backup
sudo -u postgres pg_dump pnk_bis | pigz > /opt/backup/zup30.sql.gz
36. Восстанавливаем базу из бэкапа
Разархивируем бэкап базы данных
unpigz /opt/backup/zup30.sql.gz (исходный архив будет удален) или
unpigz -c /opt/backup/zup30.sql.gz > zup30.sql (исходный архив останется)
Создаем базу данных для разворачивания бэкапа
sudo -u postgres createdb -T template0 zup30_restored
Восстанавливаем бэкап в созданную базу данных
sudo -u postgres psql zup30_restored < zup30.sql 1>/dev/null
Удаляем базу данных
sudo -u postgres dropdb zup30_restored
38. Создадим скрипт для упрощения процесса бэкапирования
#!/bin/sh
# Устанавливаем дату
DATA=`date +"%Y-%m-%d_%H-%M"`
# Бэкапим базу данных zup30
echo "`date +"%Y-%m-%d_%H-%M-%S"` Start backup zup30" >> /opt/backup-sql.log
su - postgres /usr/bin/pg_dump zup30 | pigz > /opt/backup/$DATA-zup30.sql.gz
echo "`date +"%Y-%m-%d_%H-%M-%S"` End backup zup30" >> /opt/backup-sql.log
# Удаляем в папке с бэкапами архивы старше 30 дней
/usr/bin/find /backup -type f -mtime +30 -exec rm -rf {} \;
39. Создадим скрипт для анализа и переиндексации базы данных
#!/bin/sh
# Выполняем очистку и анализ базы данных
echo «`date +»%Y-%m-%d_%H-%M-%S»` Start vacuum zup30» >> /opt/service.log
sudo -u postgres vacuumdb --full --analyze zup30
echo «`date +»%Y-%m-%d_%H-%M-%S»` End vacuum zup30» >> /opt/service.log
sleep 3
# Переиндексируем базу данных
echo «`date +»%Y-%m-%d_%H-%M-%S»` Start reindex zup30» >> /opt/service.log
sudo -u postgres reindexdb zup30
echo «`date +»%Y-%m-%d_%H-%M-%S»` End reindex zup30» >> /opt/service.log