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:

VoraussetzungZweck
DockerContainer-Laufzeit.
Docker ComposeStart von App, Postgres und Redis.
CaddyReverse Proxy für HTTPS.
Docker-Netzwerk proxyGemeinsames Netzwerk zwischen Caddy und Kuglers Auth.
DNS A-Recordauth.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:

ContainerStatus
kuglers-authhealthy
kuglers-auth-postgreshealthy
kuglers-auth-redishealthy

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