# /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