Files
werte-next/DEPLOYMENT.md
2026-02-22 22:11:52 +01:00

5.9 KiB

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

# 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 <repository-url> .

# 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

# .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:

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

cd /opt/werte-next

# Images bauen und Container im Hintergrund starten
docker-compose up -d --build

4. Container-Status prüfen

# Container-Status anzeigen
docker-compose ps

# Logs anschauen
docker-compose logs -f werte-app

5. Datenbank prüfen

# Direkt auf Host-MySQL verbinden
mysql -uroot -p<IhrPasswort> 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 <server-ip> -uroot -p<IhrPasswort> RXF

6. Anwendung im Browser öffnen

http://<server-ip>:3000

Konfiguration anpassen

Port ändern

In docker-compose.yml den Port für die App ändern:

ports:
  - "8080:3000"  # Zugriff über Port 8080

Datenbankverbindung anpassen

In docker-compose.yml die Umgebungsvariablen ändern:

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

docker-compose stop

Container starten

docker-compose start

Container neustarten

docker-compose restart

Container entfernen (Daten bleiben erhalten)

docker-compose down

Alles löschen inkl. Daten

docker-compose down -v

Updates einspielen

# Neue Version holen
git pull  # oder rsync

# Neu bauen und starten
docker-compose up -d --build

Logs anschauen

# App-Logs
docker-compose logs -f werte-app

# Letzte 100 Zeilen
docker-compose logs --tail=100 werte-app

Backup

Datenbank-Backup erstellen

# 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

# 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

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)

# Certbot installieren
apt install certbot python3-certbot-nginx

# Zertifikat erstellen
certbot --nginx -d werte.example.com

Troubleshooting

Container startet nicht

# 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

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

environment:
  - DB_HOST=192.168.1.100  # Ersetzen mit tatsächlicher Server-IP

App ist langsam

# Ressourcen-Nutzung prüfen
docker stats

# Container neu starten
docker-compose restart werte-app

Systemd Service (Optional)

Für automatischen Start beim Server-Reboot:

# Service-Datei erstellen
sudo nano /etc/systemd/system/werte-next.service

Inhalt:

[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:

sudo systemctl enable werte-next
sudo systemctl start werte-next
sudo systemctl status werte-next

Monitoring

CPU und Memory-Nutzung überwachen:

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