Назад к статьям

PostgreSQL 11 для 1С. Установка на Ubuntu 18.04

Совсем недавно 1С адаптировала PostgreSQL 11 для 1С. Необходимая версия платформы для этого должна быть не ниже 8.3.14.1565. Пакеты опубликованы на сайте ИТС под версией 11.5-1.1C. Можно сказать что с этого момента начнётся очередной новый виток переустановок и обновлений со старых версий PostgreSQL. Ведь даже если работает, и работает хорошо, почему бы не сделать еще лучшее? Особенно это касается таких вопросов PostgreSQL как параллелизация запросов.

Тоесть у нас может быть сколь угодно мощный сервер с частотой каждого ядра к примеру 5 GHz. Но в 1С запросы очень плохо оптимизированы под работу с PostgreSQL из коробки. Но в свою очередь, PostgreSQL регулярно допиливается и функционал расширяется от раза к разу. При релизе версии PostgreSQL 11, в ней уже был улучшен механизм прараллелизации запросов. Подробнее об изменениях 11й версии можно почитать тут: https://www.postgresql.org/docs/11/release-11.html . Так же стоит упомянуть про то что PostgreSQL это бесплатная СУБД, которая хоть и чутьчуть проигрывает по производительности перед MSSQL, она из коробки и абсолютно бесплатно имеет на борту прекрасный функционал касающийся резервного копирования и репликации работающих баз. Тот функционал, для получения которого в MSSQL если мне не изменяет память нужно покупать версию не ниже Enterprise.

Описание стенда:

  • 8 vCPU
  • 16GB Ram
  • 64GB SSD

Установка Ubuntu Server 18.04

Ubuntu Server 18.04 — Установка статического IP

Ubuntu Server 18.04 — Изменение имени сервера

Установка PostgreSQL 11 для 1С на Ubuntu 18.04

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

Создаём файл /etc/apt/sources.list.d/pgdg.list

bash
sudo nano /etc/apt/sources.list.d/pgdg.list

И добавляем следующую строку:

bash
deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main

Импортируем подписи и обновляем репозиторий

bash
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update

Обновляем систему

bash
sudo apt update && sudo apt dist-upgrade -y

Ставим локали

bash
sudo locale-gen en_US.UTF-8
sudo locale-gen ru_RU.UTF-8
sudo update-locale LANG=ru_RU.UTF8
sudo dpkg-reconfigure locales

После ввода последней команды появится похожее окно:

Настройка locales
Настройка locales

можно промотать вниз и убедиться что локаль ru_RU.UTF-8 отмечена)

Выбор локали по умолчанию
Выбор локали по умолчанию

Теперь необходимо выбрать локаль по умолчанию. Выбираем ru_RU.UTF-8 и нажимаем Ok. Если в списке указанная локаль у вас отсутствует, значит что-то из вышеперечисленного в текущем пункте вы сделали не так. После успешного выполнения этого пункта в отчёте мы увидим строчку

bash
ru_RU.UTF-8… done
en_EN.UTF-8… done

Загружаем файлы PostgreSQL 11 для 1С на будущий сервер

Знаю, возможно кто-то сочтёт этот пункт излишним, но много много лет назад, когда я впервые в жизни увидел текстовую консоль линуксового сервера, вопрос передачи файлов между сервером и внешним миром встал для меня очень остро. Тогда, я даже поднял фтп сервер чтобы залить туда нужные мне пакеты. Поэтому для полноты инструкции, считаю должны упомянуть про такой протокол передачи данных как SFTP и соответствующую статью WinSCP работаем с файлами Linux сервера через SFTP
Я буду загружать все файлы в папку home пользователя под которым подключился к серверу. Все инструкции далее будут приводиться исходя из этого момента. Чтобы попасть в home текущего пользователя достаточнот просто вбить в консоль команду cd . Я буду загружать версию 11.5-1.1C т.к. новее на сайте ИТС в данный момент нет.

Смотрим особенности релиза

