Files
2026-04-16 13:32:32 +02:00

192 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AZA Go-Live Runbook (aza-medwork.ch)
Schritte, um AZA vom lokalen Entwicklungsmodus auf den Produktionsserver zu bringen.
---
# Phase 1 Server-Vorbereitung
## 1) Server-Anforderungen
- Linux VPS (Ubuntu 22.04 empfohlen)
- Docker + Docker Compose installiert
- Ports 80 und 443 offen
- DNS A-Record: aza-medwork.ch → Server-IP
Pruefen:
- `ping aza-medwork.ch` → Server-IP
---
# Phase 2 AZA-API deployen
## 1) Projekt hochladen
Gesamtes AZA-Projekt auf den Server kopieren.
## 2) Umgebung vorbereiten
```
cd deploy
cp .env.example .env
```
In `.env` setzen:
```
MEDWORK_API_TOKENS=NEUER_TOKEN,ALTER_TOKEN
STRIPE_SECRET_KEY=sk_live_...
STRIPE_WEBHOOK_SECRET=whsec_...
STRIPE_SUCCESS_URL=https://aza-medwork.ch/billing/success?session_id={CHECKOUT_SESSION_ID}
STRIPE_CANCEL_URL=https://aza-medwork.ch/billing/cancel
STRIPE_PORTAL_RETURN_URL=https://aza-medwork.ch/
AZA_ADMIN_TOKEN=...
AZA_LOG_LEVEL=INFO
AZA_GRACE_DAYS=0
ACME_EMAIL=info@aza-medwork.ch
AZA_DOMAIN=aza-medwork.ch
```
WICHTIG:
- Starke Zufalls-Tokens verwenden.
- KEINE Entwickler-Tokens wiederverwenden.
## 3) HTTPS aktivieren
`AZA_DOMAIN=aza-medwork.ch` in `.env` setzen (bereits vorbereitet).
Caddy holt sich automatisch ein Let's-Encrypt-Zertifikat.
## 4) Container starten
```
docker compose up -d --build
docker compose ps
```
---
# Phase 3 Verifikation
## 1) Health-Check
`https://aza-medwork.ch/health``{"ok": true}`
## 2) Versions-Check
`https://aza-medwork.ch/version``{"name":"AZA",...}`
## 3) Smoke-Test
```
export MEDWORK_API_TOKENS=NEUER_TOKEN
bash smoke_test.sh https://aza-medwork.ch
```
Erwartung:
- /health OK
- /license/status 401 ohne Token
- Gueltige JSON-Antwort mit Token
## 4) Website pruefen
- `https://aza-medwork.ch/web/index.html` → Landing-Page mit Pricing
- `https://aza-medwork.ch/web/download.html` → Download-Seite
---
# Phase 4 Stripe konfigurieren
## 1) Stripe Dashboard: Produkte anlegen
Im Stripe Dashboard unter Products zwei Preise anlegen:
- **AZA Basic**: `aza_basic_monthly` CHF 59/Monat, `aza_basic_yearly` CHF 590/Jahr
- **AZA Team**: `aza_team_monthly` CHF 89/Monat, `aza_team_yearly` CHF 890/Jahr
## 2) Webhook einrichten
Developers → Webhooks → Endpoint hinzufuegen
URL: `https://aza-medwork.ch/stripe/webhook`
Events:
- `checkout.session.completed`
- `customer.subscription.updated`
- `customer.subscription.deleted`
## 3) Signing-Secret uebernehmen
In `deploy/.env` setzen:
```
STRIPE_WEBHOOK_SECRET=whsec_...
```
Neustart: `docker compose up -d`
## 4) Test-Event senden
Stripe → "Send test webhook" → Erwartung: 200 OK
---
# Phase 5 Kauf-Flow testen
## 1) Landing-Page oeffnen
`https://aza-medwork.ch/web/index.html`
## 2) "Abonnement starten" klicken
→ Stripe Checkout oeffnet sich
## 3) Test-Kauf abschliessen (Stripe-Testkarte)
→ Weiterleitung zu Success-Seite mit Download-Button
## 4) Installer herunterladen und installieren
→ App startet, Lizenz wird automatisch geprueft
---
# Phase 6 Desktop-Client konfigurieren
## 1) Client-Konfiguration
Im Installer oder beim ersten Start:
```
MEDWORK_BACKEND_URL=https://aza-medwork.ch
```
## 2) Test auf neuem Rechner
- Installieren → Starten → Lizenzstatus: ACTIVE
## 3) Token-Rotation abschliessen
Nachdem alle Clients aktualisiert:
```
MEDWORK_API_TOKENS=NEUER_TOKEN
docker compose up -d
```
---
# Phase 7 Billing-Portal testen
Im Desktop-Client: "Abonnement" klicken
→ Browser oeffnet Stripe-Portal
→ Nach Schliessen: Rueckkehr zu aza-medwork.ch
---
# Phase 8 Rollback-Plan
Bei Problemen:
1. `docker compose logs`
2. Vorherige `.env` wiederherstellen (ALTER_TOKEN behalten)
3. `docker compose up -d`
---
# Produktions-Checkliste
- [ ] HTTPS funktioniert
- [ ] /health OK
- [ ] /version OK
- [ ] Landing-Page erreichbar
- [ ] Stripe-Checkout funktioniert
- [ ] Success-Seite zeigt Download-Link
- [ ] /license/status funktioniert
- [ ] Device-Enforcement getestet
- [ ] Billing-Portal funktioniert
- [ ] Token-Rotation verifiziert
- [ ] Admin-Endpoints gesichert