- 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.
244 lines
5.9 KiB
Markdown
244 lines
5.9 KiB
Markdown
# 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-js` Dependency
|
|
- `/src/supabase/client.js` (bleibt für Referenz, wird nicht mehr verwendet)
|
|
|
|
### 3. Datenbank
|
|
|
|
**MySQL-Schema:**
|
|
- `mitarbeiter` - Mit email/password_hash statt supabase_user_id
|
|
- `kunden` - Unverändert
|
|
- `artikel` - Unverändert
|
|
- `lieferungen` - Foto-URL zeigt auf lokalen Upload-Ordner
|
|
- `ruecknahmen` - 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
|
|
|
|
1. **Umgebungsvariablen konfigurieren:**
|
|
```bash
|
|
# Backend .env anpassen
|
|
nano backend/.env
|
|
|
|
# Frontend .env anpassen
|
|
nano .env
|
|
```
|
|
|
|
2. **Docker Compose starten:**
|
|
```bash
|
|
docker-compose up -d
|
|
```
|
|
|
|
3. **Admin-Benutzer erstellen:**
|
|
```bash
|
|
docker exec -it pfandsystem-backend node scripts/create-admin.js
|
|
```
|
|
|
|
4. **Login testen:**
|
|
- URL: https://pfandsystem.backdigital.de
|
|
- Email: admin@pfandsystem.de
|
|
- Passwort: admin123 (ÄNDERN!)
|
|
|
|
### Updates deployen
|
|
|
|
```bash
|
|
./deploy.sh
|
|
```
|
|
|
|
Oder manuell:
|
|
```bash
|
|
npm run build
|
|
node fix-manifest-link.cjs
|
|
docker-compose build
|
|
docker-compose up -d
|
|
```
|
|
|
|
## 🔐 Sicherheit
|
|
|
|
### Wichtige Änderungen
|
|
|
|
1. **Passwörter:** Alle Passwörter werden mit bcrypt gehasht (10 Rounds)
|
|
2. **JWT:** Tokens sind 24h gültig
|
|
3. **File Upload:** Nur Bilder erlaubt, max 10MB
|
|
4. **CORS:** Konfiguriert für Frontend-Domain
|
|
|
|
### Zu ändern vor Produktion
|
|
|
|
- [ ] `JWT_SECRET` in 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):**
|
|
```javascript
|
|
const { data, error } = await supabase.auth.signInWithPassword({ email, password });
|
|
```
|
|
|
|
**Nachher (Custom API):**
|
|
```javascript
|
|
const data = await api.login(email, password);
|
|
```
|
|
|
|
### Daten abrufen
|
|
|
|
**Vorher (Supabase):**
|
|
```javascript
|
|
const { data } = await supabase.from('kunden').select('*');
|
|
```
|
|
|
|
**Nachher (Custom API):**
|
|
```javascript
|
|
const data = await api.getKunden();
|
|
```
|
|
|
|
### File Upload
|
|
|
|
**Vorher (Supabase Storage):**
|
|
```javascript
|
|
const { data } = await supabase.storage.from('belegfotos').upload(fileName, file);
|
|
```
|
|
|
|
**Nachher (Multer):**
|
|
```javascript
|
|
await api.createLieferung({ kunde_id, artikel_id, anzahl }, foto);
|
|
```
|
|
|
|
## 🐛 Bekannte Probleme & Lösungen
|
|
|
|
### Problem: Backend startet nicht
|
|
|
|
**Lösung:**
|
|
```bash
|
|
docker-compose logs backend
|
|
# Prüfe Datenbank-Verbindung
|
|
docker-compose restart mysql
|
|
```
|
|
|
|
### Problem: Frontend zeigt keine Daten
|
|
|
|
**Lösung:**
|
|
1. API-URL in `.env` prüfen
|
|
2. Browser-Cache leeren
|
|
3. Service Worker deregistrieren
|
|
|
|
### Problem: Login funktioniert nicht
|
|
|
|
**Lösung:**
|
|
1. Admin-Benutzer erstellen: `docker exec -it pfandsystem-backend node scripts/create-admin.js`
|
|
2. JWT_SECRET in backend/.env prüfen
|
|
3. 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
|