services: app: build: context: . dockerfile: apps/web/Dockerfile restart: unless-stopped env_file: .env volumes: - ./data:/data expose: - "3000" worker: build: context: . dockerfile: apps/builder/Dockerfile restart: unless-stopped env_file: .env volumes: - ./data:/data caddy: image: caddy:2-alpine restart: unless-stopped env_file: .env ports: - "80:80" - "443:443" volumes: - ./deploy/${CADDYFILE:-Caddyfile}:/etc/caddy/Caddyfile:ro - ./data/sites:/srv/sites:ro - caddy_data:/data - caddy_config:/config depends_on: - app # See docs/guides/tunnel-deployment.mdx. Opt-in: docker compose --profile tunnel up cloudflared: image: cloudflare/cloudflared:latest restart: unless-stopped command: tunnel --config /etc/cloudflared/config.yml run volumes: - ./deploy/cloudflared:/etc/cloudflared:ro depends_on: - caddy profiles: - tunnel volumes: caddy_data: caddy_config: