1с:Предприятие & PostgreSQL

Сервер 1с:Предприятие 8.3.21.1393 - Debian 11
su

Передадим дистрибутив сервера, переходим в папку с архивом.

Не забываем сменить при необходимости версию платформы с 8.3.21.1393 на нужную.

Установка проверена на Debian 11 Bullseye и платформе версии 8.3.21.1393

sed -i 's/^deb.*/& contrib non-free/g' /etc/apt/sources.list
apt update && apt dist-upgrade -y && apt install -y ttf-mscorefonts-installer libodbc1 mc htop vim && echo "deb http://mirror.yandex.ru/debian buster main" > /etc/apt/sources.list.d/buster.list && \
apt update && apt install -y imagemagick unixodbc sudo curl libenchant1c2a && dpkg-reconfigure locales
tar -xvf server64_8_3_21_1393.tar.gz && ./setup-full-8.3.21.1393-x86_64.run --mode unattended --enable-components server,ws,liberica_jre,ru

Для регистрации службы после установки платформы:

systemctl link /opt/1cv8/x86_64/8.3.21.1393/srv1cv8-8.3.21.1393@.service

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

systemctl enable srv1cv8-8.3.21.1393@ && \
systemctl start srv1cv8-8.3.21.1393@default && \
systemctl status srv1cv8-8.3.21.1393@default

Для удаления платформы следует воспользоваться специальным скриптом, который расположен в папке платформы

/opt/1cv8/x86_64/8.3.21.1393/uninstaller-full

При обновлении платформы вам потребуется (не забываем менять релиз платформы в командах):

  • Остановить службу:
  • systemctl stop srv1cv8-8.3.21.1393@default
    
  • Выключить ее автозагрузку:
  • systemctl disable srv1cv8-8.3.21.1393@
    
  • Удалить старую
  • /opt/1cv8/x86_64/8.3.21.1393/uninstaller-full
  • Установить новую
  • Включить автозагрузку
  • Запустить службу
PostgreSQL 14.1-2.1C - Debian 11
su
PATH=$PATH:/sbin
apt update && apt dist-upgrade -y && apt install ssh htop mc vim sudo gnupg libc6 libllvm9 ssl-cert -y
timedatectl set-timezone Europe/Moscow && timedatectl set-ntp on && \
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - && \
sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" >> /etc/apt/sources.list.d/postgresql.list' && \
wget https://it-admins.ru/downloads/rep/libffi6_3.2.1-6_amd64.deb && \
dpkg -i libffi6_3.2.1-6_amd64.deb && \
wget https://it-admins.ru/downloads/rep/libllvm6.0_6.0.1-10_amd64.deb && dpkg -i libllvm6.0_6.0.1-10_amd64.deb && \
wget https://it-admins.ru/downloads/rep/libicu55_55.1-7_amd64.deb && \
dpkg -i libicu55_55.1-7_amd64.deb && \
wget https://it-admins.ru/downloads/rep/libaspell15_0.60.8-4_amd64.deb && \
dpkg -i libaspell15_0.60.8-4_amd64.deb && \
wget https://it-admins.ru/downloads/rep/libc-bin_2.31-13+deb11u3_amd64.deb && \
dpkg -i libc-bin_2.31-13+deb11u3_amd64.deb && \
wget https://it-admins.ru/downloads/rep/libhunspell-1.7-0_1.7.0-3_amd64.deb && \
dpkg -i libhunspell-1.7-0_1.7.0-3_amd64.deb && \
wget https://it-admins.ru/downloads/rep/libenchant1c2a_1.6.0-11.1+b1_amd64.deb && \
dpkg -i libenchant1c2a_1.6.0-11.1+b1_amd64.deb && \
wget https://it-admins.ru/downloads/rep/libicu60_60.2-3ubuntu3.2_amd64.deb && \
dpkg -i libicu60_60.2-3ubuntu3.2_amd64.deb && \
wget https://it-admins.ru/downloads/rep/libssl1.0.0_1.0.2n-1ubuntu5_amd64.deb && \
dpkg -i libssl1.0.0_1.0.2n-1ubuntu5_amd64.deb 

В 1-ом диалоге проверяем, что RU выбран и выбираем RU во втором

