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:
christian
2026-05-26 12:39:17 +00:00
commit d86c898455
82 changed files with 15771 additions and 0 deletions

View File

@@ -0,0 +1,489 @@
# 🔄 Migration & Setup: Neue Verzeichnisstruktur
## 📁 Neue Struktur
```
/root/
├── entwicklung/
│ └── pfandsystem/ # Dev-Version (verschoben von /root)
├── livesysteme/
│ └── borbaecker/ # Live-Version (neu)
└── backups/
├── entwicklung/
│ └── pfandsystem/ # Backups der Dev-Version
└── livesysteme/
└── borbaecker/ # Backups der Live-Version
```
---
## 🚀 Schritt 1: Verzeichnisse erstellen
```bash
# Hauptverzeichnisse
mkdir -p /root/entwicklung
mkdir -p /root/livesysteme
mkdir -p /root/backups/entwicklung
mkdir -p /root/backups/livesysteme
echo "✅ Verzeichnisstruktur erstellt"
```
---
## 🔄 Schritt 2: Dev-Version verschieben
```bash
# Backend stoppen
pkill -f "node.*server.js"
# Docker Container stoppen
cd /root
docker compose down
# Verschieben (außer bestimmte Dateien)
rsync -av --progress \
--exclude 'node_modules' \
--exclude '.git' \
--exclude 'dist' \
/root/ /root/entwicklung/pfandsystem/
# Git-Verzeichnis verschieben
mv /root/.git /root/entwicklung/pfandsystem/.git
# Alte Dateien aufräumen (nach Bestätigung)
# rm -rf /root/backend /root/src /root/public ...
echo "✅ Dev-Version nach /root/entwicklung/pfandsystem verschoben"
```
---
## 🆕 Schritt 3: Live-Version erstellen
```bash
cd /root/livesysteme/borbaecker
# Git klonen
git clone ssh://git@49.13.154.75:2244/christian/pfandsystem.git .
# Auf main branch
git checkout main
echo "✅ Live-Version in /root/livesysteme/borbaecker erstellt"
```
---
## ⚙️ Schritt 4: Konfigurationen anpassen
### **Dev-Version** (`/root/entwicklung/pfandsystem`)
#### Frontend `.env`:
```bash
cat > /root/entwicklung/pfandsystem/.env << 'EOF'
VITE_API_URL=https://pfandsystem.backdigital.de/api
EOF
```
#### Backend `.env`:
```bash
cat > /root/entwicklung/pfandsystem/backend/.env << 'EOF'
DB_HOST=localhost
DB_PORT=3306
DB_USER=pfandsystem
DB_PASSWORD=pfandsystem_secure_password
DB_NAME=pfandsystem
JWT_SECRET=your_very_secure_jwt_secret_key_change_this_in_production
PORT=3001
NODE_ENV=development
RESEND_API_KEY=re_6BE6Hv6U_H7ggkAT4ApbiSZ5SCo2Cf1qA
UPLOAD_DIR=/root/entwicklung/pfandsystem/backend/uploads
MAX_FILE_SIZE=10485760
EOF
```
#### Docker-Compose anpassen:
```bash
# Container-Namen mit -dev suffix
sed -i 's/pfandsystem-/pfandsystem-dev-/g' /root/entwicklung/pfandsystem/docker-compose.yml
```
---
### **Live-Version** (`/root/livesysteme/borbaecker`)
#### Frontend `.env`:
```bash
cat > /root/livesysteme/borbaecker/.env << 'EOF'
VITE_API_URL=https://borbaecker.de/api
EOF
```
#### Backend `.env`:
```bash
cat > /root/livesysteme/borbaecker/backend/.env << 'EOF'
DB_HOST=localhost
DB_PORT=3307
DB_USER=borbaecker
DB_PASSWORD=NEUES_SICHERES_PASSWORT_HIER
DB_NAME=borbaecker
JWT_SECRET=NEUER_JWT_SECRET_HIER
PORT=3002
NODE_ENV=production
RESEND_API_KEY=re_6BE6Hv6U_H7ggkAT4ApbiSZ5SCo2Cf1qA
UPLOAD_DIR=/root/livesysteme/borbaecker/backend/uploads
MAX_FILE_SIZE=10485760
EOF
```
#### Docker-Compose:
```bash
cat > /root/livesysteme/borbaecker/docker-compose.yml << 'EOF'
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: borbaecker-mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: NEUES_ROOT_PASSWORT
MYSQL_DATABASE: borbaecker
MYSQL_USER: borbaecker
MYSQL_PASSWORD: NEUES_SICHERES_PASSWORT
volumes:
- mysql_data:/var/lib/mysql
ports:
- "3307:3306"
networks:
- borbaecker-network
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
phpmyadmin:
image: phpmyadmin:latest
container_name: borbaecker-phpmyadmin
restart: unless-stopped
environment:
PMA_HOST: mysql
PMA_PORT: 3306
ports:
- "8082:80"
networks:
- borbaecker-network
depends_on:
- mysql
frontend:
image: nginx:1.25-alpine
container_name: borbaecker-frontend
restart: unless-stopped
volumes:
- ./dist:/usr/share/nginx/html:ro
networks:
- borbaecker-network
labels:
- "traefik.enable=true"
- "traefik.http.routers.borbaecker.rule=Host(`borbaecker.de`)"
- "traefik.http.routers.borbaecker.entrypoints=web,websecure"
- "traefik.http.routers.borbaecker.tls=true"
- "traefik.http.routers.borbaecker.tls.certresolver=letsencrypt"
- "traefik.http.services.borbaecker.loadbalancer.server.port=80"
volumes:
mysql_data:
driver: local
networks:
borbaecker-network:
driver: bridge
EOF
```
---
## 🔧 Schritt 5: Traefik-Configs anpassen
### Dev-Version:
```bash
cat > /root/traefik/dynamic/pfandsystem-dev.yml << 'EOF'
http:
routers:
pfandsystem-dev-api:
rule: "Host(`pfandsystem.backdigital.de`) && PathPrefix(`/api`)"
service: pfandsystem-dev-api
entryPoints:
- web
- websecure
tls:
certResolver: letsencrypt
priority: 100
pfandsystem-dev-uploads:
rule: "Host(`pfandsystem.backdigital.de`) && PathPrefix(`/uploads`)"
service: pfandsystem-dev-api
entryPoints:
- web
- websecure
tls:
certResolver: letsencrypt
priority: 100
services:
pfandsystem-dev-api:
loadBalancer:
servers:
- url: "http://172.17.0.1:3001"
EOF
```
### Live-Version:
```bash
cat > /root/traefik/dynamic/borbaecker.yml << 'EOF'
http:
routers:
borbaecker-api:
rule: "Host(`borbaecker.de`) && PathPrefix(`/api`)"
service: borbaecker-api
entryPoints:
- web
- websecure
tls:
certResolver: letsencrypt
priority: 100
borbaecker-uploads:
rule: "Host(`borbaecker.de`) && PathPrefix(`/uploads`)"
service: borbaecker-api
entryPoints:
- web
- websecure
tls:
certResolver: letsencrypt
priority: 100
services:
borbaecker-api:
loadBalancer:
servers:
- url: "http://172.17.0.1:3002"
EOF
```
---
## 💾 Schritt 6: Backup-Scripte erstellen
### **Dev-Backup-Script:**
```bash
cat > /root/entwicklung/pfandsystem/backup-dev.sh << 'EOF'
#!/bin/bash
# Backup-Verzeichnis
BACKUP_DIR="/root/backups/entwicklung/pfandsystem"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME="backup_${TIMESTAMP}"
# Backup erstellen
mkdir -p "${BACKUP_DIR}/${BACKUP_NAME}"
# Datenbank-Backup
docker exec pfandsystem-dev-mysql mysqldump -upfandsystem -ppfandsystem_secure_password pfandsystem > "${BACKUP_DIR}/${BACKUP_NAME}/database.sql"
# Uploads-Backup
cp -r /root/entwicklung/pfandsystem/backend/uploads "${BACKUP_DIR}/${BACKUP_NAME}/"
# .env Dateien
cp /root/entwicklung/pfandsystem/.env "${BACKUP_DIR}/${BACKUP_NAME}/frontend.env"
cp /root/entwicklung/pfandsystem/backend/.env "${BACKUP_DIR}/${BACKUP_NAME}/backend.env"
# Komprimieren
cd "${BACKUP_DIR}"
tar -czf "${BACKUP_NAME}.tar.gz" "${BACKUP_NAME}"
rm -rf "${BACKUP_NAME}"
# Alte Backups löschen (älter als 7 Tage)
find "${BACKUP_DIR}" -name "backup_*.tar.gz" -mtime +7 -delete
echo "✅ Dev-Backup erstellt: ${BACKUP_NAME}.tar.gz"
EOF
chmod +x /root/entwicklung/pfandsystem/backup-dev.sh
```
### **Live-Backup-Script:**
```bash
cat > /root/livesysteme/borbaecker/backup-live.sh << 'EOF'
#!/bin/bash
# Backup-Verzeichnis
BACKUP_DIR="/root/backups/livesysteme/borbaecker"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME="backup_${TIMESTAMP}"
# Backup erstellen
mkdir -p "${BACKUP_DIR}/${BACKUP_NAME}"
# Datenbank-Backup
docker exec borbaecker-mysql mysqldump -uborbaecker -pNEUES_SICHERES_PASSWORT borbaecker > "${BACKUP_DIR}/${BACKUP_NAME}/database.sql"
# Uploads-Backup
cp -r /root/livesysteme/borbaecker/backend/uploads "${BACKUP_DIR}/${BACKUP_NAME}/"
# .env Dateien
cp /root/livesysteme/borbaecker/.env "${BACKUP_DIR}/${BACKUP_NAME}/frontend.env"
cp /root/livesysteme/borbaecker/backend/.env "${BACKUP_DIR}/${BACKUP_NAME}/backend.env"
# Komprimieren
cd "${BACKUP_DIR}"
tar -czf "${BACKUP_NAME}.tar.gz" "${BACKUP_NAME}"
rm -rf "${BACKUP_NAME}"
# Alte Backups löschen (älter als 30 Tage für Live)
find "${BACKUP_DIR}" -name "backup_*.tar.gz" -mtime +30 -delete
echo "✅ Live-Backup erstellt: ${BACKUP_NAME}.tar.gz"
EOF
chmod +x /root/livesysteme/borbaecker/backup-live.sh
```
---
## ⏰ Schritt 7: Cron-Jobs einrichten
```bash
# Crontab bearbeiten
crontab -e
# Folgendes hinzufügen:
# Dev-Backups: Stündlich von 6-23 Uhr
0 6-23 * * * /root/entwicklung/pfandsystem/backup-dev.sh >> /var/log/backup-dev.log 2>&1
# Live-Backups: Stündlich von 6-23 Uhr
0 6-23 * * * /root/livesysteme/borbaecker/backup-live.sh >> /var/log/backup-live.log 2>&1
```
---
## 🚀 Schritt 8: Systeme starten
### **Dev-Version:**
```bash
cd /root/entwicklung/pfandsystem
# Docker starten
docker compose up -d
# Backend starten
cd backend
npm install
pm2 start server.js --name pfandsystem-dev
pm2 save
# Frontend bauen
cd ..
npm install
npm run build
node fix-manifest-link.cjs
docker restart pfandsystem-dev-frontend
```
### **Live-Version:**
```bash
cd /root/livesysteme/borbaecker
# Docker starten
docker compose up -d
# Datenbank initialisieren
sleep 30
docker exec -i borbaecker-mysql mysql -uborbaecker -pNEUES_SICHERES_PASSWORT borbaecker < backend/schema.sql
# Admin-User erstellen
cd backend
npm install
node scripts/create-admin.js
# Backend starten
pm2 start server.js --name borbaecker
pm2 save
# Frontend bauen
cd ..
npm install
npm run build
node fix-manifest-link.cjs
docker restart borbaecker-frontend
```
---
## 📊 Übersicht
| System | Verzeichnis | Domain | MySQL | Backend | phpMyAdmin |
|--------|-------------|--------|-------|---------|------------|
| **Dev** | `/root/entwicklung/pfandsystem` | pfandsystem.backdigital.de | 3306 | 3001 | 8081 |
| **Live** | `/root/livesysteme/borbaecker` | borbaecker.de | 3307 | 3002 | 8082 |
---
## 🔄 Updates deployen
### Dev:
```bash
cd /root/entwicklung/pfandsystem
git pull
npm run build
node fix-manifest-link.cjs
docker restart pfandsystem-dev-frontend
pm2 restart pfandsystem-dev
```
### Live:
```bash
cd /root/livesysteme/borbaecker
git pull
npm run build
node fix-manifest-link.cjs
docker restart borbaecker-frontend
pm2 restart borbaecker
```
---
## 💾 Backup wiederherstellen
```bash
# Backup entpacken
cd /root/backups/livesysteme/borbaecker
tar -xzf backup_TIMESTAMP.tar.gz
# Datenbank wiederherstellen
docker exec -i borbaecker-mysql mysql -uborbaecker -pPASSWORT borbaecker < backup_TIMESTAMP/database.sql
# Uploads wiederherstellen
cp -r backup_TIMESTAMP/uploads/* /root/livesysteme/borbaecker/backend/uploads/
```
---
## ✅ Checkliste
- [ ] Verzeichnisstruktur erstellt
- [ ] Dev-Version verschoben
- [ ] Live-Version geklont
- [ ] Konfigurationen angepasst
- [ ] Traefik-Configs erstellt
- [ ] Backup-Scripte erstellt
- [ ] Cron-Jobs eingerichtet
- [ ] Dev-System gestartet
- [ ] Live-System gestartet
- [ ] DNS konfiguriert (borbaecker.de)
- [ ] Beide Systeme getestet
- [ ] Erstes Backup getestet