services: app: build: context: . container_name: goodwalk_svelte_app environment: DATABASE_URL: postgresql://${POSTGRES_USER:-goodwalk}:${POSTGRES_PASSWORD:-goodwalk}@db:5432/${POSTGRES_DB:-goodwalk} NODE_ENV: production PORT: 3000 depends_on: - db expose: - '3000' restart: unless-stopped networks: - default - webnet mail-api: build: context: ./mail-api container_name: goodwalk_svelte_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} FORM_MIN_SECONDS: ${FORM_MIN_SECONDS:-4} FORM_MAX_SECONDS: ${FORM_MAX_SECONDS:-7200} RATE_LIMIT_WINDOW_SECONDS: ${RATE_LIMIT_WINDOW_SECONDS:-900} RATE_LIMIT_MAX_PER_IP: ${RATE_LIMIT_MAX_PER_IP:-5} RATE_LIMIT_MAX_PER_EMAIL: ${RATE_LIMIT_MAX_PER_EMAIL:-3} RATE_LIMIT_MIN_INTERVAL_SECONDS: ${RATE_LIMIT_MIN_INTERVAL_SECONDS:-20} PYTHONUNBUFFERED: '1' expose: - '8000' restart: unless-stopped networks: - default - webnet db: image: postgres:16-alpine container_name: goodwalk_svelte_db 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 networks: - default volumes: postgres_data: networks: webnet: external: true