# 🚀 Deployment Checklist - Pfandsystem ## Pre-Deployment ### 1. Umgebungsvariablen konfigurieren - [ ] **Backend `.env` erstellen:** ```bash cp backend/.env.example backend/.env nano backend/.env ``` Zu ändern: - [ ] `DB_PASSWORD` - Sicheres MySQL-Passwort - [ ] `JWT_SECRET` - Mindestens 32 Zeichen, zufällig generiert - [ ] `RESEND_API_KEY` - Prüfen ob korrekt - [ ] **Frontend `.env` prüfen:** ```bash nano .env ``` Zu prüfen: - [ ] `VITE_API_URL` - Korrekte Domain (https://pfandsystem.backdigital.de/api) - [ ] **docker-compose.yml anpassen:** ```bash nano docker-compose.yml ``` Zu ändern: - [ ] `MYSQL_ROOT_PASSWORD` - [ ] `MYSQL_PASSWORD` (muss mit backend/.env übereinstimmen) ### 2. SSL/TLS Zertifikate - [ ] Zertifikate vorhanden in `/root/certbot/conf/` - [ ] Zertifikate gültig (nicht abgelaufen) - [ ] Domain korrekt konfiguriert (pfandsystem.backdigital.de) ### 3. Build & Test - [ ] Frontend Dependencies installieren: ```bash npm install ``` - [ ] Frontend bauen: ```bash npm run build node fix-manifest-link.cjs ``` - [ ] Backend Dependencies installieren: ```bash cd backend && npm install && cd .. ``` ## Deployment ### 4. Docker Compose starten - [ ] Alte Container stoppen (falls vorhanden): ```bash docker-compose down ``` - [ ] Volumes prüfen (optional - nur bei Neuinstallation): ```bash docker volume ls # Bei Bedarf alte Volumes löschen: # docker volume rm pfandsystem_mysql_data ``` - [ ] Container starten: ```bash docker-compose up -d ``` - [ ] Container-Status prüfen: ```bash docker-compose ps ``` Alle 4 Container sollten "Up" sein: - pfandsystem-mysql - pfandsystem-phpmyadmin - pfandsystem-backend - pfandsystem-frontend ### 5. Logs prüfen - [ ] Backend-Logs prüfen: ```bash docker-compose logs backend ``` Erwartete Ausgabe: - ✅ MySQL Datenbankverbindung erfolgreich - 🚀 Backend-Server läuft auf Port 3001 - [ ] MySQL-Logs prüfen: ```bash docker-compose logs mysql ``` Erwartete Ausgabe: - ready for connections ### 6. Datenbank initialisieren - [ ] Admin-Benutzer erstellen: ```bash docker exec -it pfandsystem-backend node scripts/create-admin.js ``` Notiere: - Email: admin@pfandsystem.de - Passwort: admin123 (ÄNDERN!) - [ ] Optional - Beispieldaten prüfen (via phpMyAdmin): - URL: http://localhost:8081 - Login: pfandsystem / - Prüfe Tabellen: mitarbeiter, artikel ## Post-Deployment Tests ### 7. Frontend-Tests - [ ] Frontend erreichbar: https://pfandsystem.backdigital.de - [ ] Login-Seite wird angezeigt - [ ] Login mit Admin-Credentials funktioniert - [ ] Dashboard wird angezeigt - [ ] PWA-Manifest lädt (DevTools → Application → Manifest) - [ ] Service Worker registriert (DevTools → Application → Service Workers) - [ ] Icons werden angezeigt ### 8. Backend-Tests - [ ] Health Check: ```bash curl http://localhost:3001/health ``` Erwartete Antwort: ```json {"status":"OK","timestamp":"..."} ``` - [ ] Login API: ```bash curl -X POST http://localhost:3001/api/auth/login \ -H "Content-Type: application/json" \ -d '{"email":"admin@pfandsystem.de","password":"admin123"}' ``` Erwartete Antwort: ```json {"token":"...","user":{...}} ``` ### 9. Funktions-Tests - [ ] **Kundenverwaltung:** - Neuen Kunden anlegen - Kunde bearbeiten - Kunde löschen - [ ] **Artikelverwaltung:** - Neuen Artikel anlegen - Artikel bearbeiten - Artikel löschen - [ ] **Lieferungen:** - Neue Lieferung erfassen - Mit Foto hochladen - Foto wird angezeigt - [ ] **Rücknahmen:** - Neue Rücknahme erfassen - Mit Foto hochladen - Foto wird angezeigt - [ ] **Mitarbeiterverwaltung (Admin):** - Neuen Mitarbeiter anlegen - Rolle ändern - Mit neuem Mitarbeiter einloggen ### 10. Sicherheits-Tests - [ ] Admin-Passwort geändert (nicht mehr admin123) - [ ] HTTPS funktioniert (kein Mixed Content) - [ ] Nicht-authentifizierte API-Calls werden abgelehnt - [ ] User kann keine Admin-Funktionen ausführen - [ ] File-Upload nur für Bilder möglich - [ ] File-Upload-Größe limitiert (max 10MB) ## Daten-Migration (falls erforderlich) ### 11. Daten aus Supabase exportieren - [ ] Kunden exportieren (CSV/JSON) - [ ] Artikel exportieren - [ ] Mitarbeiter exportieren - [ ] Lieferungen exportieren - [ ] Rücknahmen exportieren ### 12. Daten in MySQL importieren - [ ] Via phpMyAdmin (http://localhost:8081) - [ ] Oder via SQL-Script: ```bash docker exec -i pfandsystem-mysql mysql -u pfandsystem -p pfandsystem < import.sql ``` - [ ] Daten-Integrität prüfen: - Anzahl Kunden korrekt - Anzahl Artikel korrekt - Foreign Keys korrekt ## Monitoring & Backup ### 13. Backup einrichten - [ ] Datenbank-Backup-Script erstellen: ```bash #!/bin/bash DATE=$(date +%Y%m%d_%H%M%S) docker exec pfandsystem-mysql mysqldump -u pfandsystem -p pfandsystem > backup_$DATE.sql ``` - [ ] Cronjob für tägliches Backup: ```bash crontab -e # Täglich um 2 Uhr 0 2 * * * /root/backup.sh ``` ### 14. Monitoring - [ ] Container-Status überwachen: ```bash docker-compose ps ``` - [ ] Logs regelmäßig prüfen: ```bash docker-compose logs --tail=100 ``` - [ ] Disk Space prüfen: ```bash df -h docker system df ``` ## Troubleshooting ### Häufige Probleme **Backend startet nicht:** ```bash docker-compose logs backend # Prüfe Datenbank-Verbindung docker-compose restart mysql ``` **Frontend zeigt keine Daten:** 1. Browser-Cache leeren (Strg+Shift+R) 2. Service Worker deregistrieren (DevTools → Application) 3. API-URL in .env prüfen **Datenbank-Verbindung fehlgeschlagen:** ```bash # MySQL-Logs prüfen docker-compose logs mysql # In MySQL-Container einloggen docker exec -it pfandsystem-mysql mysql -u pfandsystem -p # Verbindung testen docker exec -it pfandsystem-backend node -e "require('./config/database.js')" ``` **Upload funktioniert nicht:** ```bash # Prüfe Upload-Verzeichnis docker exec -it pfandsystem-backend ls -la /app/uploads # Prüfe Berechtigungen docker exec -it pfandsystem-backend chmod 777 /app/uploads ``` ## Rollback-Plan Falls Probleme auftreten: 1. **Container stoppen:** ```bash docker-compose down ``` 2. **Alte Version wiederherstellen:** ```bash git checkout docker-compose up -d ``` 3. **Datenbank-Backup wiederherstellen:** ```bash docker exec -i pfandsystem-mysql mysql -u pfandsystem -p pfandsystem < backup.sql ``` ## Abschluss - [ ] Alle Tests erfolgreich - [ ] Dokumentation aktualisiert - [ ] Team informiert - [ ] Backup-Strategie aktiv - [ ] Monitoring läuft --- **Deployment abgeschlossen am:** _________________ **Durchgeführt von:** _________________ **Notizen:**