# 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