feat(infra): add PgBouncer connection pooling for production PostgreSQL
Introduces PgBouncer as a connection pooler between the API service and PostgreSQL in docker-compose.prod.yml, reducing connection overhead and improving concurrency under production load. - Add PgBouncer service (edoburu/pgbouncer:1.23.1-p2) with transaction pool mode, max_client_conn=200, default_pool_size=20 - Route API DATABASE_URL through PgBouncer (port 6432), keep direct connection (DATABASE_URL_DIRECT) for Prisma migrations/introspection - Create infra/pgbouncer/ config: pgbouncer.ini, userlist template, and entrypoint script with runtime env-var substitution - Update prisma.config.ts to prefer DATABASE_URL_DIRECT for migrations - Add K6 load test (e2e/load/pgbouncer-pool-test.js) with ramp-up to 200 VUs, pool exhaustion detection, and p95 < 2s threshold - Add PgBouncer env vars to .env.example Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
11
.env.example
11
.env.example
@@ -13,6 +13,17 @@ DB_USER=goodgo
|
||||
DB_PASSWORD=CHANGE_ME
|
||||
DATABASE_URL=postgresql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}?schema=public
|
||||
|
||||
# Direct connection (bypasses PgBouncer — used for migrations/introspection)
|
||||
DATABASE_URL_DIRECT=postgresql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}?schema=public
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# PgBouncer (Connection Pooling — production only)
|
||||
# -----------------------------------------------------------------------------
|
||||
PGBOUNCER_POOL_SIZE=20
|
||||
PGBOUNCER_MAX_CLIENT_CONN=200
|
||||
PGBOUNCER_ADMIN_PASSWORD=CHANGE_ME
|
||||
PGBOUNCER_STATS_PASSWORD=CHANGE_ME
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Redis
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user