# Deployment Anleitung - Skrift Backend ## Übersicht Diese Anleitung zeigt, wie du das Skrift Backend auf deinen vServer deployst. ## Voraussetzungen auf dem Server - Ubuntu/Debian Linux Server - Docker und Docker Compose installiert - Nginx Proxy Manager läuft bereits - SSH-Zugang zum Server ## Option 1: Docker Image über Docker Hub (EMPFOHLEN) ### Schritt 1: Docker Image erstellen und pushen Auf deinem lokalen Rechner: ```bash # 1. Ins Backend-Verzeichnis wechseln cd "E:\Dokumente\05_Skrift\Frontend_Backend_Konfigurator\Docker Backend" # 2. Docker Login (benötigt Docker Hub Account) docker login # 3. Image bauen (ersetze 'deinusername' mit deinem Docker Hub Username) docker build -t deinusername/skrift-backend:latest . # 4. Image zu Docker Hub pushen docker push deinusername/skrift-backend:latest ``` ### Schritt 2: Auf dem Server deployen Per SSH auf dem Server: ```bash # 1. Verzeichnis erstellen mkdir -p /opt/skrift-backend cd /opt/skrift-backend # 2. docker-compose.yml erstellen (siehe unten) nano docker-compose.yml # 3. .env Datei erstellen nano .env # 4. Fonts-Ordner erstellen und Fonts hochladen mkdir fonts # Fonts per SCP hochladen (siehe Schritt 3) # 5. Output-Verzeichnis erstellen mkdir -p /var/skrift-output chmod 755 /var/skrift-output # 6. Container starten docker-compose up -d # 7. Logs prüfen docker-compose logs -f ``` ### Schritt 3: Fonts per SCP hochladen Auf deinem lokalen Rechner: ```bash # Fonts zum Server kopieren scp "E:\Dokumente\05_Skrift\Frontend_Backend_Konfigurator\Docker Backend\fonts\*.svg" \ root@dein-server.de:/opt/skrift-backend/fonts/ ``` ### docker-compose.yml für Server ```yaml version: '3.8' services: skrift-backend: image: deinusername/skrift-backend:latest # Dein Docker Hub Image container_name: skrift-backend restart: unless-stopped ports: - "4000:4000" # Oder anderer Port environment: - NODE_ENV=production - PORT=4000 - SCRIPTALIZER_LICENSE_KEY=${SCRIPTALIZER_LICENSE_KEY} - SCRIPTALIZER_ERR_FREQUENCY=0 - BATCH_SIZE=30 - CACHE_LIFETIME_HOURS=2 - RATE_LIMIT_PER_MINUTE=2 volumes: - ./fonts:/app/fonts:ro - skrift-cache:/app/cache - /var/skrift-output:/app/output networks: - skrift-network volumes: skrift-cache: driver: local networks: skrift-network: driver: bridge ``` ### .env Datei für Server ```bash # Scriptalizer API SCRIPTALIZER_LICENSE_KEY=f9918b40-d11c-11f0-b558-0800200c9a66 SCRIPTALIZER_ERR_FREQUENCY=0 # Preview Settings BATCH_SIZE=30 CACHE_LIFETIME_HOURS=2 RATE_LIMIT_PER_MINUTE=2 # Environment NODE_ENV=production ``` ## Option 2: Direkt vom Server bauen ### Schritt 1: Code auf Server übertragen ```bash # Auf lokalem Rechner: Komplettes Backend-Verzeichnis kopieren scp -r "E:\Dokumente\05_Skrift\Frontend_Backend_Konfigurator\Docker Backend" \ root@dein-server.de:/opt/skrift-backend/ # Oder mit rsync (besser): rsync -avz --exclude 'node_modules' --exclude 'output' --exclude 'cache' \ "E:\Dokumente\05_Skrift\Frontend_Backend_Konfigurator\Docker Backend/" \ root@dein-server.de:/opt/skrift-backend/ ``` ### Schritt 2: Auf Server bauen und starten ```bash # Per SSH auf dem Server cd /opt/skrift-backend # Output-Verzeichnis erstellen mkdir -p /var/skrift-output chmod 755 /var/skrift-output # Container bauen und starten docker-compose up -d --build # Logs prüfen docker-compose logs -f ``` ## Option 3: Mit GitHub/GitLab (BESTE PRAXIS für Produktion) ### Schritt 1: Repository erstellen ```bash # Auf lokalem Rechner cd "E:\Dokumente\05_Skrift\Frontend_Backend_Konfigurator\Docker Backend" git init git add . git commit -m "Initial commit" # GitHub/GitLab Repository erstellen, dann: git remote add origin https://github.com/deinusername/skrift-backend.git git push -u origin main ``` ### Schritt 2: Auf Server clonen und deployen ```bash # Auf dem Server cd /opt git clone https://github.com/deinusername/skrift-backend.git cd skrift-backend # .env erstellen (nicht in Git!) nano .env # Output-Verzeichnis erstellen mkdir -p /var/skrift-output chmod 755 /var/skrift-output # Starten docker-compose up -d --build # Bei Updates einfach: git pull docker-compose up -d --build ``` ## Nginx Proxy Manager Konfiguration 1. Im Nginx Proxy Manager eine neue "Proxy Host" erstellen: - **Domain Names**: `backend.deine-domain.de` (oder Subdomain deiner Wahl) - **Scheme**: `http` - **Forward Hostname/IP**: `skrift-backend` (Container-Name) - **Forward Port**: `4000` - **Cache Assets**: aktivieren - **Block Common Exploits**: aktivieren - **Websockets Support**: deaktivieren 2. SSL-Zertifikat: - Tab "SSL" öffnen - "Request a new SSL Certificate" auswählen - "Force SSL" aktivieren - Let's Encrypt Email eingeben 3. Optional - Custom Nginx Configuration: ```nginx # Größere Request Body Size für große Texte client_max_body_size 10M; # Timeouts für lange Scriptalizer-Calls proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; ``` ## Nützliche Docker-Befehle ```bash # Container Status prüfen docker-compose ps # Logs anzeigen docker-compose logs -f # Container neu starten docker-compose restart # Container stoppen docker-compose down # Container stoppen und Volumes löschen docker-compose down -v # In Container-Shell gehen docker exec -it skrift-backend sh # Image neu bauen docker-compose build --no-cache # Alte Images aufräumen docker image prune -a ``` ## Gesundheits-Check Nach dem Deployment: ```bash # Lokal vom Server curl http://localhost:4000/health # Über Domain (nach Nginx Proxy Setup) curl https://backend.deine-domain.de/health # Sollte zurückgeben: # {"status":"ok","timestamp":"2026-01-03T..."} ``` ## WordPress Integration In deinem WordPress Plugin (Frontend) die Backend-URL konfigurieren: ```javascript // WordPress Plugin Einstellungen const BACKEND_URL = 'https://backend.deine-domain.de'; // API Calls fetch(`${BACKEND_URL}/api/preview/batch`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ sessionId: 'session-uuid', letters: [...] }) }); ``` ## N8N Integration N8N kann die generierten Dateien im `/var/skrift-output` Verzeichnis abholen: ```bash # N8N Workflow - File Trigger Node /var/skrift-output/*/order-metadata.json ``` Oder per API: ```bash # Webhook in N8N, wenn Bestellung fertig ist POST https://n8n.deine-domain.de/webhook/order-complete { "orderNumber": "SK-2026-01-03-001", "path": "/var/skrift-output/SK-2026-01-03-001" } ``` ## Troubleshooting ### Container startet nicht ```bash # Logs prüfen docker-compose logs # Typische Probleme: # - Fonts fehlen: Fonts-Ordner prüfen # - Port 4000 belegt: Port in docker-compose.yml ändern # - .env fehlt: .env Datei erstellen ``` ### Fonts werden nicht gefunden ```bash # In Container prüfen docker exec -it skrift-backend ls -la /app/fonts # Sollte zeigen: # tilda.svg # alva.svg # ellie.svg ``` ### API antwortet nicht ```bash # Nginx Proxy Logs prüfen docker logs nginx-proxy-manager # Backend Logs prüfen docker-compose logs skrift-backend # Firewall prüfen sudo ufw status sudo ufw allow 4000/tcp # Falls direkt ohne Proxy ``` ### Durchgestrichene Wörter erscheinen ```bash # SCRIPTALIZER_ERR_FREQUENCY in .env auf 0 setzen echo "SCRIPTALIZER_ERR_FREQUENCY=0" >> .env # Container neu starten docker-compose restart ``` ## Monitoring ### Einfaches Monitoring mit Healthcheck ```bash # Cronjob erstellen für Health-Check crontab -e # Jede 5 Minuten prüfen */5 * * * * curl -f http://localhost:4000/health || systemctl restart skrift-backend ``` ### Mit Uptime Kuma (empfohlen) 1. Uptime Kuma installieren (auch als Docker Container) 2. HTTP(s) Monitor erstellen für `https://backend.deine-domain.de/health` 3. Alert bei Ausfall per E-Mail/Telegram ## Backup ```bash # Fonts sichern (einmalig) tar -czf skrift-fonts-backup.tar.gz /opt/skrift-backend/fonts # Output-Dateien sichern (täglich via Cronjob) tar -czf skrift-output-$(date +%Y%m%d).tar.gz /var/skrift-output # Zu externem Speicher kopieren rsync -avz /var/skrift-output/ backup-server:/backups/skrift/ ``` ## Updates ### Update über Docker Hub ```bash # Neues Image bauen und pushen (lokal) docker build -t deinusername/skrift-backend:latest . docker push deinusername/skrift-backend:latest # Auf Server updaten docker-compose pull docker-compose up -d ``` ### Update über Git ```bash # Auf Server cd /opt/skrift-backend git pull docker-compose up -d --build ``` ## Sicherheit - `.env` Datei NIEMALS in Git committen - Regelmäßig Updates: `docker-compose pull` - Nginx Proxy Manager für SSL/TLS - Firewall: Nur notwendige Ports öffnen - Rate Limiting ist bereits im Backend implementiert - Regelmäßige Backups der Output-Dateien ## Support Bei Problemen: 1. Logs prüfen: `docker-compose logs -f` 2. Health-Endpoint testen: `curl http://localhost:4000/health` 3. Container Status: `docker-compose ps` 4. Ins Container-Shell: `docker exec -it skrift-backend sh`