# Deployment Anleitung - Werte Next.js App ## Voraussetzungen Auf dem Server benötigt: - Docker (Version 20.10+) - Docker Compose (Version 2.0+) - MySQL Server (bereits installiert und laufend) - RXF Datenbank mit Tabelle Werte_BZG muss bereits existieren ## Deployment Schritte ### 1. Projekt auf den Server übertragen ```bash # Auf dem Server ein Verzeichnis erstellen mkdir -p /opt/werte-next cd /opt/werte-next # Projekt per Git oder rsync übertragen # Option A: Git git clone . # Option B: rsync (von lokalem Rechner aus) rsync -av --exclude 'node_modules' --exclude '.next' \ /Users/rxf/REXFUE_APPS/werte_next/ user@server:/opt/werte-next/ ``` ### 2. Umgebungsvariablen konfigurieren ```bash # .env-Datei aus Beispiel erstellen cp .env.example .env # .env-Datei mit Ihren Zugangsdaten bearbeiten nano .env ``` Passen Sie die Werte in der `.env`-Datei an: ```bash DB_USER=root DB_PASS=IhrMySQLPasswort DB_NAME=RXF ``` **Wichtig**: Die `.env`-Datei enthält sensible Daten und wird NICHT ins Git-Repository committed! ### 3. Docker Images bauen und Container starten ```bash cd /opt/werte-next # Images bauen und Container im Hintergrund starten docker-compose up -d --build ``` ### 4. Container-Status prüfen ```bash # Container-Status anzeigen docker-compose ps # Logs anschauen docker-compose logs -f werte-app ``` ### 5. Datenbank prüfen ```bash # Direkt auf Host-MySQL verbinden mysql -uroot -p RXF # Tabelle prüfen SHOW TABLES; DESCRIBE Werte_BZG; SELECT COUNT(*) FROM Werte_BZG; # Oder von außen (falls MySQL externen Zugriff erlaubt) mysql -h -uroot -p RXF ``` ### 6. Anwendung im Browser öffnen ``` http://:3000 ``` ## Konfiguration anpassen ### Port ändern In `docker-compose.yml` den Port für die App ändern: ```yaml ports: - "8080:3000" # Zugriff über Port 8080 ``` ### Datenbankverbindung anpassen In `docker-compose.yml` die Umgebungsvariablen ändern: ```yaml environment: - DB_HOST=host.docker.internal # Für Host-MySQL - DB_USER=root # MySQL-Benutzer - DB_PASS=IhrPasswort # MySQL-Passwort - DB_NAME=RXF # Datenbankname ``` **Hinweis**: `host.docker.internal` zeigt auf den Docker-Host. Dies wird durch die `extra_hosts` Konfiguration ermöglicht. ## Verwaltung ### Container stoppen ```bash docker-compose stop ``` ### Container starten ```bash docker-compose start ``` ### Container neustarten ```bash docker-compose restart ``` ### Container entfernen (Daten bleiben erhalten) ```bash docker-compose down ``` ### Alles löschen inkl. Daten ```bash docker-compose down -v ``` ### Updates einspielen ```bash # Neue Version holen git pull # oder rsync # Neu bauen und starten docker-compose up -d --build ``` ### Logs anschauen ```bash # App-Logs docker-compose logs -f werte-app # Letzte 100 Zeilen docker-compose logs --tail=100 werte-app ``` ## Backup ### Datenbank-Backup erstellen ```bash # Direkt auf dem Host (empfohlen) # Passwort wird interaktiv abgefragt mysqldump -uroot -p RXF > backup_$(date +%Y%m%d).sql # Oder mit gzip komprimieren mysqldump -uroot -p RXF | gzip > backup_$(date +%Y%m%d).sql.gz # Nur die Werte_BZG Tabelle mysqldump -uroot -p RXF Werte_BZG > werte_backup_$(date +%Y%m%d).sql ``` ### Datenbank wiederherstellen ```bash # Aus Backup wiederherstellen mysql -uroot -p RXF < backup_20260222.sql # Aus komprimiertem Backup gunzip < backup_20260222.sql.gz | mysql -uroot -p RXF ``` ## Reverse Proxy (Optional) Für Produktionsumgebungen empfiehlt sich ein Reverse Proxy wie Nginx: ### Nginx-Konfiguration Beispiel ```nginx server { listen 80; server_name werte.example.com; location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` ### Mit SSL (Let's Encrypt) ```bash # Certbot installieren apt install certbot python3-certbot-nginx # Zertifikat erstellen certbot --nginx -d werte.example.com ``` ## Troubleshooting ### Container startet nicht ```bash # Detaillierte Logs anschauen docker-compose logs werte-app # Container neu bauen docker-compose build --no-cache werte-app docker-compose up -d ``` ### Datenbankverbindung schlägt fehl ```bash # Prüfen ob MySQL auf dem Host läuft sudo systemctl status mysql # oder sudo service mysql status # MySQL Error Log prüfen sudo tail -f /var/log/mysql/error.log # Verbindung vom Docker-Container testen docker exec -it werte-next-app sh # Im Container: ping host.docker.internal ``` **Hinweis**: Wenn `host.docker.internal` nicht funktioniert, können Sie stattdessen die Server-IP verwenden: ```yaml environment: - DB_HOST=192.168.1.100 # Ersetzen mit tatsächlicher Server-IP ``` ### App ist langsam ```bash # Ressourcen-Nutzung prüfen docker stats # Container neu starten docker-compose restart werte-app ``` ## Systemd Service (Optional) Für automatischen Start beim Server-Reboot: ```bash # Service-Datei erstellen sudo nano /etc/systemd/system/werte-next.service ``` Inhalt: ```ini [Unit] Description=Werte Next.js Application After=docker.service Requires=docker.service [Service] Type=oneshot RemainAfterExit=yes WorkingDirectory=/opt/werte-next ExecStart=/usr/bin/docker-compose up -d ExecStop=/usr/bin/docker-compose down TimeoutStartSec=0 [Install] WantedBy=multi-user.target ``` Service aktivieren: ```bash sudo systemctl enable werte-next sudo systemctl start werte-next sudo systemctl status werte-next ``` ## Monitoring CPU und Memory-Nutzung überwachen: ```bash docker stats werte-next-app ``` ## Support Bei Problemen: - Logs prüfen: `docker-compose logs -f` - Container neu starten: `docker-compose restart` - Issues auf GitHub melden