474 lines
10 KiB
Markdown
474 lines
10 KiB
Markdown
|
|
# 🚀 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!** 🚀
|