Files
pfandsystem-demo/dokumentationen/MIGRATION_NEUER_SERVER.md

474 lines
10 KiB
Markdown
Raw Normal View History

# 🚀 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!** 🚀