Kuglers Auth
Deployment
Produktiver Start von Kuglers Auth auf dem Homeserver.
Deployment
Kuglers Auth liegt unter:
/home/manuelkugler/websites/kuglers-auth
Die produktive Domain lautet:
https://auth.kuglers.at
Voraussetzungen
Auf dem Server müssen vorhanden sein:
| Voraussetzung | Zweck |
|---|---|
| Docker | Container-Laufzeit. |
| Docker Compose | Start von App, Postgres und Redis. |
| Caddy | Reverse Proxy für HTTPS. |
Docker-Netzwerk proxy | Gemeinsames Netzwerk zwischen Caddy und Kuglers Auth. |
| DNS A-Record | auth.kuglers.at muss auf den Server zeigen. |
.env
Die produktive .env liegt im Projektordner und wird nicht committed.
Wichtige Werte:
NODE_ENV=production
APP_URL=https://auth.kuglers.at
HOSTNAME=0.0.0.0
PORT=3000
POSTGRES_DB=kuglers_auth
POSTGRES_USER=kuglers_auth
POSTGRES_PASSWORD=<starkes-passwort>
DATABASE_URL=postgresql://kuglers_auth:<starkes-passwort>@postgres:5432/kuglers_auth?schema=public
REDIS_URL=redis://redis:6379
SESSION_TTL_DAYS=30
LOGIN_RATE_LIMIT_MAX=5
LOGIN_RATE_LIMIT_WINDOW_SECONDS=300
Secrets werden ausschließlich lokal in .env gepflegt.
Container starten
cd /home/manuelkugler/websites/kuglers-auth
docker compose up -d --build
Danach müssen alle drei Container laufen:
docker compose ps
Erwartung:
| Container | Status |
|---|---|
kuglers-auth | healthy |
kuglers-auth-postgres | healthy |
kuglers-auth-redis | healthy |
Migration ausführen
docker compose exec app npm run prisma:deploy
Die initiale Migration liegt im Repository unter:
prisma/migrations/20260602143000_initial/migration.sql
Ersten Admin erstellen
Der erste Admin wird per CLI erstellt:
docker compose exec app npm run create-admin
Der Befehl liest ADMIN_EMAIL, ADMIN_NAME und ADMIN_PASSWORD aus der .env, falls diese Werte gesetzt sind. Das Passwort wird nicht geloggt.
Healthcheck
Intern:
docker compose exec app node -e "fetch('http://127.0.0.1:3000/api/health').then(async r => console.log(r.status, await r.text()))"
Über Caddy:
curl -fsS https://auth.kuglers.at/api/health
Erwartete Antwort:
{"app":"ok","database":"ok","redis":"ok"}
Zuletzt aktualisiert: 2. Juni 2026