Настройка сервера 1С и базы Postgres PRO 12.4 на Debian 9

Установка производилась на чистый свежеустановленный, без графической оболочки debian 9.13.

Каталог var вынесен на отдельный раздел (в /var/lib/pgpro/ хранятся базы данных).

Команды выполняются под root.

Добавляем нужные локали

(при установке debian была выбрана ru_RU.utf8 (по умолчанию), добавил еще en_US.utf8):
dpkg-reconfigure locales
вывод команды
locale -a

после выбора должен быть такой:

C
C.UTF-8
en_US.utf8
POSIX
ru_RU.utf8

Установка POSTGRES PRO

Postgres можно взять с:
https://1c.postgres.ru/
Выбираем операционную систему, версию постгреса и на почту прилетит инструкция как и откуда ставить.

Добавляем репозиторий и ставим postgres:

apt-get install -y wget gnupg2 || apt-get install -y gnupg

wget -O — http://repo.postgrespro.ru/keys/GPG-KEY-POSTGRESPRO | apt-key add —

echo deb http://repo.postgrespro.ru//pg1c-archive/pg1c-12.4/debian/ stretch main > /etc/apt/sources.list.d/postgrespro-1c.list

apt-get update -y && apt-get install -y postgrespro-1c-12-server postgrespro-1c-12-contrib

/opt/pgpro/1c-12/bin/pg-setup initdb

/opt/pgpro/1c-12/bin/pg-setup service enable

Разрешаем подключаться к постгресу . *-всем или указывайте свою подсеть.

vim /var/lib/pgpro/1c-12/data/postgresql.conf
listen_addresses = ‘*’

Разрешаем соединения по IPv4:

vim /var/lib/pgpro/1c-12/data/pg_hba.conf
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             0.0.0.0/0               md5

Запускаем postgres, задаем пароль пользователю СУБД postgres, останавливаем postgres для дальнейшей настройки:

service postgrespro-1c-12 start
su postgres
/opt/pgpro/1c-12/bin/psql -U postgres -c «alter user postgres with password ‘password’;»
exit
service postgrespro-1c-12 stop

Ставим WINS (чтобы резолвилось имя сервера в ip-адрес):

apt-get install  isc-dhcp-client winbind samba  libpam-winbind libnss-winbind

vim /etc/nsswitch.conf
hosts:          files dns wins

Также добавлена A-запись сервера в DNS-сервере организации.

Ставим необходимые для работы 1c пакеты:

apt-get install imagemagick libmagickwand-dev libgsf-1-dev t1utils  libgomp1 unixodbc unixodbc-dev libicu-dev cabextract libfontenc1 libmspack0 xfonts-encodings xfonts-utils libgd3 libzip4 libpng16-16 multiarch-support
wget http://ftp.ru.debian.org/debian/pool/contrib/m/msttcorefonts/ttf-mscorefonts-installer_3.7_all.deb
dpkg -i ttf-mscorefonts-installer_3.7_all.deb 
dpkg —add-architecture i386
apt-get update
apt-get install libgd3:i386 libzip4:i386 libpng16-16:i386
wget http://ftp.ru.debian.org/debian/pool/main/libp/libpng/libpng12-0_1.2.50-2+deb8u3_amd64.deb
dpkg -i libpng12-0_1.2.50-2+deb8u3_amd64.deb
wget http://ftp.ru.debian.org/debian/pool/main/libp/libpng/libpng12-0_1.2.50-2+deb8u3_i386.deb
dpkg -i libpng12-0_1.2.50-2+deb8u3_i386.deb

Простой тюнинг постгреса

https://pgtune.leopard.in.ua/#/
Вводим параметры вашего сервера, получаем параметры, которые нужно изменить в:

/var/lib/pgpro/1c-12/data/postgresql.conf

Запускаем постгрес:

service postgrespro-1c-12 start

Установка 1с

Закидываем релиз 1с на сервак каким либо образом, ставим, запускаем:

cd 8.3.16.1063
dpkg -i *.deb
update-rc.d srv1cv83 defaults
/etc/init.d/srv1cv83 start

Заливаем базы стандартными средствами 1с.

Ставим утилиту monit, которая будет смотреть запущена ли 1с,

и если вылетит по каким либо причинам — ее запустит снова:

apt-get install monit
cp /etc/monit/monitrc /etc/monit/monitrc.bak
echo «» > /etc/monit/monitrc
vim /etc/monit/monitrc
set daemon  30           # проверяет 1с с интервалом в 30 сек.
set logfile syslog facility log_daemon
set idfile /var/.monit.id
set statefile /var/.monit.state
set eventqueue
     basedir /var/monit
     slots 100
check process ragent with pidfile /var/run/srv1cv83.pid
    start program = «/etc/init.d/srv1cv83 start»
    stop program  = «/etc/init.d/srv1cv83 stop»
/etc/init.d/monit restart

Ставим софт для работы серверного ключа 1с.

Взять можно с сайта http://www.safenet-inc.com/ , я поставил старый, проверенный с более ранними релизами 1с:

wget http://linux-bash.ru/docs/hasp/aksusbd_2.4-1_i386.deb
dpkg -i aksusbd_2.4-1_i386.deb

Вставляем ключ, перезапускаем hasp:

/etc/init.d/aksusbd restart
update-rc.d aksusbd defaults

Настройка ежедневных ночных бэкапов баз на NAS

В папке 1c на NAS предварительно созданы папки:

