Files
hxbooks/docker-compose.yml

67 lines
1.5 KiB
YAML

services:
app:
build: .
restart: unless-stopped
volumes:
# Mount media directory for book covers
- media:/app/media
# Mount instance directory for config and database persistence
- instance:/app/instance
# Mount shared directory for static files that Caddy can access
- static:/shared/static
expose:
- "5000"
environment:
- FLASK_ENV=production
- GOOGLE_BOOKS_API_KEY=${GOOGLE_BOOKS_API_KEY}
networks:
- hxbooks
# Health check to ensure app is ready
healthcheck:
test:
[
"CMD-SHELL",
"wget --no-verbose --tries=1 --spider http://127.0.0.1:5000/ || exit 1",
]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
caddy:
image: caddy:2-alpine
restart: unless-stopped
ports:
- "5123:80"
volumes:
# Caddyfile configuration
- ./Caddyfile:/etc/caddy/Caddyfile:ro
# Media files served directly by Caddy
- media:/var/www/media:ro
# Static files served directly by Caddy (populated by app container)
- static:/var/www/static:ro
# Caddy data for TLS certificates
- caddy_data:/data
- caddy_config:/config
networks:
- hxbooks
depends_on:
app:
condition: service_healthy
networks:
hxbooks:
driver: bridge
volumes:
media:
driver: local
instance:
driver: local
static:
driver: local
caddy_data:
driver: local
caddy_config:
driver: local