docker-compose.yml
Rama main · réplica de lectura del repositorio original.
services:
art-curator:
build: .
container_name: art-curator
ports:
- "8000:8000"
volumes:
# Map the local artwork library for persistence
- ./Artwork:/app/Artwork
# Map the data directory for SQLite database persistence
- ./data:/app/data
# The container clock must be the HOUSE clock: Night & Quiet Hours and the CEC panel power
# resolve "now" inside the container, which is otherwise UTC regardless of the host's timezone
# (found 2026-09-20 — the schedule would have fired hours off). A bind of the host's zone file
# is the standard fix and needs no config. Note: it is resolved at container start, so after
# `timedatectl set-timezone` restart the stack (or reboot).
- /etc/localtime:/etc/localtime:ro
env_file:
# Optional: pre-seed env vars (e.g. a default GEMINI_API_KEY). The app runs fine
# without it — configure the AI model in-app via Admin → Settings → AI Engine.
# required:false lets a fresh clone `docker compose up` with no .env (Compose >= v2.24).
- path: .env
required: false
restart: unless-stopped
# Optional HTTPS reverse proxy. Off by default; enable with:
# docker compose --profile tls up -d
# The app keeps serving plain http://:8000 for kiosks/displays; Caddy adds https on 443.
caddy:
image: caddy:2
container_name: sd-caddy
profiles: ["tls"]
restart: unless-stopped
ports:
- "80:80"
- "443:443"
environment:
# The hostname you'll open in a browser. Default localhost; set a real domain for
# auto Let's Encrypt (and remove `tls internal` in deploy/tls/Caddyfile).
- SD_TLS_HOST=${SD_TLS_HOST:-localhost}
volumes:
- ./deploy/tls/Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
depends_on:
- art-curator
volumes:
caddy_data:
caddy_config: