# 🔄 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