feat: add PostgreSQL with PgDog template (#681)

* feat: add PostgreSQL with PgDog template

Add postgres-pgdog template providing PostgreSQL database with PgDog connection pooler, load balancer, and horizontal scaling proxy. Modern alternative to PgBouncer with multi-threading support.

- Configurable PostgreSQL (default: 18-alpine) and PgDog (default: v0.1.26) images
- Optional admin interface on port 6433
- Includes healthcheck and dependency management

* 🐛 fix(postgres-pgdog): add config mounts and fix postgres volume path

- Add [[config.mounts]] for pgdog.toml and users.toml
- Mount config files from ../files/ in docker-compose
- Change postgres volume to /var/lib/postgresql (postgres 18+ standard)
- Add explicit command with config paths to prevent warnings

* 🐛 fix(postgres-pgdog): correct binary path and use default config locations

- Mount configs to /pgdog/ (default WorkingDir) instead of /etc/pgdog/
- Remove explicit command (binary is /usr/local/bin/pgdog, not /pgdog/pgdog)
- Use image's default CMD with default config paths

* 🐛 fix(postgres-pgdog): remove invalid admin_port config field

- Remove admin_port from [general] section (not a valid field)
- Admin DB uses same port 6432 with special database name
- Remove commented admin domain config

* 🐛 fix(postgres-pgdog): enable external access via fixed port mapping

- Add fixed port 6432:6432 to postgres-pgdog service
- Remove HTTP domain config (incompatible with TCP protocol)
- Add comment for internal-only option

Fixes UnsupportedStartup errors when using domain config for PostgreSQL protocol access.

* 🐛 fix(postgres-pgdog): use standard port format per convention

- Change port mapping from '6432:6432' to '6432' format
- Follows Dokploy template convention for port declarations
- External access requires checking Dokploy UI for assigned host port

* 📝 docs(postgres-pgdog): clarify port settings comment

* 🐛 fix(postgres-pgdog): default to internal access with opt-in external port

- Remove obsolete version field
- Port mapping commented by default for security
- Users uncomment to enable external access on port 6432
This commit is contained in:
Vinicios Lugli
2026-02-15 23:50:57 -03:00
committed by GitHub
parent c3e83d75c6
commit 161053606f
4 changed files with 88 additions and 0 deletions

View File

@@ -0,0 +1,33 @@
services:
postgres-pgdog:
image: ${PGDOG_IMAGE}
restart: unless-stopped
# Uncomment 'ports' settings below to enable external access
# ports:
# - "6432:6432"
volumes:
- ../files/pgdog.toml:/pgdog/pgdog.toml
- ../files/users.toml:/pgdog/users.toml
environment:
- RUST_LOG=${RUST_LOG}
depends_on:
postgres:
condition: service_healthy
postgres:
image: ${POSTGRES_IMAGE}
restart: unless-stopped
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
volumes:
- postgres-data:/var/lib/postgresql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 5
volumes:
postgres-data:

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@@ -0,0 +1,36 @@
[variables]
postgres_user = "${username}"
postgres_password = "${password:32}"
postgres_db = "postgres"
pgdog_image = "ghcr.io/pgdogdev/pgdog:v0.1.26"
postgres_image = "postgres:18-alpine"
[[config.mounts]]
filePath = "pgdog.toml"
content = """
[general]
host = "0.0.0.0"
port = 6432
[[databases]]
name = "${postgres_db}"
host = "postgres"
port = 5432
"""
[[config.mounts]]
filePath = "users.toml"
content = """
[[users]]
name = "${postgres_user}"
database = "${postgres_db}"
password = "${postgres_password}"
"""
[config.env]
POSTGRES_USER = "${postgres_user}"
POSTGRES_PASSWORD = "${postgres_password}"
POSTGRES_DB = "${postgres_db}"
PGDOG_IMAGE = "${pgdog_image}"
POSTGRES_IMAGE = "${postgres_image}"
RUST_LOG = "info"

View File

@@ -5106,6 +5106,25 @@
"webmail"
]
},
{
"id": "postgres-pgdog",
"name": "PostgreSQL with PgDog",
"version": "0.1.26",
"description": "PostgreSQL database with PgDog connection pooler, load balancer, and horizontal scaling proxy. A modern alternative to PgBouncer with multi-threading support.",
"logo": "postgres-pgdog.png",
"links": {
"github": "https://github.com/pgdogdev/pgdog",
"website": "https://pgdog.dev",
"docs": "https://docs.pgdog.dev"
},
"tags": [
"database",
"postgresql",
"pooler",
"proxy",
"load-balancer"
]
},
{
"id": "postgresus",
"name": "Postgresus",