Как правильно установить, настроить и управлять Postgres Pro для 1С на Linux, включая запуск нескольких экземпляров и решение типичных проблем?

Системный администратор 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием IT и автоматизация бизнеса
← К списку

При работе с 1С на платформе Linux, использование СУБД Postgres Pro является распространенным и эффективным решением. Однако процесс установки, настройки и управления может вызвать вопросы, особенно при необходимости запуска нескольких экземпляров или тонкой настройки для оптимальной производительности. В этой статье мы подробно разберем, как преодолеть основные сложности и обеспечить стабильную работу вашей системы.

Начальные проблемы с подключением через Unix-сокет

Прежде чем углубляться в тонкости, давайте выясним, почему иногда возникают проблемы с подключением к PostgreSQL на Linux. Одна из частых причин связана с некорректной работой или расположением Unix-сокета.

По умолчанию, PostgreSQL, включая Postgres Pro, создает Unix-сокет для локальных подключений. Обычно он располагается в директории /tmp или /var/run/postgresql. Расположение сокета определяется параметром unix_socket_directories в файле конфигурации postgresql.conf. Если сокет не создался автоматически при старте сервера, нам потребуется создать его вручную и выдать необходимые права.

Как проверить и подключиться:

  1. Проверим расположение сокета: Откройте файл postgresql.conf и найдите параметр unix_socket_directories. Скорее всего, там будет указана директория /tmp, но могут быть и другие варианты, специфичные для вашей сборки Postgres Pro.

  2. Подключимся с принудительным указанием сокета: Если вы столкнулись с проблемой подключения через стандартные методы, попробуйте явно указать путь к директории сокета при подключении через утилиту psql:

    
    sudo -u postgres psql -h /tmp -d postgres
    

    Здесь -h /tmp указывает на директорию, где расположен сокет. Обратите внимание, что сам файл сокета обычно имеет имя в формате .s.PGSQL.NNNN, где NNNN — это номер порта сервера (по умолчанию 5432). Рядом с ним также создается файл блокировки с именем .s.PGSQL.NNNN.lock, который не следует удалять вручную.

Запуск нескольких экземпляров (кластеров) PostgreSQL на Linux

В отличие от операционной системы Windows, где несколько экземпляров PostgreSQL обычно реализуются как отдельные службы, в Linux для этого часто используются утилиты, позволяющие создавать и управлять кластерами. Давайте разберем этот процесс подробнее.

Концепция кластеров в Linux:

Каждый "кластер" PostgreSQL — это по сути отдельный экземпляр сервера, работающий со своим набором файлов данных (PGDATA) и, как правило, на своем уникальном порту. Таким образом, мы можем запустить несколько независимых серверов PostgreSQL на одной машине.

Методы создания и управления:

  1. Использование утилит дистрибутива (например, pg_createcluster для Debian/Ubuntu):

    В дистрибутивах на основе Debian/Ubuntu существует удобная утилита pg_createcluster, которая значительно упрощает создание нового кластера. Мы можем создать новый кластер, указав версию PostgreSQL и имя кластера. При этом для нового кластера автоматически выбирается следующий доступный порт (например, 5433, если 5432 занят) и инициализируется отдельная директория для данных.

    Например, для создания нового кластера версии 17 с именем main_second на другом порту, мы можем использовать:

    
    sudo pg_createcluster 17 main_second
    

    Управление такими кластерами осуществляется с помощью команд, таких как pg_ctlcluster:

    
    sudo pg_ctlcluster 17 main_second start
    sudo pg_ctlcluster 17 main_second stop
    sudo pg_ctlcluster 17 main_second restart
    

    Каждый кластер будет иметь свою собственную директорию данных (PGDATA) и может быть запущен на отдельном порту.

  2. Ручная настройка (для Red Hat-подобных систем и общего понимания):

    Для систем на основе Red Hat (CentOS, RHEL, Fedora) или в случаях, когда pg_createcluster недоступен, мы можем настроить несколько экземпляров вручную. Это часто включает создание отдельных файлов конфигурации для каждого экземпляра, где указываются уникальные значения для PGDATA (путь к директории данных) и PGPORT (номер порта). Затем каждый экземпляр запускается как отдельный сервис или с помощью скриптов init.d, указывающих на свои конфигурационные файлы.

    Ключевые моменты при ручной настройке:

    • Отдельные директории PGDATA: Для каждого кластера создаем свою уникальную директорию для хранения данных.

    • Отдельные порты: Каждый кластер должен прослушивать свой уникальный TCP-порт (например, 5432, 5433, 5434).

    • Отдельные файлы конфигурации: Для каждого кластера создаем свои postgresql.conf и pg_hba.conf.

    • Инициализация базы данных: Каждый новый PGDATA должен быть инициализирован с помощью команды initdb.

