services: app: build: context: . environment: DATABASE_URL: postgresql://${POSTGRES_USER:-goodwalk}:${POSTGRES_PASSWORD:-goodwalk}@db:5432/${POSTGRES_DB:-goodwalk} NODE_ENV: production PORT: ${APP_PORT:-3000} depends_on: - db restart: unless-stopped mail-api: build: context: ./mail-api environment: RESEND_API_KEY: ${RESEND_API_KEY} OWNER_EMAIL: ${OWNER_EMAIL} FROM_EMAIL: ${FROM_EMAIL:-GoodWalk } REPLY_TO: ${REPLY_TO:-aless@goodwalk.co.nz} restart: unless-stopped db: image: postgres:16-alpine environment: POSTGRES_DB: ${POSTGRES_DB:-goodwalk} POSTGRES_USER: ${POSTGRES_USER:-goodwalk} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-goodwalk} volumes: - postgres_data:/var/lib/postgresql/data - ./docker/postgres/init:/docker-entrypoint-initdb.d:ro restart: unless-stopped nginx: image: nginx:1.27-alpine depends_on: - app - mail-api ports: - '80:80' - '443:443' volumes: - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro - /etc/letsencrypt:/etc/letsencrypt:ro - /var/www/certbot:/var/www/certbot:ro restart: unless-stopped volumes: postgres_data: