services: postgres: image: postgres:16-bookworm restart: unless-stopped environment: POSTGRES_DB: poster_studio POSTGRES_USER: poster_studio POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD} volumes: [poster-studio-postgres:/var/lib/postgresql/data] healthcheck: test: [CMD-SHELL, "pg_isready -U poster_studio -d poster_studio"] interval: 5s timeout: 5s retries: 30 api: image: ${DEPLOY_IMAGE:?Set DEPLOY_IMAGE} restart: unless-stopped read_only: true tmpfs: ["/tmp:rw,noexec,nosuid,size=64m"] volumes: [poster-studio-assets:/data/assets] environment: DATABASE_URL: postgresql+psycopg://poster_studio:${POSTGRES_PASSWORD}@postgres:5432/poster_studio ADMIN_TOKEN: ${ADMIN_TOKEN:?Set ADMIN_TOKEN} ASSET_ROOT: /data/assets depends_on: postgres: { condition: service_healthy } networks: default: public: aliases: [poster-studio-api] volumes: poster-studio-postgres: { name: poster-studio-postgres-data } poster-studio-assets: { name: poster-studio-assets } networks: public: { name: pk-lab-public, external: true }