318 lines
5.9 KiB
Markdown
318 lines
5.9 KiB
Markdown
# 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
|