locale-gen en_US.UTF-8 && locale-gen ru_RU.UTF-8 && dpkg-reconfigure locales && update-locale LANG=ru_RU.UTF-8 && update-locale LANG=ru_RU.UTF-8
wget https://it-admins.ru/downloads/rep/libreadline7_7.0-5_amd64.deb && dpkg -i libreadline7_7.0-5_amd64.deb && \
wget https://it-admins.ru/downloads/rep/libjson-perl_4.04000-1_all.deb && dpkg -i libjson-perl_4.04000-1_all.deb && \
wget https://it-admins.ru/downloads/rep/postgresql-client-common_240_all.deb && dpkg -i postgresql-client-common_240_all.deb && \
wget https://it-admins.ru/downloads/rep/postgresql-common_240_all.deb && dpkg -i postgresql-common_240_all.deb && apt install -f

Переходим в папку со скаченным дистрибом PostgreSQL от 1с

dpkg -i libpq5_14.1-2.1C_amd64.deb && dpkg -i postgresql*.deb && \
apt --fix-broken install -y && dpkg -i postgresql*.deb && apt install -f && \
dpkg -l | grep postgresql | awk -F' ' '{print $2}' | sudo xargs apt-mark hold 
sudo nano /etc/postgresql/14/main/pg_hba.conf

последний блок меняем на:

local   all             postgres                                md5
local   all             all                                     peer
host    all             all             0.0.0.0/0               trust
host    all             all             ::1/128                 md5
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5
sudo nano /etc/postgresql/14/main/postgresql.conf

Раскомментируем в файле строку password_encryption и ставим значение md5

password_encryption = md5

изменяем параметр прослушивания источников запросов

listen_addresses = '*'

Задаем сложный пароль для пользователя postgres

su postgres
psql -U postgres -c "alter user postgres with password 'ПАРОЛЬ_ПОСТГРЕС';"
exit

перезапускаем постгрес и проверяем, что он слушает подключения

systemctl restart postgresql && ss -tulpn | grep postgres

вывод

ss -tulpn | grep postgres
	tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      930/postgres
PostgresPro 14
su
PATH=$PATH:/sbin
apt update && apt dist-upgrade -y && apt install ssh htop mc vim sudo gnupg libc6 libllvm9 ssl-cert -y
timedatectl set-timezone Europe/Moscow && timedatectl set-ntp on

В 1-ом диалоге проверяем, что RU выбран и выбираем RU во втором

locale-gen en_US.UTF-8 && locale-gen ru_RU.UTF-8 && dpkg-reconfigure locales && update-locale LANG=ru_RU.UTF-8 && update-locale LANG=ru_RU.UTF-8

Ставим PostgreSQL от PostgresPro

