Files
Skrift-Kofnigurator/Docker Backend/DEPLOYMENT_EINFACH.md
2026-02-07 13:04:04 +01:00

320 lines
7.6 KiB
Markdown

# Einfaches Deployment OHNE Docker Hub
## Warum diese Methode?
- ✅ Kein Docker Hub Account nötig
- ✅ Keine Gefahr, dass andere dein Image sehen
- ✅ Schneller und einfacher
- ✅ Perfekt für einen einzelnen Server
## Deployment-Prozess
### Schritt 1: Backend zum Server kopieren
**Option A: Mit SCP (Windows PowerShell oder Git Bash)**
```bash
# Temporäres Archiv erstellen (ohne unnötige Dateien)
cd "E:\Dokumente\05_Skrift\Frontend_Backend_Konfigurator\Docker Backend"
# Zip erstellen
tar -czf skrift-backend.tar.gz \
--exclude='node_modules' \
--exclude='output' \
--exclude='cache' \
--exclude='.git' \
--exclude='*.md' \
--exclude='bruno-tests' \
--exclude='test-*.js' \
--exclude='generate-*.js' \
src/ fonts/ package.json package-lock.json Dockerfile docker-compose.yml .dockerignore
# Zum Server kopieren
scp skrift-backend.tar.gz root@DEINE-SERVER-IP:/tmp/
# Auf Server entpacken
ssh root@DEINE-SERVER-IP << 'ENDSSH'
mkdir -p /opt/skrift-backend
cd /opt/skrift-backend
tar -xzf /tmp/skrift-backend.tar.gz
rm /tmp/skrift-backend.tar.gz
ENDSSH
```
**Option B: Mit RSYNC (empfohlen, wenn verfügbar)**
```bash
# Direkt synchronisieren (nur geänderte Dateien)
rsync -avz --progress \
--exclude='node_modules' \
--exclude='output' \
--exclude='cache' \
--exclude='.git' \
--exclude='*.md' \
--exclude='bruno-tests' \
--exclude='test-*.js' \
--exclude='generate-*.js' \
"/e/Dokumente/05_Skrift/Frontend_Backend_Konfigurator/Docker Backend/" \
root@DEINE-SERVER-IP:/opt/skrift-backend/
```
**Option C: Mit WinSCP (GUI)**
1. WinSCP herunterladen und installieren
2. Verbindung zu deinem Server herstellen
3. Verzeichnis erstellen: `/opt/skrift-backend`
4. Diese Ordner hochladen:
- `src/` (kompletter Ordner)
- `fonts/` (kompletter Ordner)
- `package.json`
- `package-lock.json`
- `Dockerfile`
- `docker-compose.yml`
- `.dockerignore`
### Schritt 2: Auf dem Server einrichten
Per SSH auf den Server:
```bash
ssh root@DEINE-SERVER-IP
# Ins Backend-Verzeichnis
cd /opt/skrift-backend
# .env Datei erstellen (WICHTIG!)
cat > .env << 'EOF'
SCRIPTALIZER_LICENSE_KEY=f9918b40-d11c-11f0-b558-0800200c9a66
SCRIPTALIZER_ERR_FREQUENCY=0
BATCH_SIZE=30
CACHE_LIFETIME_HOURS=2
RATE_LIMIT_PER_MINUTE=2
NODE_ENV=production
PORT=4000
EOF
# Berechtigungen setzen
chmod 600 .env
# Output-Verzeichnis für N8N erstellen
mkdir -p /var/skrift-output
chmod 755 /var/skrift-output
# Docker Image bauen und Container starten
docker-compose up -d --build
# Logs ansehen (Ctrl+C zum Beenden)
docker-compose logs -f
```
### Schritt 3: Testen
```bash
# Health-Check auf dem Server
curl http://localhost:4000/health
# Sollte zurückgeben:
# {"status":"ok","timestamp":"2026-01-03T..."}
```
### Schritt 4: Nginx Proxy Manager einrichten
1. Öffne Nginx Proxy Manager (z.B. `http://dein-server.de:81`)
2. Login mit Admin-Credentials
3. "Proxy Hosts" → "Add Proxy Host"
**Details Tab:**
- Domain Names: `backend.deine-domain.de` (oder `skrift-backend.deine-domain.de`)
- Scheme: `http`
- Forward Hostname/IP: `skrift-backend` (der Docker Container Name!)
- Forward Port: `4000`
- Cache Assets: ✓ aktivieren
- Block Common Exploits: ✓ aktivieren
- Websockets Support: nicht aktivieren
**SSL Tab:**
- SSL Certificate: "Request a new SSL Certificate"
- Force SSL: ✓ aktivieren
- Email Address: deine-email@domain.de
- I Agree to the Terms: ✓ aktivieren
4. "Save" klicken
### Schritt 5: Finaler Test
Von deinem lokalen Rechner:
```bash
curl https://backend.deine-domain.de/health
```
## Updates durchführen
Wenn du Code-Änderungen gemacht hast:
```bash
# 1. Lokal: Neue Version zum Server kopieren
rsync -avz --progress \
--exclude='node_modules' \
--exclude='output' \
--exclude='cache' \
"/e/Dokumente/05_Skrift/Frontend_Backend_Konfigurator/Docker Backend/" \
root@DEINE-SERVER-IP:/opt/skrift-backend/
# 2. Auf Server: Container neu bauen
ssh root@DEINE-SERVER-IP "cd /opt/skrift-backend && docker-compose up -d --build"
# 3. Logs prüfen
ssh root@DEINE-SERVER-IP "cd /opt/skrift-backend && docker-compose logs -f"
```
## Automatisches Update-Script
Erstelle eine Datei `update.sh` auf deinem lokalen Rechner:
```bash
#!/bin/bash
SERVER="root@DEINE-SERVER-IP"
REMOTE_PATH="/opt/skrift-backend"
LOCAL_PATH="/e/Dokumente/05_Skrift/Frontend_Backend_Konfigurator/Docker Backend"
echo "Syncing files to server..."
rsync -avz --progress \
--exclude='node_modules' \
--exclude='output' \
--exclude='cache' \
--exclude='.git' \
"$LOCAL_PATH/" \
"$SERVER:$REMOTE_PATH/"
echo "Rebuilding container on server..."
ssh $SERVER "cd $REMOTE_PATH && docker-compose up -d --build"
echo "Done! Checking logs..."
ssh $SERVER "cd $REMOTE_PATH && docker-compose logs --tail=50"
```
Dann einfach ausführen:
```bash
bash update.sh
```
## Vorteile dieser Methode
**Privat**: Nur auf deinem Server, niemand sonst kann es sehen
**Einfach**: Keine Docker Hub Registrierung nötig
**Schnell**: Direkt auf dem Server gebaut
**Sicher**: Keine Credentials in der Cloud
**Flexibel**: Änderungen sofort deployen
## Troubleshooting
### Verbindung fehlgeschlagen
```bash
# SSH-Verbindung testen
ssh root@DEINE-SERVER-IP
# Falls Fehler: SSH-Key einrichten
ssh-keygen -t rsa -b 4096
ssh-copy-id root@DEINE-SERVER-IP
```
### Container startet nicht
```bash
# Logs prüfen
ssh root@DEINE-SERVER-IP "cd /opt/skrift-backend && docker-compose logs"
# Häufige Probleme:
# - .env fehlt → Schritt 2 wiederholen
# - Fonts fehlen → fonts/ Ordner hochladen
# - Port 4000 belegt → docker-compose.yml anpassen
```
### Nginx Proxy erreicht Container nicht
```bash
# Prüfen ob Container im richtigen Netzwerk ist
ssh root@DEINE-SERVER-IP "docker network ls"
ssh root@DEINE-SERVER-IP "docker network inspect skrift-network"
# Container Name prüfen
ssh root@DEINE-SERVER-IP "docker ps | grep skrift"
# In Nginx Proxy Manager: Forward Hostname = "skrift-backend" (Container-Name)
```
### Build dauert zu lange
```bash
# Cache löschen und neu bauen
ssh root@DEINE-SERVER-IP "cd /opt/skrift-backend && docker-compose build --no-cache"
```
## Sicherheit
- `.env` Datei wird **nur** auf dem Server erstellt (nicht hochgeladen)
- `.dockerignore` verhindert Upload von sensiblen Dateien
- Nur notwendige Ports werden geöffnet (4000 nur intern)
- Nginx Proxy Manager mit SSL-Verschlüsselung
- Rate Limiting ist bereits im Backend implementiert
## Backup
```bash
# Auf dem Server
# 1. Code-Backup
tar -czf /root/skrift-backend-backup-$(date +%Y%m%d).tar.gz /opt/skrift-backend
# 2. Output-Dateien Backup
tar -czf /root/skrift-output-backup-$(date +%Y%m%d).tar.gz /var/skrift-output
# 3. Zu lokalem Rechner herunterladen
scp root@DEINE-SERVER-IP:/root/skrift-*-backup-*.tar.gz ./backups/
```
## Kompletter Workflow - Schritt für Schritt
```bash
# === AUF LOKALEM RECHNER ===
# 1. Ins Verzeichnis wechseln
cd "E:\Dokumente\05_Skrift\Frontend_Backend_Konfigurator\Docker Backend"
# 2. Zum Server kopieren
rsync -avz --exclude='node_modules' --exclude='output' --exclude='cache' ./ root@SERVER:/opt/skrift-backend/
# === AUF DEM SERVER (per SSH) ===
# 3. Verbinden
ssh root@SERVER
# 4. Setup
cd /opt/skrift-backend
cat > .env << 'EOF'
SCRIPTALIZER_LICENSE_KEY=f9918b40-d11c-11f0-b558-0800200c9a66
SCRIPTALIZER_ERR_FREQUENCY=0
BATCH_SIZE=30
NODE_ENV=production
EOF
mkdir -p /var/skrift-output
docker-compose up -d --build
# 5. Testen
curl http://localhost:4000/health
# === IN NGINX PROXY MANAGER (Browser) ===
# 6. Proxy Host erstellen
# Domain: backend.deine-domain.de
# Forward to: skrift-backend:4000
# SSL: Let's Encrypt aktivieren
# === FERTIG! ===
# Von überall testen:
curl https://backend.deine-domain.de/health
```