# 🚀 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** ```bash # 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** ```bash # 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** ```bash # 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:** ```bash 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:** ```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-System Routing:** ```bash 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:** ```bash touch /root/traefik/letsencrypt/acme.json chmod 600 /root/traefik/letsencrypt/acme.json ``` --- ### **Schritt 5: Dev-System starten** ```bash 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** ```bash 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** ```bash # 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** ```bash 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: ```bash # 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:** ```bash # 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:** ```bash # 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!** 🚀