Установка и настройка Postgres Pro для 1С: подробное руководство

Для оптимальной работы Postgres Pro с решениями 1С требуется внимательная настройка. Мы рассмотрим ключевые шаги, которые помогут вам адаптировать СУБД под специфику 1С.

1. Изменение директории данных (PGDATA)

Если вы хотите разместить базу данных на другом дисковом массиве (например, для повышения производительности или увеличения объема), нам потребуется изменить путь к директории данных PGDATA.

  1. Примонтируйте носитель: Убедитесь, что новый дисковый массив примонтирован к вашей системе. Например, добавьте запись в файл /etc/fstab:

    
    UUID=fkel90-jnkj-kjnkjvk-xxxxxx /data/bazas ext4 defaults,noatime,nodiratime 0 0
    

    Здесь UUID — уникальный идентификатор вашего диска, /data/bazas — точка монтирования, ext4 — файловая система, а defaults,noatime,nodiratime 0 0 — опции монтирования.

  2. Создайте каталог и выдайте права: Создайте каталог для данных PostgreSQL на новом носителе и выдайте ему права для пользователя postgres (или того пользователя, от имени которого работает сервер PostgreSQL):

    
    sudo mkdir -p /data/bazas/pgdata
    sudo chown -R postgres:postgres /data/bazas/pgdata
    
  3. Измените параметр PGDATA: Найдите файл конфигурации сервиса Postgres Pro (например, /etc/default/postgrespro-1c-17 или аналогичный для вашей версии) и измените значение параметра PGDATA на новый путь:

    
    # Пример содержимого файла /etc/default/postgrespro-1c-17
    # Исходное значение
    # PGDATA=/var/lib/pgpro/1c-17/data
    
    # Измененное значение
    PGDATA=/data/bazas/pgdata
    
  4. Очистите и переинициализируйте базу данных: После изменения пути необходимо очистить старые данные (если они были) и переинициализировать базу данных с помощью initdb. Это критически важно для создания новой структуры данных в новой директории. Убедитесь, что вы указываете правильную кодировку и локаль:

    
    sudo -u postgres /opt/pgpro/1c-17/bin/initdb -D /data/bazas/pgdata --encoding=UTF-8 --locale=ru_RU.UTF-8
    

    Важно: Убедитесь, что русская локаль (например, ru_RU.UTF-8) установлена в вашей системе и является активной локалью для пользователя postgres. Команда initdb по умолчанию использует настройки локали из окружения, но их всегда лучше явно задавать.

2. Настройка сетевого доступа и файрвола (UFW)

Для обеспечения возможности подключения к PostgreSQL извне (например, с сервера 1С) необходимо корректно настроить сетевые параметры и правила файрвола.

  1. Проверим статус UFW: В Linux часто используется файрвол UFW (Uncomplicated Firewall). Давайте проверим его статус:

    
    sudo systemctl status ufw
    

    Если UFW активен, нам потребуется открыть порт.

  2. Откроем порты: Откроем стандартный порт PostgreSQL (по умолчанию 5432) для входящих подключений. Мы можем разрешить подключение со всех IP-адресов или, что безопаснее, только с определенных IP-адресов или подсетей, с которых будут подключаться серверы 1С:

    
    # Разрешить подключение со всех IP (менее безопасно)
    sudo ufw allow 5432/tcp
    
    # Разрешить подключение только с конкретного IP-адреса (например, 192.168.1.100)
    sudo ufw allow from 192.168.1.100 to any port 5432
    
  3. Настроим postgresql.conf: В файле postgresql.conf найдите параметр listen_addresses. По умолчанию он может быть установлен в localhost, что разрешает только локальные подключения. Измените его, чтобы разрешить удаленные TCP/IP подключения:

    
    # Разрешить прослушивание всех доступных IP-интерфейсов
    listen_addresses = '*'
    
    # Или указать конкретные IP-адреса, например, 'localhost, 192.168.1.10'
    # listen_addresses = 'localhost, 192.168.1.10'
    

    Иногда после автоматического тюнинга этот параметр может быть раскомментирован. Обратите внимание, что в конфиге могут добавляться новые строки, и система исполняет только самые последние в конфиге значения.

  4. Настроим pg_hba.conf: Этот файл управляет аутентификацией клиентов. Нам нужно добавить запись, разрешающую подключение с сервера 1С. В секцию # IPv4 local connection или в конец файла добавьте строку, указывающую разрешенный IP-адрес и метод аутентификации:

    
    host    all             all             192.168.1.xxx/32        scram-sha-256
    

    Здесь 192.168.1.xxx/32 — это IP-адрес сервера 1С, с которого идет подключение к базе данных PostgreSQL.

