57 lines
1.7 KiB
YAML
57 lines
1.7 KiB
YAML
# Single-service Docker Compose for ui.suaveplan.com.
|
|
#
|
|
# The Caddy container serves /srv/registry from the OVH host as
|
|
# read-only. Cert state survives container restarts via the named
|
|
# `caddy_data` and `caddy_config` volumes — restarting the container
|
|
# does NOT trigger an ACME re-issuance.
|
|
#
|
|
# Usage on the OVH host:
|
|
# cp .env.example .env # fill in placeholder values if any deploy
|
|
# # script reads them; runtime needs none.
|
|
# docker compose up -d
|
|
#
|
|
# Verify:
|
|
# curl -fsSL https://ui.suaveplan.com/health # → "ok"
|
|
# docker compose ps # status: healthy
|
|
|
|
services:
|
|
registry:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
image: suaveplan/registry:latest
|
|
container_name: suaveplan-registry
|
|
restart: unless-stopped
|
|
ports:
|
|
- "80:80"
|
|
- "443:443"
|
|
volumes:
|
|
# Static content tree — populated by the GitHub Actions deploy
|
|
# job via rsync. Read-only inside the container; Caddy never
|
|
# mutates the served files.
|
|
- /srv/registry:/srv/registry:ro
|
|
# Cert state and config cache. Persists across container
|
|
# rebuilds so Let's Encrypt isn't re-hit on every deploy.
|
|
- caddy_data:/data
|
|
- caddy_config:/config
|
|
environment:
|
|
# No secrets here. ACME contact email is baked into Caddyfile.
|
|
TZ: UTC
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "wget -q -O- --no-check-certificate https://127.0.0.1/health | grep -q '^ok$$' || exit 1"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 15s
|
|
logging:
|
|
driver: json-file
|
|
options:
|
|
max-size: "50m"
|
|
max-file: "5"
|
|
|
|
volumes:
|
|
caddy_data:
|
|
name: suaveplan_registry_caddy_data
|
|
caddy_config:
|
|
name: suaveplan_registry_caddy_config
|