x-env-type: &env-type WP_ENVIRONMENT_TYPE: production services: wordpress: environment: *env-type cron: environment: *env-type caddy: image: caddy:2-alpine restart: unless-stopped depends_on: wordpress: condition: service_healthy ports: - "80:80" - "443:443" environment: SITE_DOMAIN: ${SITE_DOMAIN} # Default keeps wp-admin open to everyone (today's behavior) when # unset — resolved here, not in the Caddyfile, since Compose would # otherwise pass an *empty* string rather than an unset var, and # Caddy's own {$VAR:default} placeholder only applies to a var # that's truly absent, not an empty one. WP_ADMIN_ALLOWED_IPS: ${WP_ADMIN_ALLOWED_IPS:-0.0.0.0/0 ::/0} volumes: - ./docker/caddy/Caddyfile.production:/etc/caddy/Caddyfile:ro - wp_core:/var/www/html:ro - wp_uploads:/var/www/html/wp-content/uploads:ro - wp_themes:/var/www/html/wp-content/themes:ro - ./wp-content/plugins/bookstore-core:/var/www/html/wp-content/plugins/bookstore-core:ro - caddy_data:/data - caddy_config:/config volumes: caddy_data: caddy_config: