- Source-Copy von /root/entwicklung/pfandsystem - docker-compose.yml umgeschrieben: pfandsystem-demo-* Container, Ports 3308/8083/3003 (alle localhost) - Traefik-Label fuer pfandsystem.dockly.de - Erweitertes Multi-Tenant-Schema (tenants, tenant_id auf allen Tabellen) - Neue Tabellen: kunden_bilder, geraete - Neue Spalten: kunden.anlieferungshinweis, kunden.lieferzeit_bis - Rollen: superadmin, admin, user, fahrer - .env.example + README Code-Refactor (Tailwind, Multi-Tenant-Middleware, Erweiterungen) folgt.
329 lines
6.7 KiB
Markdown
329 lines
6.7 KiB
Markdown
# 🚀 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:**
|