diff --git a/.env.example b/.env.example index 641201f..87d365b 100644 --- a/.env.example +++ b/.env.example @@ -15,13 +15,14 @@ DEV_MODE= # Services PROJECT_NAME=odoocker -SERVICES=odoo,nginx,proxy,postgres +SERVICES=odoo,nginx,proxy,postgres,pgbouncer # Service configuration USE_REDIS=false USE_S3=false USE_SENTRY=false USE_PGADMIN=false +USE_PGBOUNCER=false # GitHub user and access token to clone private repositories GITHUB_USER= @@ -46,6 +47,11 @@ UNACCENT=False LIST_DB=True DBFILTER=.* +# PgBouncer +POOL_MODE=transaction +MAX_CLIENT_CONN=500 +ADMIN_USERS=postgres,dbuser,odoo + # Logging LOG_LEVEL=info # Additional logs @@ -135,6 +141,7 @@ USE_REDIS=${USE_REDIS} USE_S3=${USE_S3} USE_SENTRY=${USE_SENTRY} USE_PGADMIN=${USE_PGADMIN} +USE_PGBOUNCER=${USE_PGBOUNCER} # Which services are going to be brought up COMPOSE_PROFILES=${SERVICES} @@ -149,10 +156,12 @@ ACME_COMPANION_PROFILES="acme" KEYDB_PROFILES="keydb" MINIO_PROFILES="minio" PGADMIN_PROFILES="pgadmin" +PGBOUNCER_PROFILES="pgbouncer" # Containers' Tags ODOO_TAG=17.0 POSTGRES_TAG=16.1 +PGBOUNCER_TAG=latest KEYDB_TAG=latest MINIO_TAG=latest NGINX_TAG=1.25.3 diff --git a/docker-compose.override.local.yml b/docker-compose.override.local.yml index 5a725b8..e77024f 100644 --- a/docker-compose.override.local.yml +++ b/docker-compose.override.local.yml @@ -12,6 +12,11 @@ services: ports: - 5432:5432 + pgbouncer: + restart: 'no' + ports: + - 5432:5432 + nginx: restart: 'no' diff --git a/docker-compose.override.production.yml b/docker-compose.override.production.yml index 909797a..b67a7c9 100644 --- a/docker-compose.override.production.yml +++ b/docker-compose.override.production.yml @@ -12,6 +12,11 @@ services: ports: - 127.0.0.1:5432:5432 + pgbouncer: + restart: unless-stopped + ports: + - 127.0.0.1=5432:5432 + nginx: restart: unless-stopped diff --git a/docker-compose.yml b/docker-compose.yml index 188c4c5..3738290 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -83,6 +83,23 @@ services: - internal profiles: [$POSTGRES_PROFILES] + pgbouncer: + image: edoburu/pgbouncer:latest + container_name: pgbouncer + restart: always + depends_on: + - db + #ports: + # - "5432:5432" + environment: + - DB_HOST=db + - DB_USER=odoo + - DB_PASSWORD=odoo + - MAX_CLIENT_CONN=500 + - POOL_MODE=transaction + - ADMIN_USERS=postgres,dbuser,odoo + profiles: [$PGBOUNCER_PROFILES] + nginx: container_name: nginx image: nginx:${NGINX_TAG} diff --git a/pgbouncer/docker-entrypoint-initdb.d/init.sh b/pgbouncer/docker-entrypoint-initdb.d/init.sh new file mode 100644 index 0000000..b8b8bb5 --- /dev/null +++ b/pgbouncer/docker-entrypoint-initdb.d/init.sh @@ -0,0 +1,20 @@ +#!/bin/bash +set -e + +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL + CREATE USER dbuser WITH ENCRYPTED PASSWORD 'dbuser'; + CREATE DATABASE dbuser OWNER dbuser; + + CREATE USER user1 WITH ENCRYPTED PASSWORD 'user1'; + CREATE DATABASE user1 OWNER user1; + + CREATE USER user2 WITH ENCRYPTED PASSWORD 'user2'; + CREATE DATABASE user2 OWNER user2; + + CREATE USER user3 WITH ENCRYPTED PASSWORD 'user3'; + CREATE DATABASE user3 OWNER user3; + + CREATE USER odoo WITH ENCRYPTED PASSWORD 'odoo'; + CREATE DATABASE odoo OWNER odoo; + +EOSQL \ No newline at end of file