base — там будут ночные бэкапы баз;
chpt — сюда сохраняются WAL-файлы в течение дня, которые ночью архивируются и кидаются в папку chp
chp — папка с архивированными WAL-файлами

Монтируем сетевую шару для бэкапов:

vim /etc/fstab

//10.10.10.22/backup/10.10.10.17/1c /mnt/backup cifs username=backup,password=password,iocharset=utf8,file_mode=0777,dir_mode=0777,noperm 0 0

mkdir /mnt/backup

chmod 777 /mnt/backup

mount -a

Включаем archive_mode в конфиге постгреса.

vim /var/lib/pgpro/1c-12/data/postgresql.conf
archive_mode = on
archive_command = ‘test ! -f /mnt/backup/chpt/%f.gz && gzip -c %p > /mnt/backup/chpt/%f.gz’

(Архивирование WAL-файлов на NAS в предварительно созданную папку chpt)

Перезапуск 1с и postgres:

/etc/init.d/monit stop
/etc/init.d/srv1cv83 stop
service postgrespro-1c-12 restart
/etc/init.d/srv1cv83 start
/etc/init.d/monit start

Создаем скрипт ночного бэкапа:

mkdir /home/scripts
touch /home/scripts/back_1s.sh
chmod +x /home/scripts/back_1s.sh

vim /home/scripts/back_1s.sh

#!/bin/bash
BS=»/mnt/backup»
DT=»$(date +%Y-%m-%d)»
CPDir=»$BS/chp/$DT»
BackFile=»$BS/base/$DT.backup»
SLink=»$BS/chpt»
host_ip=»127.0.0.1″
# Создаем новый каталог для заархивированных WAL-файлов
mkdir $CPDir
chown postgres $CPDir
#PGPASSWORD= пароль пользователя postgres
PGPASSWORD=password /opt/pgpro/1c-12/bin/psql -h 127.0.0.1 -U postgres -c «select pg_start_backup(‘$DT’);»
# архивируем WAL-файлы в каталог chp/дата/
tar -cvf $CPDir/chp.tar.gz $SLink
rm $SLink/*
# Функция бэкапа баз в папку base
backups () {
BackFile=»$BS/base/$DT$baza.backup»
PGPASSWORD=password /opt/pgpro/1c-12/bin/pg_dump -U postgres -h $host_ip -C -c -b -F c -f $BackFile $baza
}
baza=name_bd1
backups
baza=name_bd2
backups
PGPASSWORD=password /opt/pgpro/1c-12/bin/psql -h $host_ip -U postgres -c «select pg_stop_backup();»
exit

И добавляем скрипт бэкапа в планировщик (будет запускаться в 22:00 каждый день):

crontab -u root -e
0 22 * * * /home/scripts/back_1s.sh

Пример восстановления бэкапа на другом сервере:

su postgres
/opt/pgpro/1c-12/bin/createdb -T template0 name_bd1
/opt/pgpro/1c-12/bin/pg_restore -d name_bd1 /home/backup/2020-12-92name_bd1.backup

Настройка обслуживания баз (vacuum, reindex)

Создаем скрипт:

touch /home/scripts/reindex.sh
chmod +x /home/scripts/reindex.sh

vim /home/scripts/reindex.sh

#!/bin/bash
h=127.0.0.1
p=5432
u=postgres
xxx () {
/bin/echo $db >> /var/log/reindex.log
/bin/date >> /var/log/reindex.log
/bin/echo «begin vacuum full analyze» >> /var/log/reindex.log
#PGPASSWORD= пароль пользователя postgres, заданный выше
PGPASSWORD=password /opt/pgpro/1c-12/bin/psql —dbname $db —host $h —port $p —username $u -w —command «vacuum full analyze;» >> /var/log/reindex.log
/bin/date >> /var/log/reindex.log
/bin/echo «end vacuum full analyze» >> /var/log/reindex.log
/bin/echo «begin reindex» >> /var/log/reindex.log
PGPASSWORD=password /opt/pgpro/1c-12/bin/psql —dbname $db —host $h —port $p —username $u -w —command «reindex DATABASE \»$db\»;» >> /var/log/reindex.log
/bin/date >> /var/log/reindex.log
/bin/echo «end reindex» >> /var/log/reindex.log
}
db=name_bd1
xxx
db=name_bd2
xxx

Добавляем в планировщик (будет запускаться в воскресенье в 01:00 )

crontab -u root -e

0 1 * * 7 /home/scripts/reindex.sh

Переносим временные файлы статистики постгреса в ОЗУ

для снижения нагрузки на диски.

Создаем виртуальный диск в оперативке на 100Мб:

mkdir /mnt/ram_drive
chown  postgres:tape /mnt/ram_drive
chmod 700 /mnt/ram_drive
id postgres (смотрим uid и gid пользователя postgres для внесения в /etc/fstab)
vim /etc/fstab
tmpfs /mnt/ram_drive tmpfs noatime,nodiratime,nodev,nosuid,uid=999,gid=1001,mode=0700,size=100M 0 0
mount -a

Меняем расположение каталога временных файлов статистики в конфиге постгреса:

vim /var/lib/pgpro/1c-12/data/postgresql.conf
stats_temp_directory = ‘/mnt/ram_drive’

Перезапуск для принятия изменений:

/etc/init.d/monit stop
/etc/init.d/srv1cv83 stop
service postgrespro-1c-12 restart
/etc/init.d/srv1cv83 start
/etc/init.d/monit start

Большая часть статьи взята с ресурса : http://linux-bash.ru/menusistem/120-1cpostgresprodebian.html