Files
pfandsystem-demo/dokumentationen/DEPLOYMENT_CHECKLIST.md

329 lines
6.7 KiB
Markdown
Raw Normal View History

# 🚀 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 / <dein-passwort>
- 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<password> 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 <previous-commit>
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:**