- 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.
10 KiB
10 KiB
🚀 Migration auf neuen Server - Komplette Anleitung
📋 Was muss mit?
1. Verzeichnisstruktur:
/root/
├── entwicklung/
│ └── pfandsystem/ # Git-Repository
├── livesysteme/
│ └── borbaecker/ # Git-Repository
├── traefik/ # Zentrale Traefik-Konfiguration
│ ├── traefik.yml
│ ├── dynamic/
│ │ ├── pfandsystem-dev.yml
│ │ └── borbaecker.yml
│ └── letsencrypt/
│ └── acme.json
└── backups/
├── entwicklung/
│ └── pfandsystem/
└── livesysteme/
└── borbaecker/
🔧 Schritt-für-Schritt Anleitung
Schritt 1: Server vorbereiten
# System aktualisieren
apt update && apt upgrade -y
# Docker installieren
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
# Docker Compose installieren
apt install docker-compose-plugin -y
# Node.js installieren (für Backend)
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs
# Git installieren
apt install -y git
# Verzeichnisse erstellen
mkdir -p /root/entwicklung
mkdir -p /root/livesysteme
mkdir -p /root/backups/entwicklung/pfandsystem
mkdir -p /root/backups/livesysteme/borbaecker
mkdir -p /root/traefik/dynamic
mkdir -p /root/traefik/letsencrypt
Schritt 2: SSH-Key für Git einrichten
# SSH-Key generieren
ssh-keygen -t ed25519 -C "vonperfall@r83.io" -f ~/.ssh/gitea_ed25519 -N ""
# SSH-Config erstellen
cat > ~/.ssh/config << 'EOF'
Host 49.13.154.75
Port 2244
User git
IdentityFile ~/.ssh/gitea_ed25519
StrictHostKeyChecking accept-new
EOF
chmod 600 ~/.ssh/config
# Public Key anzeigen (zum Hinzufügen in Gitea)
cat ~/.ssh/gitea_ed25519.pub
→ Public Key in Gitea hinzufügen: http://49.13.154.75:4000/user/settings/keys
Schritt 3: Git-Repositories klonen
# Dev-System klonen
cd /root/entwicklung
git clone ssh://git@49.13.154.75:2244/christian/pfandsystem.git pfandsystem
# Live-System klonen
cd /root/livesysteme
git clone ssh://git@49.13.154.75:2244/christian/borbaecker-pfandsystem.git borbaecker
# Git-User konfigurieren
cd /root/entwicklung/pfandsystem
git config user.email "vonperfall@r83.io"
git config user.name "Christian von Perfall"
cd /root/livesysteme/borbaecker
git config user.email "vonperfall@r83.io"
git config user.name "Christian von Perfall"
Schritt 4: Traefik-Konfiguration erstellen
Haupt-Konfiguration:
cat > /root/traefik/traefik.yml << 'EOF'
api:
dashboard: true
insecure: true
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
certificatesResolvers:
letsencrypt:
acme:
email: vonperfall@r83.io
storage: /letsencrypt/acme.json
httpChallenge:
entryPoint: web
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
file:
directory: /etc/traefik/dynamic
watch: true
log:
level: INFO
accessLog:
filePath: "/var/log/access.log"
EOF
Dev-System Routing:
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-System Routing:
cat > /root/traefik/dynamic/borbaecker.yml << 'EOF'
http:
routers:
borbaecker-api:
rule: "Host(`borbaecker-pfand.dockly.de`) && PathPrefix(`/api`)"
service: borbaecker-api
entryPoints:
- web
- websecure
tls:
certResolver: letsencrypt
priority: 100
borbaecker-uploads:
rule: "Host(`borbaecker-pfand.dockly.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
acme.json erstellen:
touch /root/traefik/letsencrypt/acme.json
chmod 600 /root/traefik/letsencrypt/acme.json
Schritt 5: Dev-System starten
cd /root/entwicklung/pfandsystem
# .env Dateien anpassen (falls nötig)
nano .env
nano backend/.env
# Docker Container starten
docker compose up -d
# Warten bis MySQL bereit ist
sleep 30
# Datenbank initialisieren
docker exec -i pfandsystem-mysql mysql -upfandsystem -ppfandsystem_secure_password pfandsystem < database/schema.sql
# Admin-User erstellen
cd backend
npm install
node scripts/create-admin.js
# Backend starten
npm start > /tmp/backend-dev.log 2>&1 &
# Frontend bauen
cd ..
npm install
npm run build
node fix-manifest-link.cjs
docker restart pfandsystem-frontend
Schritt 6: Live-System starten
cd /root/livesysteme/borbaecker
# .env Dateien anpassen
cat > .env << 'EOF'
VITE_API_URL=https://borbaecker-pfand.dockly.de/api
EOF
cat > backend/.env << 'EOF'
DB_HOST=localhost
DB_PORT=3307
DB_USER=borbaecker
DB_PASSWORD=borbaecker_secure_2024!
DB_NAME=borbaecker
JWT_SECRET=borbaecker_jwt_secret_key_2024_very_secure
PORT=3002
NODE_ENV=production
RESEND_API_KEY=re_6BE6Hv6U_H7ggkAT4ApbiSZ5SCo2Cf1qA
UPLOAD_DIR=/root/livesysteme/borbaecker/backend/uploads
MAX_FILE_SIZE=10485760
EOF
# Docker Container starten
docker compose up -d
# Warten bis MySQL bereit ist
sleep 30
# Datenbank initialisieren
docker exec -i borbaecker-mysql mysql -uborbaecker -pborbaecker_secure_2024! borbaecker < database/schema.sql
# Admin-User erstellen
cd backend
npm install
node scripts/create-admin.js
# Backend starten
npm start > /tmp/backend-live.log 2>&1 &
# Frontend bauen
cd ..
npm install
npm run build
node fix-manifest-link.cjs
docker restart borbaecker-frontend
Schritt 7: Traefik mit beiden Netzwerken verbinden
# Traefik mit borbaecker-network verbinden
docker network connect borbaecker_borbaecker-network pfandsystem-traefik
# Traefik neu starten
docker restart pfandsystem-traefik
Schritt 8: Backup-Cron-Jobs einrichten
crontab -e
# Hinzufügen:
0 6-23 * * * /root/entwicklung/pfandsystem/backup-dev.sh >> /var/log/backup-dev.log 2>&1
0 6-23 * * * /root/livesysteme/borbaecker/backup-live.sh >> /var/log/backup-live.log 2>&1
📦 Was muss NICHT mit?
- ❌
node_modules/(wird neu installiert) - ❌
dist/(wird neu gebaut) - ❌ MySQL-Daten (werden neu initialisiert)
- ❌ Alte Logs
- ❌
.git/Objekte (werden neu geklont)
🔑 Wichtige Dateien/Ordner:
Müssen mit (manuell kopieren oder im Git):
- ✅
/root/traefik/(gesamter Ordner) - ✅
.envDateien (mit Passwörtern) - ✅
docker-compose.yml(beide Systeme) - ✅ Backup-Scripte
- ✅ Datenbank-Dumps (falls Daten migriert werden sollen)
Werden automatisch erstellt:
- ✅ Git-Repositories (via clone)
- ✅ node_modules (via npm install)
- ✅ dist (via npm run build)
- ✅ Docker-Images (via docker compose)
🧪 Testing nach Migration:
# Dev-System testen
curl -I https://pfandsystem.backdigital.de
# Live-System testen
curl -I https://borbaecker-pfand.dockly.de
# Backends testen
curl http://localhost:3001/health
curl http://localhost:3002/health
# Login testen
curl -X POST http://localhost:3001/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"admin@pfandsystem.de","password":"admin123"}'
📊 Ports die offen sein müssen:
- 80 (HTTP)
- 443 (HTTPS)
- 8080 (Traefik Dashboard)
- 8081 (phpMyAdmin Dev)
- 8082 (phpMyAdmin Live)
- 3306 (MySQL Dev - optional)
- 3307 (MySQL Live - optional)
🔄 Schnell-Migration (mit Daten):
1. Auf altem Server:
# Backups erstellen
/root/entwicklung/pfandsystem/backup-dev.sh
/root/livesysteme/borbaecker/backup-live.sh
# Traefik-Ordner packen
tar -czf /tmp/traefik-backup.tar.gz /root/traefik
# Auf neuen Server kopieren
scp /root/backups/entwicklung/pfandsystem/backup_*.tar.gz root@NEUER_SERVER:/tmp/
scp /root/backups/livesysteme/borbaecker/backup_*.tar.gz root@NEUER_SERVER:/tmp/
scp /tmp/traefik-backup.tar.gz root@NEUER_SERVER:/tmp/
2. Auf neuem Server:
# Traefik wiederherstellen
tar -xzf /tmp/traefik-backup.tar.gz -C /
# Systeme wie oben beschrieben aufsetzen
# Datenbanken aus Backup wiederherstellen
cd /tmp
tar -xzf backup_TIMESTAMP.tar.gz
docker exec -i pfandsystem-mysql mysql -upfandsystem -ppfandsystem_secure_password pfandsystem < backup_TIMESTAMP/database.sql
docker exec -i borbaecker-mysql mysql -uborbaecker -pborbaecker_secure_2024! borbaecker < backup_TIMESTAMP/database.sql
# Uploads wiederherstellen
cp -r backup_TIMESTAMP/uploads/* /root/entwicklung/pfandsystem/backend/uploads/
cp -r backup_TIMESTAMP/uploads/* /root/livesysteme/borbaecker/backend/uploads/
✅ Checkliste für neuen Server:
- Server vorbereitet (Docker, Node.js, Git)
- SSH-Key erstellt und in Gitea hinzugefügt
- Verzeichnisstruktur erstellt
- Git-Repositories geklont
- Traefik-Konfiguration erstellt
- Dev-System gestartet
- Live-System gestartet
- Traefik mit beiden Netzwerken verbunden
- DNS-Einträge aktualisiert
- SSL-Zertifikate generiert
- Backup-Cron-Jobs eingerichtet
- Beide Systeme getestet
- Login funktioniert
- Uploads funktionieren
🎯 Zusammenfassung:
Minimal notwendig:
- Git-Repositories klonen
- Traefik-Ordner erstellen
- Docker Compose starten
- Backends starten
- Traefik mit Netzwerken verbinden
Mit Daten-Migration:
- Backups vom alten Server
- Traefik-Ordner kopieren
- Systeme aufsetzen
- Datenbanken wiederherstellen
- Uploads kopieren
Alles ist im Git, außer:
- Traefik-Konfiguration (
/root/traefik/) - .env Dateien mit Passwörtern
- Datenbank-Inhalte
- Upload-Dateien
Diese Anleitung ermöglicht eine komplette Migration auf einen neuen Server! 🚀