Bestehende App plus Gitea-Actions-Pipeline: Tag v* loest Build, Tests und Container-Neustart auf dem VPS aus. - .gitea/workflows/deploy.yml: npm ci/build/test als Gate, danach docker compose up -d --build. Die .env wird aus dem Repo-Secret DOTENV erzeugt, damit auf dem Host keine Secret-Datei gepflegt werden muss. - docker-compose.yml: fester Projektname (der CI-Job hat ein anderes Arbeitsverzeichnis als der Host), Image mit Versionstag fuer Rollback, fester Volume-Name. - README: Deployment- und Rollback-Abschnitt, Token-Rotation angepasst. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
32 lines
895 B
YAML
32 lines
895 B
YAML
# Fester Projektname: sonst leitet Compose ihn aus dem Verzeichnisnamen ab und
|
|
# der weicht im CI-Job vom Host ab.
|
|
name: busyfeed
|
|
|
|
services:
|
|
busyfeed:
|
|
image: busyfeed:${IMAGE_TAG:-latest}
|
|
build: .
|
|
container_name: busyfeed
|
|
restart: unless-stopped
|
|
env_file: .env
|
|
volumes:
|
|
- busyfeed-data:/data
|
|
networks:
|
|
- nginx-proxy-manager_default
|
|
healthcheck:
|
|
test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:8080/healthz').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"]
|
|
interval: 60s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
# Kein ports-Mapping: Der nginx proxy manager erreicht den Container ueber das
|
|
# gemeinsame Docker-Netz, es liegt nichts offen am Host.
|
|
networks:
|
|
nginx-proxy-manager_default:
|
|
external: true
|
|
|
|
volumes:
|
|
busyfeed-data:
|
|
# Fester Name, damit das Volume nicht am Projektnamen haengt.
|
|
name: busyfeed-data
|