- 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.
5.9 KiB
5.9 KiB
Migration von Supabase zu MySQL - Zusammenfassung
✅ Durchgeführte Änderungen
1. Backend (Node.js/Express)
Neu erstellt:
/backend/server.js- Hauptserver mit Express/backend/config/database.js- MySQL-Verbindung/backend/middleware/auth.js- JWT-Authentifizierung/backend/middleware/upload.js- Multer File-Upload/backend/routes/- Alle API-Routen (auth, kunden, artikel, lieferungen, ruecknahmen, mitarbeiter)/backend/database/schema.sql- MySQL-Schema (konvertiert von PostgreSQL)/backend/scripts/create-admin.js- Admin-Benutzer erstellen
Features:
- ✅ JWT-basierte Authentifizierung (ersetzt Supabase Auth)
- ✅ Bcrypt Passwort-Hashing
- ✅ Rollen-basierte Zugriffskontrolle (user/admin)
- ✅ File-Upload mit Multer (ersetzt S3/Supabase Storage)
- ✅ Resend Email-Integration
- ✅ MySQL2 mit Connection Pooling
2. Frontend (React)
Geänderte Dateien:
/src/api/client.js- Neuer API-Client (ersetzt Supabase Client)/src/App.jsx- Auth-Flow angepasst/src/components/Auth/Login.jsx- Login mit neuem API/src/components/Auth/Logout.jsx- Logout angepasst/src/components/KundenVerwaltung.jsx- API-Calls angepasst/src/components/MitarbeiterVerwaltung.jsx- API-Calls + Passwort-Feld/src/components/Eingabe/VorgangForm.jsx- File-Upload angepasst/src/components/Dashboard/VorgangsListe.jsx- Datenstruktur angepasst/src/components/Dashboard/AdminDashboard.jsx- API-Calls angepasst
Entfernt:
@supabase/supabase-jsDependency/src/supabase/client.js(bleibt für Referenz, wird nicht mehr verwendet)
3. Datenbank
MySQL-Schema:
mitarbeiter- Mit email/password_hash statt supabase_user_idkunden- Unverändertartikel- Unverändertlieferungen- Foto-URL zeigt auf lokalen Upload-Ordnerruecknahmen- Foto-URL zeigt auf lokalen Upload-Ordner
Wichtige Änderungen:
- UUID → CHAR(36) mit UUID()
- SERIAL → INT AUTO_INCREMENT
- timestamp with time zone → TIMESTAMP
- Foreign Keys auf auth.users entfernt
4. Docker & Deployment
docker-compose.yml:
- MySQL 8.0 Container
- phpMyAdmin Container
- Backend API Container
- Frontend nginx Container
- Volumes für Datenbank und Uploads
nginx.conf:
- Proxy für
/api/→ Backend - Proxy für
/uploads/→ Backend - HTTPS-Konfiguration beibehalten
- Let's Encrypt Integration
5. Umgebungsvariablen
Frontend (.env):
VITE_API_URL=https://pfandsystem.backdigital.de/api
Backend (.env):
DB_HOST=mysql
DB_PORT=3306
DB_USER=pfandsystem
DB_PASSWORD=***
DB_NAME=pfandsystem
JWT_SECRET=***
RESEND_API_KEY=re_6BE6Hv6U_H7ggkAT4ApbiSZ5SCo2Cf1qA
🚀 Deployment-Anleitung
Erstmaliges Setup
-
Umgebungsvariablen konfigurieren:
# Backend .env anpassen nano backend/.env # Frontend .env anpassen nano .env -
Docker Compose starten:
docker-compose up -d -
Admin-Benutzer erstellen:
docker exec -it pfandsystem-backend node scripts/create-admin.js -
Login testen:
- URL: https://pfandsystem.backdigital.de
- Email: admin@pfandsystem.de
- Passwort: admin123 (ÄNDERN!)
Updates deployen
./deploy.sh
Oder manuell:
npm run build
node fix-manifest-link.cjs
docker-compose build
docker-compose up -d
🔐 Sicherheit
Wichtige Änderungen
- Passwörter: Alle Passwörter werden mit bcrypt gehasht (10 Rounds)
- JWT: Tokens sind 24h gültig
- File Upload: Nur Bilder erlaubt, max 10MB
- CORS: Konfiguriert für Frontend-Domain
Zu ändern vor Produktion
JWT_SECRETin backend/.env- MySQL Root-Passwort in docker-compose.yml
- MySQL User-Passwort in docker-compose.yml und backend/.env
- Admin-Passwort nach erstem Login
- HTTPS-Zertifikate prüfen
📊 API-Änderungen
Authentifizierung
Vorher (Supabase):
const { data, error } = await supabase.auth.signInWithPassword({ email, password });
Nachher (Custom API):
const data = await api.login(email, password);
Daten abrufen
Vorher (Supabase):
const { data } = await supabase.from('kunden').select('*');
Nachher (Custom API):
const data = await api.getKunden();
File Upload
Vorher (Supabase Storage):
const { data } = await supabase.storage.from('belegfotos').upload(fileName, file);
Nachher (Multer):
await api.createLieferung({ kunde_id, artikel_id, anzahl }, foto);
🐛 Bekannte Probleme & Lösungen
Problem: Backend startet nicht
Lösung:
docker-compose logs backend
# Prüfe Datenbank-Verbindung
docker-compose restart mysql
Problem: Frontend zeigt keine Daten
Lösung:
- API-URL in
.envprüfen - Browser-Cache leeren
- Service Worker deregistrieren
Problem: Login funktioniert nicht
Lösung:
- Admin-Benutzer erstellen:
docker exec -it pfandsystem-backend node scripts/create-admin.js - JWT_SECRET in backend/.env prüfen
- Backend-Logs prüfen:
docker-compose logs backend
📝 Nächste Schritte
Sofort
- Alle Passwörter ändern
- Admin-Login testen
- Daten aus Supabase exportieren und importieren
- Funktionstest aller Features
Optional
- Email-Benachrichtigungen mit Resend testen
- Backup-Strategie einrichten
- Monitoring einrichten
- CI/CD Pipeline aufsetzen
📧 Support
Bei Fragen zur Migration:
- Backend-Logs:
docker-compose logs -f backend - Frontend-Logs: Browser DevTools Console
- Datenbank: phpMyAdmin auf http://localhost:8081
🎉 Fertig!
Die Migration ist abgeschlossen. Das System ist jetzt vollständig unabhängig von Supabase und läuft mit:
- ✅ MySQL Datenbank
- ✅ Node.js/Express Backend
- ✅ React Frontend
- ✅ Docker Compose
- ✅ HTTPS/SSL
- ✅ phpMyAdmin
- ✅ Lokaler File Storage