Вводные данные:
- Система Debian 11
- 1С версия 8.3.17.2256
- Сервер БД Postgres PRO
Содержание
1. Подготовка системы.
На свежеустановленной системе для начала правим репозитории.
1 |
apt edit-sources |
1 2 3 4 5 6 7 8 9 10 |
#Debian 11 (Bullseye) deb http://deb.debian.org/debian bullseye main contrib non-free deb-src http://deb.debian.org/debian bullseye main contrib non-free deb http://deb.debian.org/debian-security/ bullseye-security main contrib non-free deb-src http://deb.debian.org/debian-security/ bullseye-security main contrib non-free deb http://deb.debian.org/debian bullseye-updates main contrib non-free deb-src http://deb.debian.org/debian bullseye-updates main contrib non-free |
1 |
apt update |
Ставим необходимые пакеты для работы 1С сервера и установки Postgres
1 |
apt install curl sudo imagemagick unixodbc ttf-mscorefonts-installer gnupg make libc6-i386 pigz -y |
Теперь нужно подготовить locale для нашей системы
1 |
dpkg-reconfigure locales |
Нам нужно выбрать ru_RU.UTF-8 UTF-8. Так же убедитесь на всякий случай, что en_US.UTF-8 тоже выбрана. По умолчанию выбираем ее же — ru_RU.UTF-8 UTF-8 и перезапускаем систему.
Все готово для установки сервера 1С и Postgres
2. Установка 1С сервера
Скачиваем с сайта https://releases.1c.ru/ архив с deb пакетами 1С сервера и передаем на наш сервер. Можно воспользоваться WinSCP если используете Windows, для Linux можно воспользоваться scp
1 |
scp deb64_8_3_17_2256.tar.gz user@10.21.2.167:/home/user |
Где:
deb64_8_3_17_2256.tar.gz — 1С архив
user@10.21.2.167 — Пользователь и адрес сервера куда передаем
:/home/user — Директория назначения
Архив лучше распаковать в отдельную директория
1 2 3 4 |
mkdir 1c-server mv deb64_8_3_17_2256.tar.gz 1c-server/ cd 1c-server/ tar xzvf deb64_8_3_17_2256.tar.gz |
Проверяем файлы которые распаковали
1 |
ls |
1 2 3 |
1c-enterprise83-common_8.3.17-2256_amd64.deb 1c-enterprise83-server_8.3.17-2256_amd64.deb 1c-enterprise83-ws-nls_8.3.17-2256_amd64.deb 1c-enterprise83-common-nls_8.3.17-2256_amd64.deb 1c-enterprise83-server-nls_8.3.17-2256_amd64.deb deb64_8_3_17_2256.tar.gz 1c-enterprise83-crs_8.3.17-2256_amd64.deb 1c-enterprise83-ws_8.3.17-2256_amd64.deb license-tools |
Для установки 1С сервера с поддержкой русского языка вам нужны пакеты в названии которых не встречается nsl
Ставим 1С сервер и запускаем его
1 |
dpkg -i 1c-enterprise83-common_8.3.17-2256_amd64.deb 1c-enterprise83-server_8.3.17-2256_amd64.deb 1c-enterprise83-ws_8.3.17-2256_amd64.deb |
1 |
systemctl enable srv1cv83.service |
1 |
systemctl start srv1cv83.service |
1 |
systemctl status srv1cv83.service |
И проверяем состояние службы 1С
1 2 3 4 5 6 7 8 9 10 11 12 13 |
● srv1cv83.service - LSB: Starts and stops the 1C:Enterprise daemons Loaded: loaded (/etc/init.d/srv1cv83; generated) Active: active (exited) since Tue 2021-09-14 15:43:29 +05; 58s ago Docs: man:systemd-sysv-generator(8) Process: 6495 ExecStart=/etc/init.d/srv1cv83 start (code=exited, status=0/SUCCESS) CPU: 80ms сен 14 15:43:23 test systemd[1]: Starting LSB: Starts and stops the 1C:Enterprise daemons... сен 14 15:43:23 test su[6507]: (to usr1cv8) root on none сен 14 15:43:23 test su[6507]: pam_unix(su-l:session): session opened for user usr1cv8(uid=998) by (uid=0) сен 14 15:43:23 test su[6507]: pam_unix(su-l:session): session closed for user usr1cv8 сен 14 15:43:29 test srv1cv83[6495]: Starting 1C:Enterprise 8.3 server: OK сен 14 15:43:29 test systemd[1]: Started LSB: Starts and stops the 1C:Enterprise daemons. |
Если получили ошибку что такой службы нет то нужно создать символическую ссылку на запуск вручную
Для платформы до 8.3.20 и ниже
1 |
ln -s /opt/1cv8/x86_64/8.3.17.2256/srv1cv83 /etc/init.d/srv1cv83 |
1 |
systemctl daemon-reload |
Для платформы 8.3.20 или выше
Регистрируемся в systemd
1 |
systemctl link /opt/1cv8/x86_64/8.3.21.1393/srv1cv8-8.3.21.1393@.service |
И повторяем шаги выше по активации запуску служб
Все запустилось и работает нормально.
3. Установка Postgres
Идем на сайт и выбираем сборку для нашей системы. В письме придет инструкция для установки, ничего сложного там нет, но продемонстрирую ее.
Выполняем команды пришедшие нам в письме
1 |
curl -o apt-repo-add.sh https://repo.postgrespro.ru/pg1c-13/keys/apt-repo-add.sh |
1 |
sh apt-repo-add.sh |
Скрипт сам обновит репозитории, нам делать ничего не нужно. Ставим сам postgres
1 |
apt install postgrespro-1c-13 -y |
Включаем автозапуск и проверяем статус службы
1 |
systemctl enable postgrespro-1c-13 |
1 |
systemctl start postgrespro-1c-13.service |
1 |
systemctl status postgrespro-1c-13.service |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
● postgrespro-1c-13.service - Postgres Pro 1c 13 database server Loaded: loaded (/lib/systemd/system/postgrespro-1c-13.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2021-09-14 15:51:02 +05; 17s ago Process: 7404 ExecStartPre=/opt/pgpro/1c-13/bin/check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS) Main PID: 7406 (postgres) Tasks: 8 (limit: 4679) Memory: 50.5M CPU: 88ms CGroup: /system.slice/postgrespro-1c-13.service ├─7406 /opt/pgpro/1c-13/bin/postgres -D /var/lib/pgpro/1c-13/data ├─7408 postgres: logger ├─7410 postgres: checkpointer ├─7411 postgres: background writer ├─7412 postgres: walwriter ├─7413 postgres: autovacuum launcher ├─7414 postgres: stats collector └─7415 postgres: logical replication launcher сен 14 15:51:00 test systemd[1]: Starting Postgres Pro 1c 13 database server... сен 14 15:51:01 test postgres[7406]: 2021-09-14 15:51:01.021 +05 [7406] СООБЩЕНИЕ: передача вывода в протокол процессу сбора протоколов сен 14 15:51:01 test postgres[7406]: 2021-09-14 15:51:01.021 +05 [7406] ПОДСКАЗКА: В дальнейшем протоколы будут выводиться в каталог "log". сен 14 15:51:02 test systemd[1]: Started Postgres Pro 1c 13 database server. |
С установкой postgres все. Теперь переходим непосредственно к настройке.
4. Настройка Postgres
Для начала нужно задать пароль для пользователя БД postgres, под которым будет работать 1С сервер.
1 |
sudo -u postgres /usr/bin/psql -U postgres -c "alter user postgres with password 'superpassword';" |
Далее перенесём хранение временной статистики с жёсткого диска в память. Для этого создадим раздел в оперативной памяти на 512 Mb.
Создаем директорию куда будем монтировать Ram диск и даем ей права
1 |
mkdir /var/lib/pgsql_stats_tmp |
1 |
chown postgres:postgres /var/lib/pgsql_stats_tmp |
Теперь добавляем /etc/fstab строчку
1 |
nano /etc/fstab |
1 |
tmpfs /var/lib/pgsql_stats_tmp tmpfs size=512M,uid=postgres,gid=postgres 0 0 |
И монтируем
1 |
mount /var/lib/pgsql_stats_tmp |
Открываем конфиг postgress и правим параметр
1 |
nano /var/lib/pgpro/1c-13/data/postgresql.conf |
1 |
stats_temp_directory = '/var/lib/pgsql_stats_tmp' |
1 |
systemctl restart postgrespro-1c-13 |
5. Установка и настройка HASP License Manager
Если используются аппаратные лицензии, то их нужно как-то раздавать, благо программные раздает сам сервер 1С. Вставляем ключ в USB и проверяем что система его видит.
1 |
lsusb | grep -i hasp |
1 |
Bus 002 Device 002: ID 0529:0001 Aladdin Knowledge Systems HASP copy protection dongle |
Дальше идем на страницу https://download.etersoft.ru/pub/Etersoft/HASP/stable/x86_64/Debian/ и выбираем нашу систему. В момент написания данной заметки, была версия только для 9 версии системы, но ничего страшного нам они подойдут. Скачиваем два файла:
1 |
wget https://rep.angald.ru/pool/main/h/haspd-modules/haspd-modules_7.90-eter2debian_amd64.deb |
1 |
wget https://rep.angald.ru/pool/main/h/haspd/haspd_7.90-eter2debian_amd64.deb |
И устанавливаем их в систему:
1 |
dpkg -i haspd*.deb |
Запускаем и активируем автозагрузку:
1 |
systemctl start haspd |
1 |
systemctl enable haspd |
6. Настройка клиентских пк для поиска ключей в 1с
Создаем директорию
1 |
mkdir /opt/1C/v8.3/X86_64/conf |
И создаем файл с настройками для поиска аппаратной защиты
1 |
nano /opt/1C/v8.3/X86_64/conf/nethasp.ini |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[NH_COMMON] NH_IPX = Disabled NH_NETBIOS = Disabled NH_TCPIP = Enabled [NH_IPX] [NH_NETBIOS] [NH_TCPIP] NH_SERVER_ADDR = 10.85.66.5 NH_PORT_NUMBER = 475 NH_TCPIP_METHOD = UDP NH_USE_BROADCAST = Disabled |
Где:
10.85.66.5 — адрес сервера с установленным ключом
475 — порт
7. Бэкап и обслуживание баз 1С на сервере PostgreSQL
Бэкап вещь необходимая, ведь люди делятся на два вида, кто делает бэкапы, а кто бесстрашный. Смотрим какие базы у нас есть:
1 |
sudo -u postgres psql -U postgres -l |
1 2 3 4 5 6 7 8 9 10 11 |
Список баз данных Имя | Владелец | Кодировка | LC_COLLATE | LC_CTYPE | Права доступа -----------+----------+-----------+-------------+-------------+----------------------- postgres | postgres | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 | template0 | postgres | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres ut | postgres | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 | (4 строки) |
Нужная база у нас одна: ut
Для начала создадим директории где будем хранить бэкап и логи.
1 |
mkdir -p /var/lib/pgpro/service_logs |
1 |
mkdir -p /var/lib/pgpro/backup |
После этого создадим директорию и файл для скрипта резервного копирования и обслуживания, скрипты я храню в отдельной директории.
1 |
mkdir -p /opt/script |
1 |
cd /opt/script |
1 |
nano backup.bash |
И копируем в наш файл сам скрипт
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
#!/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin #Скрипт для бэкапа и обслуживания баз данныз postgres pro #Текущий каталог #Базы для бэкапа BASES=("basa0" "base1") #Переменная даты и времени DATA="$(date +%Y-%m-%d_%H-%M)" #Директория для логов LOGS=/var/lib/pgpro/service_logs/ #Директория для бэкапов BACKUPDIR=/var/lib/pgpro/backup/ #Минимальное количество бэкапов FILEBACK="10" CheckDir() { if touch "$1"/"$2".test > /dev/null 2>&1 ; then rm "$1"/"$2".test return 0 else echo "Ошибка создания файла, нет директории или отсутвуют права" return 1 fi } Backup() { CheckDir "$BACKUPDIR" "$DATA" echo "$(date +%Y-%m-%d_%H-%M-%S)" "Старт резервного копирования" "$1" >> "$LOGS"/"$DATA".log if sudo -u postgres /opt/pgpro/1c-13/bin/pg_dump -U postgres "$1" > "$BACKUPDIR"/"$DATA"-"$1".sql ; then echo "$(date +%Y-%m-%d_%H-%M-%S)" "Старт сжатия файла" >> "$LOGS"/"$DATA".log pigz "$BACKUPDIR"/"$DATA"-"$1".sql echo "$(date +%Y-%m-%d_%H-%M-%S)" "Резервное копирование закончено" "$1" >> "$LOGS"/"$DATA".log return 0 else echo "$(date +%Y-%m-%d_%H-%M-%S)" "Ошибка создания резервной копии" "$1" >> "$LOGS"/"$DATA".log exit fi } ClearOldFiles() { local FILES local NUM="1" FILES=$(find "$BACKUPDIR" -maxdepth 1 -type f -name "*.gz" | wc -l) if [ "$FILES" -gt "$FILEBACK" ] ; then FILEBACK=$((FILEBACK+NUM)) cd $BACKUPDIR || exit ls -tp | grep -v '/$' | tail -n +$FILEBACK | xargs -I {} rm -- {} cd $LOGS || exit ls -tp | grep -v '/$' | tail -n +$FILEBACK | xargs -I {} rm -- {} echo "$(date +%Y-%m-%d_%H-%M-%S)" "Очистка старых файлов и логов" >> "$LOGS"/"$DATA".log return 0 else echo "$(date +%Y-%m-%d_%H-%M-%S)" "Ошибка очистки старых файлов и логов" >> "$LOGS"/"$DATA".log return 1 fi } Maintance() { echo "$(date +%Y-%m-%d_%H-%M-%S)" "Старт vacuumdb" "$1" >> "$LOGS"/"$DATA".log if sudo -u postgres /opt/pgpro/1c-13/bin/vacuumdb --full --analyze --username postgres --dbname "$1" > /dev/null 2>&1 ; then echo "$(date +%Y-%m-%d_%H-%M-%S)" "Конец vacuumdb" "$1" >> "$LOGS"/"$DATA".log else echo "$(date +%Y-%m-%d_%H-%M-%S)" "Ошибка vacuumdb" "$1" >> "$LOGS"/"$DATA".log exit fi echo "$(date +%Y-%m-%d_%H-%M-%S)" "Старт переиндексации" "$1" >> "$LOGS"/"$DATA".log if sudo -u postgres /opt/pgpro/1c-13/bin/reindexdb --username postgres --dbname "$1" > /dev/null 2>&1 ; then echo "$(date +%Y-%m-%d_%H-%M-%S)" "Конец переиндексации" "$1" >> "$LOGS"/"$DATA".log else exit fi return 0 } for i in ${BASES[@]}; do if Backup $i ; then Maintance $i else exit fi done ClearOldFiles $i (date +%Y-%m-%d_%H-%M) > /var/log/timestamp echo "$(date +%Y-%m-%d_%H-%M-%S)" "Создание файла для мониторинга" >> "$LOGS"/"$DATA".log |
В самом скрипте есть комментарии так что разобраться там не сложно
Теперь нужно сделать скрипт исполняемым
1 |
chmod +x backup.bash |
После этого запускаем скрипт для проверки нашего плана обслуживания, по окончании проверяем лог файл и сам файл бэкапа, учтите что процесс это не быстрый.
1 |
bash backup.bash |
Если все хорошо, то добавляем задание в crontab
1 |
crontab -e |
1 |
0 0 * * * bash /opt/script/backup.bash > /dev/null 2>&1 |
Задание будет запускаться каждый день в полночь.