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.
This commit is contained in:
473
dokumentationen/MIGRATION_NEUER_SERVER.md
Normal file
473
dokumentationen/MIGRATION_NEUER_SERVER.md
Normal file
@@ -0,0 +1,473 @@
|
||||
# 🚀 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!** 🚀
|
||||
Reference in New Issue
Block a user