65 lines
2.1 KiB
YAML
65 lines
2.1 KiB
YAML
# /opt/stacks/postgres/docker-compose.yml
|
|
|
|
services:
|
|
|
|
# ── Servei PostgreSQL ────────────────────
|
|
postgres:
|
|
container_name: postgres
|
|
image: postgres:16-alpine
|
|
restart: unless-stopped
|
|
environment:
|
|
TZ: Europe/Madrid
|
|
POSTGRES_USER: '${POSTGRES_USER}'
|
|
POSTGRES_PASSWORD: '${POSTGRES_PASSWORD}'
|
|
POSTGRES_DB: '${POSTGRES_DB}'
|
|
# UTF8 sense locale específic → compatible amb Alpine
|
|
POSTGRES_INITDB_ARGS: '--encoding=UTF8 --locale=en_US.utf8'
|
|
ports:
|
|
- "5432:5432" # Accés local per DBeaver, psql, etc.
|
|
volumes:
|
|
- postgres_data:/var/lib/postgresql/data
|
|
- postgres_init:/docker-entrypoint-initdb.d # Scripts SQL d'inicialització
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
|
|
interval: 10s
|
|
timeout: 5s # Afegit
|
|
retries: 5
|
|
start_period: 30s # Afegit: marge per a scripts d'init
|
|
networks:
|
|
- pg_net
|
|
|
|
# ── pgAdmin: UI web per gestionar Postgres ──
|
|
pgadmin:
|
|
container_name: pgadmin
|
|
image: dpage/pgadmin4:latest
|
|
restart: unless-stopped
|
|
ports:
|
|
- "5050:80" # UI web (només local → via Nginx)
|
|
environment:
|
|
TZ: Europe/Madrid
|
|
PGADMIN_DEFAULT_EMAIL: '${PGADMIN_EMAIL}'
|
|
PGADMIN_DEFAULT_PASSWORD: '${PGADMIN_PASSWORD}'
|
|
PGADMIN_DISABLE_POSTFIX: 'true' # Evita errors de Postfix als logs
|
|
PGADMIN_CONFIG_SERVER_MODE: 'False' # Mode personal (un sol usuari)
|
|
PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED: 'False' # Simplifica l'accés local
|
|
volumes:
|
|
- pgadmin_data:/var/lib/pgadmin # Persisteix servidors i preferències
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
networks:
|
|
- pg_net
|
|
- shared_net
|
|
|
|
volumes:
|
|
postgres_data:
|
|
postgres_init: # Posa els teus scripts .sql aquí
|
|
pgadmin_data: # Configuració de pgAdmin persistent
|
|
|
|
networks:
|
|
pg_net:
|
|
driver: bridge
|
|
shared_net:
|
|
external: true
|
|
name: shared_net
|