Files
ksan.dev/docker-compose.yaml
T
ksan 4eef81fdfc
Deploy / check (push) Successful in 9m45s
Deploy / build (push) Failing after 4s
Deploy / deploy (push) Has been skipped
Add Gitea Actions CI/CD pipeline
Build and push images to the private registry, then deploy to the VPS by commit SHA with health check and rollback.
2026-08-20 15:16:37 +02:00

40 lines
1.4 KiB
YAML

services:
ksan-dev:
# Built and pushed by CI; deployed by tag, never by :latest, so a rollback
# is a re-run of `up -d` with an older tag instead of a rebuild.
image: ${IMAGE_NAME:-git.ksan.dev/ksan/ksan.dev}:${IMAGE_TAG:-latest}
container_name: ksan-dev
restart: unless-stopped
env_file:
- .env
networks:
- frontend
# Shared VPS: keep one site's leak from taking the box down with it.
mem_limit: 512m
cpus: 0.5
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
# `/` 307-redirects to the default locale, so probe the locale path directly.
healthcheck:
test: ["CMD", "wget", "-q", "-O", "/dev/null", "http://127.0.0.1:3000/en"]
interval: 30s
timeout: 5s
retries: 3
start_period: 15s
labels:
- traefik.enable=true
- traefik.http.routers.ksan-dev-http.rule=Host(`${DOMAIN}`) || Host(`www.${DOMAIN}`)
- traefik.http.routers.ksan-dev-http.entrypoints=web
- traefik.http.routers.ksan-dev-https.tls=true
- traefik.http.routers.ksan-dev-https.tls.certresolver=cloudflare
- traefik.http.routers.ksan-dev-https.entrypoints=websecure
- traefik.http.routers.ksan-dev-https.rule=Host(`${DOMAIN}`) || Host(`www.${DOMAIN}`)
- traefik.http.services.ksan-dev.loadbalancer.server.port=3000
networks:
frontend:
external: true