name: doodle-prod services: postgres: image: postgres:18.6-alpine container_name: doodle-postgres restart: unless-stopped environment: POSTGRES_USER: postgres POSTGRES_DB: postgres POSTGRES_PASSWORD: ${POSTGRES_ADMIN_PASSWORD:?请配置独立的数据库管理密码} DOODLE_MIGRATOR_PASSWORD: ${DOODLE_MIGRATOR_PASSWORD:?请配置迁移账号密码} DOODLE_APP_PASSWORD: ${DOODLE_APP_PASSWORD:?请配置应用账号密码} POSTGRES_INITDB_ARGS: '--encoding=UTF8 --locale=C --auth-host=scram-sha-256' TZ: UTC PGTZ: UTC command: - postgres - -c - timezone=UTC - -c - max_connections=50 - -c - shared_buffers=128MB - -c - work_mem=4MB # PostgreSQL 18 持久化父目录;不发布宿主机端口。 volumes: - postgres-data:/var/lib/postgresql - ./postgres/10-create-roles.sh:/docker-entrypoint-initdb.d/10-create-roles.sh:ro networks: - database mem_limit: 512m cpus: 1.0 pids_limit: 128 shm_size: 128m healthcheck: test: ['CMD-SHELL', 'pg_isready -U postgres -d doodle_prod'] interval: 10s timeout: 5s retries: 12 start_period: 15s logging: driver: json-file options: max-size: '10m' max-file: '3' volumes: postgres-data: name: doodle-prod-postgres-data networks: database: name: doodle-prod-db internal: true