Skip to content

Минимальный PgBouncer образ с простой конфигурацией 🇷🇺

License

Notifications You must be signed in to change notification settings

sgrinko/docker-pgbouncer

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

77 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

docker-pgbouncer

Оригинальный код: https://github.com/sgrinko/docker-pgbouncer

Докер основан на образе (edoburu/pgbouncer) за что ему большое спасибо!

Исходный код оригинального образа (edoburu/docker-pgbouncer)

Отличия:

  • запуск выполняется под пользователем postgres у которого gid = 998 и uid равен 999 (postgres пользователь с такими номерами используется для всех контейнеров)

  • порт для службы назначается 6432 (номер по умолчанию для исходного pgbouncer)

  • по умолчанию включена hba аутентификация

  • Если каталог настроек (/etc/pgbouncer) пуст при старте контейнера, то выполняется создание всех необходимых файлов (pgbouncer.ini, auth_hba.txt, userlist.txt).

userlist.txt - на формирование влияют переменные окружения: 1-й вариант - использование передачи всей информавции через URI подключения к серверу

Name Default value Description
DATABASE_URL Строка по формату: <сервис>://<пользователь>:<пароль>@<хост>:<порт>/<бд> пример: postgresql://postgres:[email protected]:5432/my_db
AUTH_TYPE hba тип аутентификации

2-й вариант - отдельные переменные

Name Default value Description
DB_PASSWORD пароль пользователя (обязателен, для формирования списка пользователей)
DB_USER postgres имя пользователя для подключения к БД
AUTH_TYPE hba тип аутентификации

Обратите внимание, что в файле userlist.txt необходимо указать ваш MD5 хэш для пароля пользователя postgres

auth_hba.txt - никакие переменные не влияют. Файл создаётся в состоянии:

# Allow any user on the local system to connect to any database with
# any database user name using Unix-domain sockets (the default for local
# connections).
#
# TYPE  DATABASE        USER               ADDRESS                 METHOD
local   all             all                                        peer
host    all             all                0.0.0.0/0               md5
host    all             all                ::0/0                   md5

pgbouncer.ini - почти все параметры можно определить через переменные окружения. Для деталей смотрите файл: entrypoint.sh В дефолтные значения файла настроек включены следующие значения:

################## Auto generated ##################
[databases]
* = host=127.0.0.1 port=5432 auth_user=postgres
 
[pgbouncer]
logfile = /var/log/pgbouncer/pgbouncer.log
pidfile = /var/run/pgbouncer/pgbouncer.pid
listen_addr = 0.0.0.0
listen_port = 6432
;unix_socket_dir = /var/run/postgresql
;unix_socket_mode = 0777
auth_file = /etc/pgbouncer/userlist.txt
auth_hba_file = /etc/pgbouncer/auth_hba.txt
auth_type = hba
auth_query = SELECT usename, passwd FROM pg_shadow WHERE usename=/usr/bin/pgbouncer;
pool_mode = transaction
max_client_conn = 10000
default_pool_size = 5
server_round_robin = 1
ignore_startup_parameters = extra_float_digits
 
# Log settings
log_connections = 0
log_disconnections = 0
log_pooler_errors = 1
stats_period = 120
admin_users = postgres
 
# Connection sanity checks, timeouts
server_lifetime = 300
server_idle_timeout = 300
 
# TLS settings
 
# Dangerous timeouts
pkt_buf = 65536
listen_backlog = 1024
tcp_defer_accept = 30
tcp_socket_buffer = 65536
tcp_keepcnt = 3
tcp_keepidle = 15
tcp_keepintvl = 10
################## end file #################

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

Пример старта контейнера через docker run

В данном примере postgres мапится на порт 6433. Запуск без примапленных каталогов. Всё данные будут храниться внутри докер контейнера. В данном примере  pgbouncer мапится на порт 6433.

docker run -d --name dev-pg -p 127.0.0.1:6433:6432/tcp -e DB_PASSWORD=qweasdzxc grufos/pgbouncer:1.22.0

запуск с указанием примапленных каталогов. Все настройки будут храниться вне контейнера в каталоге /etc/pgbouncer1/, а логи в каталоге /var/log/pgbouncer1