curl -o pgpro-repo-add.sh https://repo.postgrespro.ru/pg1c-14/keys/pgpro-repo-add.sh && \
sh pgpro-repo-add.sh && apt-get install postgrespro-1c-14 -y && systemctl stop postgrespro-1c-14 && \
rm -r /var/lib/pgpro/1c-14/data/* && /opt/pgpro/1c-14/bin/pg-setup initdb --tune=1c --locale=ru_RU.UTF-8 && \
systemctl start postgrespro-1c-14 && \
dpkg -l | grep postgres | awk -F' ' '{print $2}' | sudo xargs apt-mark hold 

Задаем сложный пароль для пользователя postgres

su postgres
psql -U postgres -c "alter user postgres with password 'ПАРОЛЬ_ПОСТГРЕС';"
exit

перезапускаем постгрес и проверяем, что он слушает подключения

systemctl restart postgrespro-1c-14 && ss -tulpn | grep postgres
PostgresPro 16
su
PATH=$PATH:/sbin
apt update && apt dist-upgrade -y && apt install ssh htop mc vim sudo gnupg libc6 libllvm9 ssl-cert -y
timedatectl set-timezone Europe/Moscow && timedatectl set-ntp on

В 1-ом диалоге проверяем, что RU выбран:

locale-gen en_US.UTF-8 && locale-gen ru_RU.UTF-8 && dpkg-reconfigure locales && update-locale LANG=ru_RU.UTF-8 && update-locale LANG=ru_RU.UTF-8

Ставим PostgreSQL от PostgresPro

wget https://repo.postgrespro.ru/1c-16/keys/pgpro-repo-add.sh && chmod +x pgpro-repo-add.sh && \
sh pgpro-repo-add.sh && apt-get install postgrespro-1c-16 -y && systemctl stop postgrespro-1c-16 && \
rm -r /var/lib/pgpro/1c-16/data/* && /opt/pgpro/1c-16/bin/pg-setup initdb --tune=1c --locale=ru_RU.UTF-8 && \
systemctl start postgrespro-1c-16 && \
dpkg -l | grep postgres | awk -F' ' '{print $2}' | sudo xargs apt-mark hold 

Задаем сложный пароль для пользователя postgres

su postgres
psql -U postgres -c "alter user postgres with password 'ПАРОЛЬ_ПОСТГРЕС';"
exit

перезапускаем постгрес и проверяем, что он слушает подключения

systemctl restart postgrespro-1c-16 && ss -tulpn | grep postgres
Включаем AUTOVACUUM

Для включения необходимо внести изменения в файл /etc/postgresql/14/main/postgresql.conf или в файл /var/lib/pgpro/1c-14/data/postgresql.conf если сборка от PostgresPro

nano /etc/postgresql/14/main/postgresql.conf

Параметр autovacuum_max_workers равен половине кол-ва ядер.

#------------------------------------------------------------------------------
# AUTOVACUUM - 12 cores on server
#------------------------------------------------------------------------------

autovacuum = on                 # Enable autovacuum subprocess?  'on'
												# requires track_counts to also be on.
autovacuum_max_workers = 6              		# max number of autovacuum subprocesses
												# (change requires restart)
autovacuum_naptime = 1min               		# time between autovacuum runs
autovacuum_vacuum_threshold = 50        		# min number of row updates before
												# vacuum
autovacuum_vacuum_insert_threshold = 1000       # min number of row inserts
												# before vacuum; -1 disables insert
												# vacuums
autovacuum_analyze_threshold = 50      			# min number of row updates before
												# analyze
autovacuum_vacuum_scale_factor = 0.01   		# fraction of table size before vacuum
autovacuum_vacuum_insert_scale_factor = 0.2     # fraction of inserts over table
												# size before insert vacuum
autovacuum_analyze_scale_factor = 0.005 		# fraction of table size before analyze
autovacuum_freeze_max_age = 200000000   		# maximum XID age before forced vacuum
                                        		# (change requires restart)
autovacuum_multixact_freeze_max_age = 400000000 # maximum multixact age
                                        		# before forced vacuum
                                        		# (change requires restart)
autovacuum_vacuum_cost_delay = 20ms     		# default vacuum cost delay for
                                        		# autovacuum, in milliseconds;
                                        		# -1 means use vacuum_cost_delay
autovacuum_vacuum_cost_limit = -1       		# default vacuum cost limit for
                                        		# autovacuum, -1 means use
                                        		# vacuum_cost_limit
Скрипт обслуживания PostgreSQL - vacuum & index

Создаём файл скрипта:

nano /root/db_service.sh
#!/bin/bash

# Получаем текущую дату
NOW=$(date +"-"%d"."%m"."%Y"-"%H"."%M)
# Пароль пользователя СУБД
export PGPASSWORD="ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_postgres"
# Список баз через пробел в кавычках
allBases=("bp-main" "zup-main" "ut-test")

for t in ${allBases[@]};
do

# Записываем информацию о начале очистки БД в лог
echo $NOW Start vacuum $t >> /var/log/pg_service.log

# Выполняем очистку и анализ базы данных
/usr/bin/vacuumdb --full --analyze --username postgres --dbname $t

# Записываем информацию об окончании очистки БД в лог
echo $NOW End vacuum $t >> /var/log/pg_service.log

# Ставим на паузу выполнение скрипта на 10 секунд
sleep 10

# Записываем информацию о начале переиндексации таблиц БД в лог
echo $NOW Start reindex $t >> /var/log/pg_service.log

# Переиндексируем таблицы базы данных
/usr/bin/reindexdb --username postgres --dbname $t

# Записываем информацию об окончании переиндексации таблиц БД в лог
echo $NOW End reindex $t >> /var/log/pg_service.log

done

Бит на исполнение:

chmod +x /root/db_service.sh

Не забываем добавить задание в крон.

Ошибки при запуске БД

Получил следующую ошибку одним прекрасным утром:

Ошибка при выполнении файловой операции ...бла-бла-бла... Error decompressing LZ4 data. LZ4 error: ERROR_decompressionFailed

Нужно найти папку, в которой находятся файлы кэша сервера 1С.
У меня это /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/snccntx.....
Нас интересует папка, начинающаяся с префикса "snccntx".
Заходим в нее, Удаляем файл с названием "snccntx*.dat".
Перезапускаем сервер.


Fuse

Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.