3. Использование современного метода аутентификации SCRAM-SHA-256

Метод аутентификации SCRAM-SHA-256 является более безопасным по сравнению с устаревшим MD5. Он предотвращает перехват паролей и хранит их на сервере в криптографически хешированной форме. Postgres Pro поддерживает этот метод начиная с 10-й версии.

  1. Включим SCRAM-SHA-256: В файле postgresql.conf установите параметр:

    
    password_encryption = scram-sha-256
    
  2. Обновим пароли пользователей: После изменения параметра необходимо обновить пароли всех пользователей, даже если они остаются прежними. Это заставит PostgreSQL перехешировать пароли с использованием нового метода. Для этого можно подключиться к базе данных и выполнить команду ALTER USER:

    
    ALTER USER someuser WITH PASSWORD 'new_password';
    
  3. Изменим метод аутентификации в pg_hba.conf: Как мы уже видели выше, в файле pg_hba.conf необходимо указать scram-sha-256 в качестве метода аутентификации для соответствующих записей.

4. Рекомендации по тюнингу Postgres Pro для 1С

Для достижения оптимальной производительности 1С на Postgres Pro, нам потребуется скорректировать некоторые параметры в postgresql.conf. Рассмотрим ключевые из них:

Важно: После любых изменений в postgresql.conf или pg_hba.conf необходимо перезапустить сервис PostgreSQL, чтобы изменения вступили в силу.

Логирование и диагностика проблем

Эффективный просмотр логов является ключом к быстрой диагностике и устранению проблем. В Linux для работы с системными журналами, включая логи Postgres Pro, мы часто используем утилиту journalctl.

Основные команды journalctl для работы с логами сервиса Postgres Pro (например, postgrespro-1c-17.service):

  1. Просмотр логов в реальном времени: Эта команда позволяет нам наблюдать за логами по мере их появления, что очень удобно при поиске ошибок во время запуска или выполнения операций.

    
    sudo journalctl -u postgrespro-1c-17.service -f
    
  2. Просмотр всех логов с начала загрузки журнала: Используйте эту команду, чтобы увидеть полную историю логов сервиса.

    
    sudo journalctl -u postgrespro-1c-17.service
    
  3. Просмотр логов за сегодня: Если проблема возникла недавно, эта команда поможет нам сфокусироваться на актуальных событиях.

    
    sudo journalctl -u postgrespro-1c-17.service --since today
    
  4. Просмотр только ошибок: Для быстрой фильтрации и выявления критических проблем мы можем использовать флаг -p err.

    
    sudo journalctl -u postgrespro-1c-17.service -p err
    sudo journalctl -u postgrespro-1c-17.service -p err --since today
    
  5. Просмотр логов за определенный период: Если вы знаете точное время возникновения проблемы, эта команда поможет вам проанализировать события в заданном временном интервале.

    
    sudo journalctl -u postgrespro-1c-17.service --since "2025-08-19 00:00:00" --until "2025-08-21 23:59:59"
    

Дополнительные рекомендации по логированию:

Надеемся, что это подробное руководство поможет вам успешно установить, настроить и управлять Postgres Pro для ваших решений 1С на Linux, а также эффективно диагностировать и решать возникающие проблемы.

← К списку