evgen@spb: ~/2020/12/nastrojka-servera-1s-i-bazy-postgres-pro-12-5-na-debian-9/

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

Установка производилась на чистый, свежеустановленный Debian 9.13 без графической оболочки. Каталог var вынесен на отдельный раздел (в /var/lib/pgpro/ хранятся базы данных). Все команды выполняются под root.

Значительная часть материала опирается на статью с linux-bash.ru. Пароли и IP-адреса в примерах — плейсхолдеры, замените их на свои.

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

При установке 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 берём с 1c.postgres.ru. Выбираем ОС и версию — на почту прилетит инструкция, как и откуда ставить.

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

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

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

service postgrespro-1c-12 start
su postgres
/opt/pgpro/1c-12/bin/psql -U postgres -c "alter user postgres with 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 организации.

Пакеты для 1С

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
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
dpkg -i libpng12-0_1.2.50-2+deb8u3_amd64.deb
dpkg -i libpng12-0_1.2.50-2+deb8u3_i386.deb

Тюнинг Postgres

Параметры удобно подобрать через pgtune. Вводим характеристики сервера, получаем значения для правки в:

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

Запускаем Postgres:

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

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                    # проверка каждые 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С (HASP)

Софт для серверного ключа берётся с сайта SafeNet. Я поставил старый, проверенный с ранними релизами 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

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

Монтируем сетевую шару:

vim /etc/fstab
//192.0.2.10/backup/192.0.2.20/1c /mnt/backup cifs username=backup,password=ВАШ_ПАРОЛЬ,iocharset=utf8,file_mode=0777,dir_mode=0777,noperm 0 0
mkdir /mnt/backup
chmod 777 /mnt/backup
mount -a

Включаем archive_mode в конфиге Postgres:

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'

Перезапуск 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=ВАШ_ПАРОЛЬ /opt/pgpro/1c-12/bin/psql -h 127.0.0.1 -U postgres \
  -c "select pg_start_backup('$DT');"

# архивируем WAL-файлы
tar -cvf $CPDir/chp.tar.gz $SLink
rm $SLink/*

backups () {
  BackFile="$BS/base/$DT$baza.backup"
  PGPASSWORD=ВАШ_ПАРОЛЬ /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=ВАШ_ПАРОЛЬ /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-02_name_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=ВАШ_ПАРОЛЬ /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=ВАШ_ПАРОЛЬ /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

Временные файлы статистики Postgres в ОЗУ

Для снижения нагрузки на диски создаём виртуальный диск в оперативке на 100 МБ:

mkdir /mnt/ram_drive
chown postgres:tape /mnt/ram_drive
chmod 700 /mnt/ram_drive
id postgres            # смотрим uid и gid пользователя postgres для 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
evgen@spb: ~/contacts
evgen@spbping -c1 evgen.info
64 bytes from evgen.info: отвечу в течение рабочего дня
evgen@spbcat contacts.txt
mail      ya@evgen.info
telegram  @EvgenOne
github    github.com/onegin
blog      evgen.info/blog
evgen@spbecho $ЗАЧЕМ_ПИСАТЬ
интересная инфраструктурная задача · вопрос по Proxmox или Icinga ·
желание обсудить, почему memtest молчал, а память была битая
evgen@spb
© 2026 Евгений Подолинский · Санкт-Петербург
синий здесь – не тот, о котором вы подумали.