feat: central services mit traefik deployen

This commit is contained in:
2026-08-02 17:21:20 +02:00
parent 8b8e0c97d3
commit 3755b4136a
5 changed files with 181 additions and 22 deletions

View File

@@ -7,7 +7,7 @@ Eigenständiger Stack für zentrale FEDEO-Dienste. Neben Push können Selfhost-I
- `apps/api`: Fastify API für Admin-Dashboard und Selfhost-Instanzen
- `apps/admin`: Nuxt Admin Dashboard mit Nuxt UI
- `packages/db`: Drizzle Schema und Migrationen für PostgreSQL
- `docker-compose.yml`: lokaler Stack aus Postgres, API und Admin
- `docker-compose.yml`: produktiver Stack aus Traefik, Postgres, API und Admin
Provider-Schlüssel wie `OPENAI_API_KEY` und die GoCardless-Zugangsdaten liegen ausschließlich in diesem zentralen Stack. Selfhost-Instanzen erhalten nur Instanz-ID und Instanzschlüssel.
@@ -22,22 +22,48 @@ npm run dev:api
npm run dev:admin
```
Für den dauerhaften Betrieb:
```bash
cp .env.example .env
# .env mit sicheren Zugangsdaten und Provider-Schlüsseln befüllen
docker compose up -d --build
```
Der API-Container wendet Datenbankmigrationen vor jedem Start automatisch an. PostgreSQL-Daten liegen im Volume `push_postgres_data`. Für ein öffentliches Deployment müssen API und Admin hinter einem TLS-Reverse-Proxy betrieben und `PUBLIC_API_BASE_URL` auf die öffentliche API-Adresse gesetzt werden.
Standardports:
Lokale Entwicklungsports:
- API: `http://localhost:4020`
- Admin: `http://localhost:3000` lokal oder `http://localhost:3020` über Docker Compose
- Admin: `http://localhost:3000`
- Postgres: `localhost:5442`
## Öffentlicher Betrieb mit Traefik
Voraussetzungen:
- Docker Engine mit Docker-Compose-Plugin
- freie Ports `80` und `443`
- A- beziehungsweise AAAA-Records für API- und Admin-Domain auf den Server
Der geführte Erststart erzeugt sichere lokale Schlüssel, bereitet den Lets-Encrypt-Speicher vor und kann den Stack direkt starten:
```bash
cd push-server
chmod +x scripts/setup.sh
./scripts/setup.sh --start
```
Standardmäßig werden `services.fedeo.de` für die API und `services-admin.fedeo.de` für das Admin-Dashboard vorgeschlagen. Anschließend müssen die zentralen Provider-Zugangsdaten in `.env` gepflegt werden:
```env
OPENAI_API_KEY=...
GOCARDLESS_SECRET_ID=...
GOCARDLESS_SECRET_KEY=...
```
Ein Neustart nach Änderungen erfolgt mit:
```bash
docker compose up -d
docker compose ps
docker compose logs -f api
```
Traefik leitet HTTP automatisch auf HTTPS um und bezieht Zertifikate per Lets Encrypt TLS-Challenge. PostgreSQL besitzt keinen Host-Port und ist nur im internen Docker-Netz erreichbar. API und Admin werden ebenfalls nicht direkt über Host-Ports veröffentlicht.
Der API-Container wendet Datenbankmigrationen vor jedem Start automatisch an. PostgreSQL-Daten liegen im Volume `push_postgres_data`; Lets-Encrypt-Daten liegen unter `traefik/letsencrypt`.
## Admin-Zugang
Das Dashboard nutzt den Wert aus `ADMIN_TOKEN`. Der Token wird im Browser nur lokal gespeichert und als `Authorization: Bearer ...` an die API gesendet.