Initial commit
This commit is contained in:
319
Docker Backend/DEPLOYMENT_EINFACH.md
Normal file
319
Docker Backend/DEPLOYMENT_EINFACH.md
Normal file
@@ -0,0 +1,319 @@
|
||||
# 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
|
||||
```
|
||||
Reference in New Issue
Block a user