Files
pfandsystem-demo/dokumentationen/MIGRATION_NEUER_SERVER.md
christian d86c898455 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.
2026-05-26 12:39:17 +00:00

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)
  • .env Dateien (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:

  1. Git-Repositories klonen
  2. Traefik-Ordner erstellen
  3. Docker Compose starten
  4. Backends starten
  5. Traefik mit Netzwerken verbinden

Mit Daten-Migration:

  1. Backups vom alten Server
  2. Traefik-Ordner kopieren
  3. Systeme aufsetzen
  4. Datenbanken wiederherstellen
  5. 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! 🚀