version: '3.9'
services:
  pgbouncer:
    image: pgbouncer/pgbouncer:1.21.0
    environment:
      DATABASES_HOST: postgresql_primary
      DATABASES_PORT: '5432'
      DATABASES_USER: postgres
      DATABASES_DBNAME: '*'
      POOL_MODE: transaction
      MAX_CLIENT_CONN: '100'
      DEFAULT_POOL_SIZE: '20'
      MIN_POOL_SIZE: '5'
      RESERVE_POOL_SIZE: '3'
      SERVER_LIFETIME: '3600'
      SERVER_IDLE_TIMEOUT: '600'
      LOG_CONNECTIONS: '1'
      LOG_DISCONNECTIONS: '1'
      DATABASES_PASSWORD_FILE_FILE: /run/secrets/databases_password_file
    secrets:
    - pg_root_password
    - databases_password_file
    networks:
    - database-network
    healthcheck:
      test:
      - CMD
      - psql
      - -h
      - localhost
      - -p
      - '6432'
      - -U
      - postgres
      - -c
      - SELECT 1;
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 30s
    deploy:
      resources:
        limits:
          memory: 512M
          cpus: '0.5'
        reservations:
          memory: 128M
          cpus: '0.1'
      placement:
        constraints:
        - node.labels.role==db
      labels:
      - traefik.enable=false
secrets:
  pg_root_password:
    external: true
  databases_password_file:
    external: true
networks:
  database-network:
    external: true
