Настройка PostgreSQL для 1С, Linux, Docker: Пошаговая инструкция | AdminWiki

Настройка PostgreSQL: Полное руководство от установки до тонкой оптимизации

17 декабря 2025 7 мин. чтения #1с #devops #docker #linux #postgresql #базы данных #настройка сервера #оптимизация

Представь, что твой PostgreSQL-сервер — это гоночный болид. С завода он настроен на спокойную езду по городу, но ты можешь выжать из него максимум производительности, зная, какие «винты» подкрутить. В этой статье я, как твой ментор, проведу тебя по полному пути — от базовой установки до тонкой настройки для высоких нагрузок, включая работу с 1С и контейнеризацию в Docker.

Установка PostgreSQL на Linux (Ubuntu)

Давай начнем с фундамента. Установка и первоначальная настройка PostgreSQL на Linux — это первый шаг к созданию стабильной среды.

Базовая установка и настройка PostgreSQL Ubuntu

Для последних версий, таких как PostgreSQL 15, 16 или 17, процесс унифицирован.

bash
# Обновляем пакеты и устанавливаем PostgreSQL
sudo apt update
sudo apt install -y postgresql postgresql-contrib

# Проверяем статус службы
sudo systemctl status postgresql

# Переключаемся на пользователя postgres
sudo -i -u postgres

# Запускаем интерактивную оболочку psql
psql

# В psql создаем первого пользователя и базу данных
CREATE USER myuser WITH PASSWORD 'StrongPassword123!';
CREATE DATABASE mydb OWNER myuser;
\q
Важно: По умолчанию PostgreSQL использует peer-аутентификацию для локальных подключений. Для внешних подключений или использования пароля нужно править файл pg_hba.conf.

Ключевые файлы конфигурации PostgreSQL

Основная настройка PostgreSQL сосредоточена в трех файлах. Давай разберем, где они находятся и за что отвечают.

  • postgresql.conf – главный файл конфигурации сервера. Здесь задаются параметры памяти, подключений, журналирования и т.д. Расположение: /etc/postgresql/<версия>/main/postgresql.conf.
  • pg_hba.conf – управляет аутентификацией хостов (Host-Based Authentication). Определяет, кто, откуда и как может подключиться к серверу.
  • pg_ident.conf – используется для маппинга системных пользователей на пользователей БД (редко используется в базовых сценариях).

Где находятся настройки PostgreSQL и как их менять

После редактирования конфигов всегда перезагружай службу. Используй команды pg_ctl reload или systemctl reload postgresql для применения изменений без полной перезагрузки (не все параметры можно применить так).

Оптимизация PostgreSQL для 1С: Предприятие 8.3

Настройка PostgreSQL для 1С — это отдельная история. Платформа создает высокую конкурентную нагрузку на СУБД, поэтому нужны специфические параметры.

Опасно: Не используй эти настройки «как есть» для продакшена! Рассчитай значения, исходя из доступной оперативной памяти и количества CPU твоего сервера.

Добавь или измени следующие строки в postgresql.conf для 1С 8.3 и более новых версий:

config
# -----------------------------
# Настройки для 1С (PostgreSQL 12-17)
# -----------------------------

# Память (пример для сервера с 16 ГБ ОЗУ)
shared_buffers = 4GB                 # 25% от ОЗУ
work_mem = 32MB                      # Увеличиваем для сложных сортировок в 1С
effective_cache_size = 12GB          # 75% от ОЗУ
maintenance_work_mem = 1GB

# Настройки WAL и контрольные точки (критично для 1С!)
max_wal_size = 4GB
min_wal_size = 1GB
checkpoint_completion_target = 0.9   # Более плавная запись контрольных точек
wal_buffers = 16MB

# Параллелизм (если много ядер)
max_worker_processes = 8
max_parallel_workers_per_gather = 4
max_parallel_workers = 8

# Настройки подключений (1С открывает много сессий)
max_connections = 200
superuser_reserved_connections = 10

# Важно для стабильности 1С
deadlock_timeout = 3s                # Быстрое обнаружение deadlock-ов
effective_io_concurrency = 2         # Для HDD оставь 2, для SSD можно 200+
random_page_cost = 2.0               # Для SSD уменьши до 1.1

Настройка PostgreSQL для 1С в Linux: Дополнительные шаги

  • Локали и кодировка: При создании базы для 1С используй CREATE DATABASE db1c TEMPLATE template0 ENCODING 'UTF-8' LC_COLLATE 'ru_RU.UTF-8' LC_CTYPE 'ru_RU.UTF-8';
  • Расширения: Установи расширение plpgsql для работы 1С: CREATE EXTENSION IF NOT EXISTS plpgsql;
  • pg_hba.conf: Разреши подключение от сервера 1С по паролю. Добавь строку: host all all 192.168.1.0/24 md5.

