Page:
Deployment
Clone
1
Deployment
opencode edited this page 2026-10-20 20:10:15 +02:00
Deployment
Deployment von GutscheinNest auf einem Server mit Docker, Caddy und HTTPS.
Voraussetzungen
- Docker mit Compose-Plugin auf dem Zielserver
- Domain mit A/AAAA-Record auf die Server-IP
- Offene Ports 80/443 (plus SSH für die Verwaltung)
- Port 3000 wird nicht geöffnet: Die App ist nur im internen Compose-Netz erreichbar, nach außen geht es ausschließlich über den Caddy-Reverse-Proxy (HTTPS).
Dateien auf dem Zielserver
Benötigt werden nur drei Dateien (kein Quellcode, kein lokaler Build):
docker-compose.deploy.ymlCaddyfile.env(aus.env.examplekopiert und ausgefüllt)
.env ausfüllen (Pflichtwerte)
| Variable | Beispiel | Wozu |
|---|---|---|
DOMAIN |
gutscheine.example.de |
Öffentliche Domain für Caddy/TLS |
APP_URL |
https://gutscheine.example.de |
Exakte öffentliche Adresse (OIDC-Redirects, Einladungs-Links) |
APP_USER / APP_PASSWORD_HASH |
haushalt / bcrypt-Hash |
Erster Server-Admin |
SESSION_SECRET / SETTINGS_ENCRYPTION_KEY / CRON_SECRET |
je 32+ Zufallszeichen | Sessions, Verschlüsselung, Cron-Schutz |
Optional: SMTP_* (Mail), TELEGRAM_BOT_TOKEN (Telegram), ALLOW_PASSWORD_LOGIN, TZ.
Den bcrypt-Hash für das Admin-Passwort erzeugt z. B.:
node -e "console.log(require('bcryptjs').hashSync('sicheres-passwort', 10))"
Starten
docker login gitea.lokcal.de -u <gitea-benutzer>
docker compose -f docker-compose.deploy.yml pull
docker compose -f docker-compose.deploy.yml up -d
Verwendet wird das öffentliche Image gitea.lokcal.de/loki/gutscheintracker:latest, das bei jedem Push auf main per Gitea-Action frisch gebaut wird (nach Tests, Typcheck und Build). Für reproduzierbare Deployments einen Digest pinnen (in Gitea unter → Pakete → container/gutscheintracker).
Prüfen
https://<DOMAIN>/loginlädt mit gültigem Zertifikat,http://leitet auf HTTPS um.docker exec <container> id→uid=10001(app)(rootless).- Einladungs-Links und Cron-Läufe funktionieren (Test-Mail in den Einstellungen).
Lokal testen geht mit derselben Datei: DOMAIN=localhost in .env (dann ohne TLS, Caddy macht automatisch HTTP).
Update
docker compose -f docker-compose.deploy.yml pull
docker compose -f docker-compose.deploy.yml up -d
Weiter: SSO mit Authentik, Backup und Restore, Fehlerbehebung