version: '3.8' services: db: image: postgres:16 container_name: PostgreSQL environment: - POSTGRES_DB=postgres - POSTGRES_USER=root - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - POSTGRES_INITDB_ARGS=--encoding=UTF8 --lc-collate=C --lc-ctype=C command: - "postgres" - "-c" - "shared_buffers=2GB" - "-c" - "effective_cache_size=6GB" - "-c" - "maintenance_work_mem=512MB" - "-c" - "checkpoint_completion_target=0.9" - "-c" - "wal_buffers=16MB" - "-c" - "default_statistics_target=100" - "-c" - "random_page_cost=1.1" - "-c" - "effective_io_concurrency=200" - "-c" - "work_mem=32MB" - "-c" - "min_wal_size=1GB" - "-c" - "max_wal_size=4GB" - "-c" - "max_worker_processes=8" - "-c" - "max_parallel_workers_per_gather=4" - "-c" - "max_parallel_workers=8" - "-c" - "max_parallel_maintenance_workers=4" - "-c" - "max_connections=100" - "-c" - "log_min_duration_statement=1000" - "-c" - "log_line_prefix=%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h " - "-c" - "log_checkpoints=on" - "-c" - "log_connections=on" - "-c" - "log_disconnections=on" - "-c" - "log_lock_waits=on" - "-c" - "log_temp_files=0" - "-c" - "autovacuum_max_workers=3" - "-c" - "autovacuum_naptime=10s" - "-c" - "shared_preload_libraries=pg_stat_statements" volumes: - /volume1/docker/postgresql:/var/lib/postgresql/data networks: - postgres01_default - paperless_shared deploy: resources: limits: memory: 8G reservations: memory: 4G restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -q -d postgres -U root"] interval: 30s timeout: 10s retries: 3 start_period: 30s pgbouncer: image: pgbouncer/pgbouncer:latest container_name: PgBouncer environment: - DATABASES_HOST=PostgreSQL - DATABASES_PORT=5432 - DATABASES_USER=root - DATABASES_PASSWORD=${POSTGRES_PASSWORD} - DATABASES_DBNAME=paperless - POOL_MODE=transaction - MAX_CLIENT_CONN=100 - DEFAULT_POOL_SIZE=25 - MIN_POOL_SIZE=10 - RESERVE_POOL_SIZE=5 - RESERVE_POOL_TIMEOUT=3 - SERVER_IDLE_TIMEOUT=600 - LOG_CONNECTIONS=1 - LOG_DISCONNECTIONS=1 networks: - paperless_shared depends_on: db: condition: service_healthy deploy: resources: limits: memory: 256M reservations: memory: 128M restart: unless-stopped pgadmin: image: dpage/pgadmin4:latest container_name: pgAdmin environment: - PGADMIN_DEFAULT_EMAIL=${PGADMIN_EMAIL:-admin@admin.com} - PGADMIN_DEFAULT_PASSWORD=${PGADMIN_PASSWORD:-admin} - PGADMIN_CONFIG_SERVER_MODE=True - PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED=True volumes: - /volume1/docker/postgresadmin:/var/lib/pgadmin ports: - "2660:80" networks: - postgres01_default depends_on: db: condition: service_healthy deploy: resources: limits: memory: 512M reservations: memory: 256M restart: unless-stopped healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:80"] interval: 30s timeout: 10s retries: 3 start_period: 30s networks: postgres01_default: driver: bridge paperless_shared: external: true name: paperless_shared