490 lines
11 KiB
Markdown
490 lines
11 KiB
Markdown
|
|
# 🔄 Migration & Setup: Neue Verzeichnisstruktur
|
||
|
|
|
||
|
|
## 📁 Neue Struktur
|
||
|
|
|
||
|
|
```
|
||
|
|
/root/
|
||
|
|
├── entwicklung/
|
||
|
|
│ └── pfandsystem/ # Dev-Version (verschoben von /root)
|
||
|
|
├── livesysteme/
|
||
|
|
│ └── borbaecker/ # Live-Version (neu)
|
||
|
|
└── backups/
|
||
|
|
├── entwicklung/
|
||
|
|
│ └── pfandsystem/ # Backups der Dev-Version
|
||
|
|
└── livesysteme/
|
||
|
|
└── borbaecker/ # Backups der Live-Version
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🚀 Schritt 1: Verzeichnisse erstellen
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Hauptverzeichnisse
|
||
|
|
mkdir -p /root/entwicklung
|
||
|
|
mkdir -p /root/livesysteme
|
||
|
|
mkdir -p /root/backups/entwicklung
|
||
|
|
mkdir -p /root/backups/livesysteme
|
||
|
|
|
||
|
|
echo "✅ Verzeichnisstruktur erstellt"
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔄 Schritt 2: Dev-Version verschieben
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Backend stoppen
|
||
|
|
pkill -f "node.*server.js"
|
||
|
|
|
||
|
|
# Docker Container stoppen
|
||
|
|
cd /root
|
||
|
|
docker compose down
|
||
|
|
|
||
|
|
# Verschieben (außer bestimmte Dateien)
|
||
|
|
rsync -av --progress \
|
||
|
|
--exclude 'node_modules' \
|
||
|
|
--exclude '.git' \
|
||
|
|
--exclude 'dist' \
|
||
|
|
/root/ /root/entwicklung/pfandsystem/
|
||
|
|
|
||
|
|
# Git-Verzeichnis verschieben
|
||
|
|
mv /root/.git /root/entwicklung/pfandsystem/.git
|
||
|
|
|
||
|
|
# Alte Dateien aufräumen (nach Bestätigung)
|
||
|
|
# rm -rf /root/backend /root/src /root/public ...
|
||
|
|
|
||
|
|
echo "✅ Dev-Version nach /root/entwicklung/pfandsystem verschoben"
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🆕 Schritt 3: Live-Version erstellen
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd /root/livesysteme/borbaecker
|
||
|
|
|
||
|
|
# Git klonen
|
||
|
|
git clone ssh://git@49.13.154.75:2244/christian/pfandsystem.git .
|
||
|
|
|
||
|
|
# Auf main branch
|
||
|
|
git checkout main
|
||
|
|
|
||
|
|
echo "✅ Live-Version in /root/livesysteme/borbaecker erstellt"
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ⚙️ Schritt 4: Konfigurationen anpassen
|
||
|
|
|
||
|
|
### **Dev-Version** (`/root/entwicklung/pfandsystem`)
|
||
|
|
|
||
|
|
#### Frontend `.env`:
|
||
|
|
```bash
|
||
|
|
cat > /root/entwicklung/pfandsystem/.env << 'EOF'
|
||
|
|
VITE_API_URL=https://pfandsystem.backdigital.de/api
|
||
|
|
EOF
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Backend `.env`:
|
||
|
|
```bash
|
||
|
|
cat > /root/entwicklung/pfandsystem/backend/.env << 'EOF'
|
||
|
|
DB_HOST=localhost
|
||
|
|
DB_PORT=3306
|
||
|
|
DB_USER=pfandsystem
|
||
|
|
DB_PASSWORD=pfandsystem_secure_password
|
||
|
|
DB_NAME=pfandsystem
|
||
|
|
JWT_SECRET=your_very_secure_jwt_secret_key_change_this_in_production
|
||
|
|
PORT=3001
|
||
|
|
NODE_ENV=development
|
||
|
|
RESEND_API_KEY=re_6BE6Hv6U_H7ggkAT4ApbiSZ5SCo2Cf1qA
|
||
|
|
UPLOAD_DIR=/root/entwicklung/pfandsystem/backend/uploads
|
||
|
|
MAX_FILE_SIZE=10485760
|
||
|
|
EOF
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Docker-Compose anpassen:
|
||
|
|
```bash
|
||
|
|
# Container-Namen mit -dev suffix
|
||
|
|
sed -i 's/pfandsystem-/pfandsystem-dev-/g' /root/entwicklung/pfandsystem/docker-compose.yml
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### **Live-Version** (`/root/livesysteme/borbaecker`)
|
||
|
|
|
||
|
|
#### Frontend `.env`:
|
||
|
|
```bash
|
||
|
|
cat > /root/livesysteme/borbaecker/.env << 'EOF'
|
||
|
|
VITE_API_URL=https://borbaecker.de/api
|
||
|
|
EOF
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Backend `.env`:
|
||
|
|
```bash
|
||
|
|
cat > /root/livesysteme/borbaecker/backend/.env << 'EOF'
|
||
|
|
DB_HOST=localhost
|
||
|
|
DB_PORT=3307
|
||
|
|
DB_USER=borbaecker
|
||
|
|
DB_PASSWORD=NEUES_SICHERES_PASSWORT_HIER
|
||
|
|
DB_NAME=borbaecker
|
||
|
|
JWT_SECRET=NEUER_JWT_SECRET_HIER
|
||
|
|
PORT=3002
|
||
|
|
NODE_ENV=production
|
||
|
|
RESEND_API_KEY=re_6BE6Hv6U_H7ggkAT4ApbiSZ5SCo2Cf1qA
|
||
|
|
UPLOAD_DIR=/root/livesysteme/borbaecker/backend/uploads
|
||
|
|
MAX_FILE_SIZE=10485760
|
||
|
|
EOF
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Docker-Compose:
|
||
|
|
```bash
|
||
|
|
cat > /root/livesysteme/borbaecker/docker-compose.yml << 'EOF'
|
||
|
|
version: '3.8'
|
||
|
|
|
||
|
|
services:
|
||
|
|
mysql:
|
||
|
|
image: mysql:8.0
|
||
|
|
container_name: borbaecker-mysql
|
||
|
|
restart: unless-stopped
|
||
|
|
environment:
|
||
|
|
MYSQL_ROOT_PASSWORD: NEUES_ROOT_PASSWORT
|
||
|
|
MYSQL_DATABASE: borbaecker
|
||
|
|
MYSQL_USER: borbaecker
|
||
|
|
MYSQL_PASSWORD: NEUES_SICHERES_PASSWORT
|
||
|
|
volumes:
|
||
|
|
- mysql_data:/var/lib/mysql
|
||
|
|
ports:
|
||
|
|
- "3307:3306"
|
||
|
|
networks:
|
||
|
|
- borbaecker-network
|
||
|
|
healthcheck:
|
||
|
|
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
|
||
|
|
interval: 10s
|
||
|
|
timeout: 5s
|
||
|
|
retries: 5
|
||
|
|
|
||
|
|
phpmyadmin:
|
||
|
|
image: phpmyadmin:latest
|
||
|
|
container_name: borbaecker-phpmyadmin
|
||
|
|
restart: unless-stopped
|
||
|
|
environment:
|
||
|
|
PMA_HOST: mysql
|
||
|
|
PMA_PORT: 3306
|
||
|
|
ports:
|
||
|
|
- "8082:80"
|
||
|
|
networks:
|
||
|
|
- borbaecker-network
|
||
|
|
depends_on:
|
||
|
|
- mysql
|
||
|
|
|
||
|
|
frontend:
|
||
|
|
image: nginx:1.25-alpine
|
||
|
|
container_name: borbaecker-frontend
|
||
|
|
restart: unless-stopped
|
||
|
|
volumes:
|
||
|
|
- ./dist:/usr/share/nginx/html:ro
|
||
|
|
networks:
|
||
|
|
- borbaecker-network
|
||
|
|
labels:
|
||
|
|
- "traefik.enable=true"
|
||
|
|
- "traefik.http.routers.borbaecker.rule=Host(`borbaecker.de`)"
|
||
|
|
- "traefik.http.routers.borbaecker.entrypoints=web,websecure"
|
||
|
|
- "traefik.http.routers.borbaecker.tls=true"
|
||
|
|
- "traefik.http.routers.borbaecker.tls.certresolver=letsencrypt"
|
||
|
|
- "traefik.http.services.borbaecker.loadbalancer.server.port=80"
|
||
|
|
|
||
|
|
volumes:
|
||
|
|
mysql_data:
|
||
|
|
driver: local
|
||
|
|
|
||
|
|
networks:
|
||
|
|
borbaecker-network:
|
||
|
|
driver: bridge
|
||
|
|
EOF
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔧 Schritt 5: Traefik-Configs anpassen
|
||
|
|
|
||
|
|
### Dev-Version:
|
||
|
|
```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-Version:
|
||
|
|
```bash
|
||
|
|
cat > /root/traefik/dynamic/borbaecker.yml << 'EOF'
|
||
|
|
http:
|
||
|
|
routers:
|
||
|
|
borbaecker-api:
|
||
|
|
rule: "Host(`borbaecker.de`) && PathPrefix(`/api`)"
|
||
|
|
service: borbaecker-api
|
||
|
|
entryPoints:
|
||
|
|
- web
|
||
|
|
- websecure
|
||
|
|
tls:
|
||
|
|
certResolver: letsencrypt
|
||
|
|
priority: 100
|
||
|
|
|
||
|
|
borbaecker-uploads:
|
||
|
|
rule: "Host(`borbaecker.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
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 💾 Schritt 6: Backup-Scripte erstellen
|
||
|
|
|
||
|
|
### **Dev-Backup-Script:**
|
||
|
|
```bash
|
||
|
|
cat > /root/entwicklung/pfandsystem/backup-dev.sh << 'EOF'
|
||
|
|
#!/bin/bash
|
||
|
|
|
||
|
|
# Backup-Verzeichnis
|
||
|
|
BACKUP_DIR="/root/backups/entwicklung/pfandsystem"
|
||
|
|
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||
|
|
BACKUP_NAME="backup_${TIMESTAMP}"
|
||
|
|
|
||
|
|
# Backup erstellen
|
||
|
|
mkdir -p "${BACKUP_DIR}/${BACKUP_NAME}"
|
||
|
|
|
||
|
|
# Datenbank-Backup
|
||
|
|
docker exec pfandsystem-dev-mysql mysqldump -upfandsystem -ppfandsystem_secure_password pfandsystem > "${BACKUP_DIR}/${BACKUP_NAME}/database.sql"
|
||
|
|
|
||
|
|
# Uploads-Backup
|
||
|
|
cp -r /root/entwicklung/pfandsystem/backend/uploads "${BACKUP_DIR}/${BACKUP_NAME}/"
|
||
|
|
|
||
|
|
# .env Dateien
|
||
|
|
cp /root/entwicklung/pfandsystem/.env "${BACKUP_DIR}/${BACKUP_NAME}/frontend.env"
|
||
|
|
cp /root/entwicklung/pfandsystem/backend/.env "${BACKUP_DIR}/${BACKUP_NAME}/backend.env"
|
||
|
|
|
||
|
|
# Komprimieren
|
||
|
|
cd "${BACKUP_DIR}"
|
||
|
|
tar -czf "${BACKUP_NAME}.tar.gz" "${BACKUP_NAME}"
|
||
|
|
rm -rf "${BACKUP_NAME}"
|
||
|
|
|
||
|
|
# Alte Backups löschen (älter als 7 Tage)
|
||
|
|
find "${BACKUP_DIR}" -name "backup_*.tar.gz" -mtime +7 -delete
|
||
|
|
|
||
|
|
echo "✅ Dev-Backup erstellt: ${BACKUP_NAME}.tar.gz"
|
||
|
|
EOF
|
||
|
|
|
||
|
|
chmod +x /root/entwicklung/pfandsystem/backup-dev.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
### **Live-Backup-Script:**
|
||
|
|
```bash
|
||
|
|
cat > /root/livesysteme/borbaecker/backup-live.sh << 'EOF'
|
||
|
|
#!/bin/bash
|
||
|
|
|
||
|
|
# Backup-Verzeichnis
|
||
|
|
BACKUP_DIR="/root/backups/livesysteme/borbaecker"
|
||
|
|
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||
|
|
BACKUP_NAME="backup_${TIMESTAMP}"
|
||
|
|
|
||
|
|
# Backup erstellen
|
||
|
|
mkdir -p "${BACKUP_DIR}/${BACKUP_NAME}"
|
||
|
|
|
||
|
|
# Datenbank-Backup
|
||
|
|
docker exec borbaecker-mysql mysqldump -uborbaecker -pNEUES_SICHERES_PASSWORT borbaecker > "${BACKUP_DIR}/${BACKUP_NAME}/database.sql"
|
||
|
|
|
||
|
|
# Uploads-Backup
|
||
|
|
cp -r /root/livesysteme/borbaecker/backend/uploads "${BACKUP_DIR}/${BACKUP_NAME}/"
|
||
|
|
|
||
|
|
# .env Dateien
|
||
|
|
cp /root/livesysteme/borbaecker/.env "${BACKUP_DIR}/${BACKUP_NAME}/frontend.env"
|
||
|
|
cp /root/livesysteme/borbaecker/backend/.env "${BACKUP_DIR}/${BACKUP_NAME}/backend.env"
|
||
|
|
|
||
|
|
# Komprimieren
|
||
|
|
cd "${BACKUP_DIR}"
|
||
|
|
tar -czf "${BACKUP_NAME}.tar.gz" "${BACKUP_NAME}"
|
||
|
|
rm -rf "${BACKUP_NAME}"
|
||
|
|
|
||
|
|
# Alte Backups löschen (älter als 30 Tage für Live)
|
||
|
|
find "${BACKUP_DIR}" -name "backup_*.tar.gz" -mtime +30 -delete
|
||
|
|
|
||
|
|
echo "✅ Live-Backup erstellt: ${BACKUP_NAME}.tar.gz"
|
||
|
|
EOF
|
||
|
|
|
||
|
|
chmod +x /root/livesysteme/borbaecker/backup-live.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ⏰ Schritt 7: Cron-Jobs einrichten
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Crontab bearbeiten
|
||
|
|
crontab -e
|
||
|
|
|
||
|
|
# Folgendes hinzufügen:
|
||
|
|
|
||
|
|
# Dev-Backups: Stündlich von 6-23 Uhr
|
||
|
|
0 6-23 * * * /root/entwicklung/pfandsystem/backup-dev.sh >> /var/log/backup-dev.log 2>&1
|
||
|
|
|
||
|
|
# Live-Backups: Stündlich von 6-23 Uhr
|
||
|
|
0 6-23 * * * /root/livesysteme/borbaecker/backup-live.sh >> /var/log/backup-live.log 2>&1
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🚀 Schritt 8: Systeme starten
|
||
|
|
|
||
|
|
### **Dev-Version:**
|
||
|
|
```bash
|
||
|
|
cd /root/entwicklung/pfandsystem
|
||
|
|
|
||
|
|
# Docker starten
|
||
|
|
docker compose up -d
|
||
|
|
|
||
|
|
# Backend starten
|
||
|
|
cd backend
|
||
|
|
npm install
|
||
|
|
pm2 start server.js --name pfandsystem-dev
|
||
|
|
pm2 save
|
||
|
|
|
||
|
|
# Frontend bauen
|
||
|
|
cd ..
|
||
|
|
npm install
|
||
|
|
npm run build
|
||
|
|
node fix-manifest-link.cjs
|
||
|
|
docker restart pfandsystem-dev-frontend
|
||
|
|
```
|
||
|
|
|
||
|
|
### **Live-Version:**
|
||
|
|
```bash
|
||
|
|
cd /root/livesysteme/borbaecker
|
||
|
|
|
||
|
|
# Docker starten
|
||
|
|
docker compose up -d
|
||
|
|
|
||
|
|
# Datenbank initialisieren
|
||
|
|
sleep 30
|
||
|
|
docker exec -i borbaecker-mysql mysql -uborbaecker -pNEUES_SICHERES_PASSWORT borbaecker < backend/schema.sql
|
||
|
|
|
||
|
|
# Admin-User erstellen
|
||
|
|
cd backend
|
||
|
|
npm install
|
||
|
|
node scripts/create-admin.js
|
||
|
|
|
||
|
|
# Backend starten
|
||
|
|
pm2 start server.js --name borbaecker
|
||
|
|
pm2 save
|
||
|
|
|
||
|
|
# Frontend bauen
|
||
|
|
cd ..
|
||
|
|
npm install
|
||
|
|
npm run build
|
||
|
|
node fix-manifest-link.cjs
|
||
|
|
docker restart borbaecker-frontend
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📊 Übersicht
|
||
|
|
|
||
|
|
| System | Verzeichnis | Domain | MySQL | Backend | phpMyAdmin |
|
||
|
|
|--------|-------------|--------|-------|---------|------------|
|
||
|
|
| **Dev** | `/root/entwicklung/pfandsystem` | pfandsystem.backdigital.de | 3306 | 3001 | 8081 |
|
||
|
|
| **Live** | `/root/livesysteme/borbaecker` | borbaecker.de | 3307 | 3002 | 8082 |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔄 Updates deployen
|
||
|
|
|
||
|
|
### Dev:
|
||
|
|
```bash
|
||
|
|
cd /root/entwicklung/pfandsystem
|
||
|
|
git pull
|
||
|
|
npm run build
|
||
|
|
node fix-manifest-link.cjs
|
||
|
|
docker restart pfandsystem-dev-frontend
|
||
|
|
pm2 restart pfandsystem-dev
|
||
|
|
```
|
||
|
|
|
||
|
|
### Live:
|
||
|
|
```bash
|
||
|
|
cd /root/livesysteme/borbaecker
|
||
|
|
git pull
|
||
|
|
npm run build
|
||
|
|
node fix-manifest-link.cjs
|
||
|
|
docker restart borbaecker-frontend
|
||
|
|
pm2 restart borbaecker
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 💾 Backup wiederherstellen
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Backup entpacken
|
||
|
|
cd /root/backups/livesysteme/borbaecker
|
||
|
|
tar -xzf backup_TIMESTAMP.tar.gz
|
||
|
|
|
||
|
|
# Datenbank wiederherstellen
|
||
|
|
docker exec -i borbaecker-mysql mysql -uborbaecker -pPASSWORT borbaecker < backup_TIMESTAMP/database.sql
|
||
|
|
|
||
|
|
# Uploads wiederherstellen
|
||
|
|
cp -r backup_TIMESTAMP/uploads/* /root/livesysteme/borbaecker/backend/uploads/
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ✅ Checkliste
|
||
|
|
|
||
|
|
- [ ] Verzeichnisstruktur erstellt
|
||
|
|
- [ ] Dev-Version verschoben
|
||
|
|
- [ ] Live-Version geklont
|
||
|
|
- [ ] Konfigurationen angepasst
|
||
|
|
- [ ] Traefik-Configs erstellt
|
||
|
|
- [ ] Backup-Scripte erstellt
|
||
|
|
- [ ] Cron-Jobs eingerichtet
|
||
|
|
- [ ] Dev-System gestartet
|
||
|
|
- [ ] Live-System gestartet
|
||
|
|
- [ ] DNS konfiguriert (borbaecker.de)
|
||
|
|
- [ ] Beide Systeme getestet
|
||
|
|
- [ ] Erstes Backup getestet
|