Возможно, в далёком будущем, когда через пару месяцев потомки будут читать эту запись, в особенностях релиза что-то и появится. На данный момент там пусто (:

Поэтому с особенностями релиза мы определимся походу. Одна из таких особенностей — это использование репозитория PostgreSQL, т.к. в родном репозитории Ubuntu 18.04, максимальная имеющаяся на момент написания версия пакетов PostgreSQL — 190. Нам нужно 194+

Готовимся к установке пакетов PostgreSQL 11 для 1C

Так исторически сложилось что в особенностях релиза всегда фигурировали эти два пакета: libicu55 и postgresql-common. Почему их не указали сейчас мне неизвестно, но необходимость в них не отпала, при попытке установить пакеты 1C система будет жаловаться на их отсутствие. И в этот то момент нам и понадобится репозиторий PostgreSQL который мы добавили ранее. Т.к. те пакеты что мы сможем установить из родного, слишком старые и не подходят.

libicu55

Смотрим что есть в репозитории относительно libicu55

bash
apt search libicu55

Иииии, там ничего нет, как обычно.

Поэтому идем по ссылке archive.ubuntu.com и там ищем libicu55 для своей архитектуры. Я ставлю на Ubuntu Server 18.04 64-bit, поэтому у меня это libicu55_55.1-7_amd64.deb
Так же в данном случае можно скачать файл напрямую с помощью команды wget

bash
    cd
wget http://archive.ubuntu.com/ubuntu/pool/main/i/icu/libicu55_55.1-7_amd64.deb

По окончании загрузки устанавливаем данный пакет

bash
sudo dpkg -i libicu55_55.1-7_amd64.deb

postgresql-common

Смотрим что нам покажет репозиторий

bash
apt search postgresql-common

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

bash
AdminGuide.Ru@1c-psql-s1:~$ apt search postgresql-common
Сортировка… Готово
Полнотекстовый поиск… Готово
postgresql-client-common/bionic-pgdg 209.pgdg18.04+1 all
управление несколькими клиентскими версиями PostgreSQL
postgresql-common/bionic-pgdg 209.pgdg18.04+1 all
PostgreSQL database-cluster manager

В данный момент версии всех пакетов 209, что больше чем 194, версии которую запрашивают пакеты PostgreSQL 11 для 1C при попытке их установки без подготовки.

Устанавливаем postgresql-common

bash
sudo apt install postgresql-common

Попутно установочник подвезёт нам еще ряд необходимых пакетов.

libllvm9

Для PostgreSQL 11.5

bash
sudo apt install libllvm9

Установка PostgreSQL 11 для 1С

Извлекаем из архива

Файл с установочными пакетами скачанный с сайта ИТС называется postgresql_11.5_1.1C_amd64_deb.tar.bz2 и лежит в папке home пользователя под которым мы авторизованы, поэтому перейдем в эту папку и вытащим содержимое из архива

bash
cd 
tar -xvf ./postgresql_11.5_1.1C_amd64_deb.tar.bz2

Из архива извлеклась папка postgresql-11.5-1.1C_amd64_deb

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

bash
cd ./postgresql-11.5-1.1C_amd64_deb

Устанавливаем пакеты PostgreSQL 11 для 1C

bash
sudo dpkg -i ./libpq5_11.5-1.1C_amd64.deb
sudo dpkg -i ./postgresql-client-11_11.5-1.1C_amd64.deb
sudo dpkg -i ./postgresql-11_11.5-1.1C_amd64.deb

По окончании установки сервер запустится и с ним уже можно будет начинать работать.

В процессе пригодятся следующие команды:

bash
sudo service postgresql start
sudo service postgresql stop
service postgresql status

Блокируем обновления пакетов

Дабы оградить собственную жопку от нападок со стороны агрессивно настроенной бухгалтерии, лучше всего ограничить количество встреч с бухгалтерами. Наилучшим для этого решением будет оргазнизация не только высокой производительности сервисов, но и их максимального аптайма. А этому очень сильно может помешать неожиданное обновление пакетов PostgreSQL 11. Пакеты модифицированные 1С будут просто заменены рассово верными пакетами из официального репозитория PostgreSQL, при этом всё уйдет в отказ, а юзеры будут бегать по зданию в папнике роняя кал. Как этого избежать?
Пишем в консоль команду

bash
dpkg --list | grep 1C

И видим следующее:

bash
ii  libpq5:amd64                          11.5-1.1C                          amd64        PostgreSQL C client library
ii  postgresql-11                         11.5-1.1C                          amd64        object-relational SQL database, version 11 server
ii  postgresql-client-11                  11.5-1.1C                          amd64        front-end programs for PostgreSQL 11

[ii] — значит что вам пиздец. а если списочек окажется пустым — значит что пиздец уже пришел и вам надо ПОВТОРНО, ПОВЕРХ СУЩЕСТВУЮЩЕЙ УСТАНОВКИ НИЧЕГО НЕ УДАЛЯЯ снова установить пакеты которые вы качали с сайта ИТС. Именно поэтому мы их качали в папку home а не в tmp, откуда они после ребута бы исчезли. Возвращаемся к пункту 7 Установка PostgreSQL 11 для 1С
Фиксируем только что установленные пакеты в системе:

bash
sudo apt-mark hold libpq5
sudo apt-mark hold postgresql-11
sudo apt-mark hold postgresql-client-11

Настраиваем PostgreSQL 11 для 1С

Настройка будет производится до момента когда к серверу можно будет подключить сервер 1С. Оптимизация, репликация и прочие моменты тут не рассматриваются. Она ничем кроме того что в пути к файлам цифра 10 заменилась на 11 не отличается. Привожу правленные с учётом современных реалий инструкции от PostgreSQL 10, чтобы всё было в одном месте.

Меняем метод аутентификации с peer на trust

Более подробно о метода аутентификации можно посмотреть тут. Внизу страницы нужно будет потыкать ссылоки Пред и След

Открываем файл pg_hba.conf

bash
sudo nano /etc/postgresql/11/main/pg_hba.conf

Меняем административный вход

Находим строку

bash
# Database administrative login by Unix domain socket
local   all             postgres                                peer

И меняем в ней peer на trust чтобы было

bash
# Database administrative login by Unix domain socket
local   all             postgres                                trust

Когда способом аутентификации указано trust, постгрес решит что подключающийся пользователь уже авторизован для работы и пустит его без пароля
Сохраняем изменения нажав Ctrl+O

Перезагружаем Postgres

bash
sudo service postgresql restart

Устанавливаем пароль пользователя postgres

В кавычках указываем наш пароль, в нашем случае это rptzjnarDhTp3AYdCEi2l0u8Q7uhApDg. В своих инсталляциях используйте более надежный пароль. Пароль должен быть длинный, сочный, одним своим видом он должен заставлять гумманитариев дёргаться в конвульсиях.

bash
psql -U postgres -d template1 -c "ALTER USER postgres PASSWORD 'rptzjnarDhTp3AYdCEi2l0u8Q7uhApDg'"

Снова повторюсь что пароль лучше сделать посложнее, и использовать для работы с базами не админскую учётку postgres, а создать другого пользователя, в идеале на каждую базу свой пользователь, подрядчикам обслуживающим базы тоже свой пользователь, с правами на конкретную базу.

Меняем метод аутентификации с trust на md5

Все как и выше где мы меняли peer на trust, только теперь мы меняем trust на md5, чтобы отключить беспарольный доступ

bash
sudo nano /etc/postgresql/11/main/pg_hba.conf

Находим строку

bash
# Database administrative login by Unix domain socket
local   all             postgres                                trust

Меняем её на

bash
# Database administrative login by Unix domain socket
local   all             postgres                                md5

Настраиваем postgresql.conf

bash
sudo nano /etc/postgresql/11/main/postgresql.conf

Там находим строку listen_addresses. Можно воспользоваться поиском, он включается сочетанием Ctrl+W. Находим следующее:

bash
listen_addresses = '*'          # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
port = 5432                             # (change requires restart)

При желании можно настроить ограничение на подключение только через localhost указав его вместо ‘*’. Пока стоит ‘*’ сервер принимает подключение на все интерфейсы на порт указанный в пареметре port. А можно ничего и не менять, всё по желанию и вашему уровню паранойи.
Если у вас 1С будет жить на одном сервере с PostgreSQL, то оставьте localhost, если он будет работать на другом компьютере, установите * или же IP адрес интерфейса подключения.

1C