chore: initial scaffold (Whitelabel-Fork von Pfandsystem)
- 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.
This commit is contained in:
243
dokumentationen/MIGRATION.md
Normal file
243
dokumentationen/MIGRATION.md
Normal file
@@ -0,0 +1,243 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user