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