Установка сервера 1с 8.3.16.1063 + postgres pro 12 на linux

/
14 mins read
Установка производилась на чистый свежеустановленный, без графической оболочки debian 9.5. Каталог var вынесен на отдельный рейд (в /var/lib/pgpro/ хранятся базы данных).
Команды выполняются под root.
 Добавляем в переменную PATH путь /usr/sbin ,
чтобы не добавлять путь к командам ниже.
nano ~/.bashrc

export PATH="/usr/sbin:$PATH"

source ~/.bashrc

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

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

dpkg-reconfigure locales

!вывод команды

locale -a

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

C

C.UTF-8

en_US.utf8

POSIX

ru_RU.utf8

Установка POSTGRESPRO

Postgres можно взять с:

https://1c.postgres.ru/

Выбираем операционную систему, версию постгреса и на почту прилетит инструкция как и откуда ставить.

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

pt-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.1/debian/ stretch main > /etc/apt/sources.list.d/postgrespro-1c.list

apt-get update -y

$ wget http://ftp.us.debian.org/debian/pool/main/i/icu/libicu57_57.1-6+deb9u4_amd64.deb
$ dpkg -i libicu57_57.1-6+deb9u4_amd64.deb

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

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

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

listen_addresses = '*'

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

nano /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

nano /etc/nsswitch.conf

hosts:          files dns wins

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

Ставим необходимые для работы 1c пакеты(шрифты microsoft, imagemagick, библиотека для работы с png, в том числе и для архитектуры i386, и прочее. Возможно что-то уже не нужно, ставилось при использовании предыдущих релизов 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 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/#/

Вводим параметры вашего сервера, получаем параметры, которые нужно изменить в:

nano /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

nano /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-файлами

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

nano /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

(не монтировалась шара при загрузке если dhcp, статический ip -ок)

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

nano /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

nano /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-10/bin/createdb -T template0 name_bd1

/opt/pgpro/1c-10/bin/pg_restore -d name_bd1 /home/it/2019-12-04name_bd1.backup

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

когда никто не работает (в ночь с субботы на воскресенье). Создаем скрипт:

ouch /home/scripts/reindex.sh

chmod +x /home/scripts/reindex.sh

nano /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)

nano /etc/fstab

tmpfs /mnt/ram_drive tmpfs noatime,nodiratime,nodev,nosuid,uid=999,gid=1001,mode=0700,size=100M 0 0

mount -a

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

nano /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

Просмотр состояния raid-ов и дисков

На сервере установлен рейд-контроллер ADAPTEC ASR 8405E, для просмотра состояния raid-ов и дисков в debian добавляем репозиторий, ставим софт:

nano /etc/apt/sources.list

deb http://hwraid.le-vert.net/debian stretch main



wget -O - http://hwraid.le-vert.net/debian/hwraid.le-vert.net.gpg.key | apt-key add -

apt-get update

apt-get install arcconf smartmontools

Сострояние raid:

arcconf GETCONFIG 1 | more

SMART дисков:

smartctl -a /dev/sg2 # sg2..sg6

Исправление кодировки базы данных PostgreSQL с LATIN1 на UTF8

Проверка кодировки

Для проверки кодировки, применяемой на сервере и в базе данных, необходимо выполнить следующие команды.

Заходим в режим работы с PoctgreSQL:

ostgres=# SHOW SERVER_ENCODING;
 server_encoding 
-----------------
 LATIN1
(1 row)

postgres=# \l
                             List of databases
   Name    |  Owner   | Encoding | Collate | Ctype |   Access privileges   
-----------+----------+----------+---------+-------+-----------------------
 postgres  | postgres | LATIN1   | en_US   | en_US | 
 template0 | postgres | LATIN1   | en_US   | en_US | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
 template1 | postgres | LATIN1   | en_US   | en_US | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
(3 rows)

Исправление кодировки для template1

А теперь исправим кодировку template1, который используется для создания баз данных.

postgres=# UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';
postgres=# DROP DATABASE Template1;
postgres=# CREATE DATABASE template1 WITH owner=postgres ENCODING = 'UTF-8' lc_collate = 'ru_RU.utf8' lc_ctype = 'ru_RU.utf8' template template0;
postgres=# UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';

В данном случае сначала мы указываем, что template1 не является шаблоном для баз данных. Удаляем данный шаблон. Потом создаём новый шаблон с кодировкой UTF8 и устанавливаем данную базу данных в качестве шаблона для новых баз данных. Дальше новые базы данных будут создаваться с кодировкой UTF8.

И проверим, в какой кодировке у нас находиться шаблон template1, сам сервер, кстати, будет по-прежнему в кодировке LATIN1

postgres=# \l
                                  Список баз данных
    Имя    | Владелец | Кодировка | LC_COLLATE  |  LC_CTYPE   |     Права доступа     
-----------+----------+-----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8      | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8      | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |           |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8      | ru_RU.utf8  | ru_RU.utf8  | 
(3 строки)
Previous Story

Systemd Essentials:: работа со службами, модулями и журналом

Next Story

100500+ команд Linux.

Latest from Blog

dd

dd (dataset definition) — программа UNIX, предназначенная как для копирования, так и для конвертации файлов. Название унаследовано от оператора DD

0 £0.00