für Docker angepasst

This commit is contained in:
rxf
2026-02-22 22:11:52 +01:00
parent e14af11e5c
commit e28cca1c46
21 changed files with 1494 additions and 94 deletions

317
DEPLOYMENT.md Normal file
View File

@@ -0,0 +1,317 @@
# 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 <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
```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<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:
```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