push
This commit is contained in:
@@ -108,13 +108,148 @@ Alle API-Endpunkte sind typsicher über tRPC definiert:
|
||||
|
||||
## Deployment
|
||||
|
||||
### Admin (Vercel)
|
||||
### Admin — Docker (empfohlen für Self-Hosting)
|
||||
|
||||
**Voraussetzungen:** Docker + Docker Compose auf dem Server installiert.
|
||||
|
||||
#### Schritt 1: Repository klonen
|
||||
|
||||
```bash
|
||||
git clone <repo-url>
|
||||
cd innungsapp
|
||||
```
|
||||
|
||||
#### Schritt 2: Umgebungsvariablen anlegen
|
||||
|
||||
```bash
|
||||
cp .env.production.example .env
|
||||
```
|
||||
|
||||
Dann `.env` öffnen und **alle Werte** befüllen:
|
||||
|
||||
| Variable | Beschreibung |
|
||||
|---|---|
|
||||
| `BETTER_AUTH_SECRET` | Zufälliger String (min. 32 Zeichen) — z.B. `openssl rand -hex 32` |
|
||||
| `BETTER_AUTH_URL` | Öffentliche URL der App, z.B. `https://app.deine-innung.de` |
|
||||
| `NEXT_PUBLIC_APP_URL` | Gleicher Wert wie `BETTER_AUTH_URL` |
|
||||
| `EMAIL_FROM` | Absender-Adresse für Magic Links |
|
||||
| `SMTP_HOST` | SMTP-Server-Adresse |
|
||||
| `SMTP_PORT` | Meistens `587` (STARTTLS) oder `465` (SSL) |
|
||||
| `SMTP_USER` | SMTP-Benutzername |
|
||||
| `SMTP_PASS` | SMTP-Passwort |
|
||||
|
||||
#### Schritt 3: Container bauen und starten
|
||||
|
||||
```bash
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
Der Build dauert beim ersten Mal ~2–3 Minuten. Danach läuft die App auf **Port 3000**.
|
||||
|
||||
Logs prüfen:
|
||||
```bash
|
||||
docker compose logs -f admin
|
||||
```
|
||||
|
||||
#### Schritt 4: Superadmin anlegen (nur beim ersten Start)
|
||||
|
||||
```bash
|
||||
docker compose exec admin node -e "
|
||||
const { PrismaClient } = require('@prisma/client');
|
||||
const { scryptSync, randomBytes } = require('crypto');
|
||||
const prisma = new PrismaClient();
|
||||
// Superadmin wird via seed-superadmin.ts angelegt
|
||||
"
|
||||
```
|
||||
|
||||
Einfacher: Den Seed direkt ausführen:
|
||||
|
||||
```bash
|
||||
docker compose exec -w /app admin \
|
||||
node packages/shared/prisma/seed-superadmin.js
|
||||
```
|
||||
|
||||
> Standard-Login nach Seed: `superadmin@innungsapp.de` / `demo1234`
|
||||
> **Passwort sofort in den Einstellungen ändern!**
|
||||
|
||||
#### Schritt 5: Reverse Proxy (HTTPS)
|
||||
|
||||
Nginx-Beispielkonfiguration für `app.deine-innung.de`:
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
server_name app.deine-innung.de;
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name app.deine-innung.de;
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/app.deine-innung.de/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/app.deine-innung.de/privkey.pem;
|
||||
|
||||
client_max_body_size 20M;
|
||||
|
||||
location / {
|
||||
proxy_pass http://localhost:3000;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection 'upgrade';
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_cache_bypass $http_upgrade;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
SSL-Zertifikat mit Certbot:
|
||||
```bash
|
||||
certbot --nginx -d app.deine-innung.de
|
||||
```
|
||||
|
||||
#### Updates einspielen
|
||||
|
||||
```bash
|
||||
git pull
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
Datenbank und Uploads bleiben dabei erhalten (Docker Volumes).
|
||||
|
||||
#### Häufige Befehle
|
||||
|
||||
```bash
|
||||
# Status prüfen
|
||||
docker compose ps
|
||||
|
||||
# Logs ansehen
|
||||
docker compose logs -f admin
|
||||
|
||||
# Container neustarten
|
||||
docker compose restart admin
|
||||
|
||||
# In Container einloggen
|
||||
docker compose exec admin sh
|
||||
|
||||
# App stoppen
|
||||
docker compose down
|
||||
|
||||
# App stoppen + Daten löschen (Vorsicht!)
|
||||
docker compose down -v
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Admin — Vercel (Alternative)
|
||||
|
||||
```bash
|
||||
# Umgebungsvariablen in Vercel setzen:
|
||||
# DATABASE_URL, BETTER_AUTH_SECRET, BETTER_AUTH_URL, SMTP_*
|
||||
|
||||
# Deploy
|
||||
vercel --cwd apps/admin
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user