Настройка PostgreSQL в Docker: Быстрый старт

Docker postgresql настройка — это удобный способ развернуть изолированное окружение для разработки или тестирования.

bash
# Запуск контейнера с PostgreSQL 16 с кастомными настройками
docker run -d --name my-postgres \
  -e POSTGRES_PASSWORD=mysecretpassword \
  -e POSTGRES_DB=mydb \
  -v /path/to/data:/var/lib/postgresql/data \
  -v /path/to/custom.conf:/etc/postgresql/postgresql.conf \
  -p 5432:5432 \
  postgres:16-alpine \
  -c 'config_file=/etc/postgresql/postgresql.conf'

Для тонкой настройки создай свой Dockerfile:

Dockerfile
FROM postgres:16-alpine

# Копируем предварительно подготовленный конфиг
COPY postgresql.conf /etc/postgresql/postgresql.conf
COPY pg_hba.conf /etc/postgresql/pg_hba.conf

# Меняем владельца и права
RUN chown postgres:postgres /etc/postgresql/*.conf \
    && chmod 600 /etc/postgresql/*.conf

# Указываем использовать наш конфиг
CMD ["postgres", "-c", "config_file=/etc/postgresql/postgresql.conf"]

Безопасность: Настройка SSL в PostgreSQL

PostgreSQL SSL настройка шифрует трафик между клиентом и сервером, что критически важно при передаче данных по публичным сетям.

config
# В postgresql.conf
ssl = on
ssl_cert_file = '/var/lib/postgresql/server.crt'
ssl_key_file = '/var/lib/postgresql/server.key'
ssl_ca_file = '/var/lib/postgresql/root.crt' # Для проверки клиентских сертификатов
ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # Современные шифры

# В pg_hba.conf - требовать SSL для определенных хостов
hostssl all all 0.0.0.0/0 md5 clientcert=verify-full

Мониторинг и настройка логов PostgreSQL

Правильная настройка логов помогает в отладке и аудите. Вот ключевые параметры:

Параметр Рекомендуемое значение Описание
log_destination stderr Куда писать логи (stderr, syslog, csvlog)
logging_collector on Включить сбор логов в файлы
log_statement ddl Логировать DDL-запросы (для 1С полезно 'mod')
log_min_duration_statement 1000 Логировать запросы дольше 1 сек (мс)
log_rotation_age 1d Ротация логов каждый день

Часто задаваемые вопросы (FAQ)

Как проверить, применяются ли мои настройки из postgresql.conf?

Подключись к БД и выполни: SELECT name, setting, source FROM pg_settings WHERE source = 'configuration file';. Также можно использовать SHOW all; для просмотра всех текущих значений.

Почему после настройки PostgreSQL для 1С производительность упала?

Скорее всего, заданы слишком агрессивные значения (особенно для памяти), не соответствующие ресурсам сервера. Например, shared_buffers, превышающий доступную ОЗУ, приведет к свопингу. Используй утилиту pgtune для расчета базовых значений под твое железо и нагрузку.

В чем разница между reload и restart PostgreSQL?

Reload (pg_ctl reload) перечитывает конфигурационные файлы (postgresql.conf, pg_hba.conf) без разрыва существующих подключений. Не все параметры можно изменить «на лету». Restart полностью перезапускает процесс сервера, разрывая все подключения, но гарантированно применяет все изменения.

Как перенести настройки при обновлении PostgreSQL (с 12 на 15, 16, 17)?

Не копируй старый postgresql.conf напрямую. Лучше:

  1. Установи новую версию PostgreSQL.
  2. Используй pg_upgrade для миграции данных.
  3. Вручную перенеси только измененные тобой параметры из старого конфига в новый, сгенерированный по умолчанию. Проверь устаревшие параметры в официальной документации.

Заключение

Настройка PostgreSQL — это итеративный процесс. Не существует «волшебного» конфига на все случаи жизни. Начни с базовой установки, затем, используя мониторинг (например, pg_stat_statements, pgBadger для анализа логов), выявляй узкие места и корректируй параметры. Помни, что настройки для 1С, для высоконагруженного веб-приложения или для аналитической БД будут сильно отличаться. Экспериментируй в тестовом окружении, делай бэкапы конфигов и документируй изменения. Удачи в тонкой настройке твоего «гоночного болида»!

Поделиться:
Сохранить гайд? В закладки браузера