docker run -d --name dev-pg -p 127.0.0.1:6433:6432/tcp -e DB_PASSWORD=qweasdzxc \
       -v "/etc/pgbouncer/:/etc/pgbouncer/" \
       -v "/var/log/pgbouncer:/var/log/pgbouncer" \
       -v "/etc/localtime:/etc/localtime" \
		   grufos/pgbouncer:1.22.0

остановка контейнера

docker stop dev-pg

запуск ранее остановленного контейнера

docker start dev-pg

Пример docker-compose файла

version: '3.5'
services:
  pgbouncer:
#    image: grufos/pgbouncer:1.22.0
    build:
      context: ./docker-pgbouncer
      dockerfile: Dockerfile
    volumes:
      - "/etc/pgbouncer/:/etc/pgbouncer/"
      - "/var/log/pgbouncer:/var/log/pgbouncer"
      - "/etc/localtime:/etc/localtime"
    ports:
      - "6433:6432"
    environment:
# если в каталоге файлов есть файлы настройки то указанные ниже переменные не обрабатываются.
# если файлы настройки не указываются, то нужно передать в переменных параметры подключения.
# 1-й вариант - использование передачи через URI подключения к серверу
#      - DATABASE_URL=postgresql://postgres:[email protected]:5432
# 2-й вариант - отдельные переменные.
# Обязательно нужно указывать DB_PASSWORD
      - DB_PASSWORD=qweasdzxc
#      - DB_HOST=127.0.0.1
#      - DB_PORT=5432
#      - DB_USER=postgres

Рекомендуется запускать этот докер, как докер-спутник для контейнера с postgres:

version: '3.5'
services:
 
  postgres:
#    image: grufos/postgres:14.4
    build:
      context: ./docker-postgres
      dockerfile: Dockerfile
    shm_size: '2gb'
    command: |
      -c shared_preload_libraries='plugin_debugger,plpgsql_check,pg_stat_statements,auto_explain,pg_buffercache,pg_cron,shared_ispell,pg_prewarm'
    volumes:
      - "/var/lib/pgsql/14/data:/var/lib/postgresql/data"
      - "/var/log/postgresql:/var/log/postgresql"
      - "/mnt/pgbak/:/mnt/pgbak/"
    ports:
      - "5432:5432"
    restart: always
    environment:
      POSTGRES_PASSWORD: qweasdzxc
      POSTGRES_HOST_AUTH_METHOD: trust
      DEPLOY_PASSWORD: cxzdsaewq
      TZ: "Europe/Moscow"
      EMAILTO: "[email protected]"
      EMAIL_SERVER: "mail.company.ru"
      EMAIL_HOSTNAME: "noreplay@my_host.ru"
      BACKUP_THREADS: "4"
      BACKUP_MODE: ""
 
  pgbouncer:
#    image: grufos/pgbouncer:1.22.0
    build:
      context: ./docker-pgbouncer
      dockerfile: Dockerfile
    volumes:
      - "/etc/pgbouncer/:/etc/pgbouncer/"
      - "/var/log/pgbouncer:/var/log/pgbouncer"
      - "/etc/localtime:/etc/localtime"
    ports:
      - "6433:6432"
    restart: always
    depends_on:
      - postgres
    environment:
# если в каталоге файлов есть файлы настройки то указанные ниже переменные не обрабатываются.
# если файлы настройки не указываются, то нужно передать в переменных параметры подключения.
# 1-й вариант - использование передачи через URI подключения к серверу
#      - DATABASE_URL=postgresql://postgres:[email protected]:5432
# 2-й вариант - отдельные переменные.
# Обязательно нужно указывать DB_PASSWORD
      - DB_PASSWORD=qweasdzxc
#      - DB_HOST=127.0.0.1
#      - DB_PORT=5432
#      - DB_USER=postgres

Этот управляющий файл рекомендуется запускать командами:

#!/bin/bash
clear
rm -rf /var/log/pgbouncer/*
docker-compose -f "pgbouncer-service.yml" up --build "$@"

About

Минимальный PgBouncer образ с простой конфигурацией 🇷🇺

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Shell 79.2%
  • Dockerfile 18.1%
  • Makefile 2.7%