9.5 KiB
9.5 KiB
Deployment Guide - LinkedIn Post Creation System
Diese Anleitung erklärt, wie du die LinkedIn Post App auf deinem Server mit Docker deployen kannst.
Voraussetzungen
- Ein Server (VPS/Cloud) mit:
- Ubuntu 20.04+ oder Debian 11+
- Mindestens 1GB RAM
- Docker & Docker Compose installiert
- Domain (optional, für HTTPS)
- API Keys:
- OpenAI API Key
- Perplexity API Key
- Apify API Key
- Supabase URL & Key
Schritt 1: Server vorbereiten
Docker installieren (falls nicht vorhanden)
# System aktualisieren
sudo apt update && sudo apt upgrade -y
# Docker installieren
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# Docker Compose installieren
sudo apt install docker-compose-plugin -y
# Aktuellen User zur Docker-Gruppe hinzufügen
sudo usermod -aG docker $USER
# Neu einloggen oder:
newgrp docker
# Testen
docker --version
docker compose version
Schritt 2: Projekt auf den Server laden
Option A: Mit Git (empfohlen)
# Repository klonen
git clone https://github.com/dein-username/LinkedInWorkflow.git
cd LinkedInWorkflow
Option B: Mit SCP (von deinem lokalen Rechner)
# Auf deinem lokalen Rechner:
scp -r /pfad/zu/LinkedInWorkflow user@dein-server:/home/user/
Option C: Mit rsync
# Auf deinem lokalen Rechner:
rsync -avz --exclude '.env' --exclude '__pycache__' --exclude '.git' \
/pfad/zu/LinkedInWorkflow/ user@dein-server:/home/user/LinkedInWorkflow/
Schritt 3: Umgebungsvariablen konfigurieren
cd LinkedInWorkflow
# .env Datei aus Vorlage erstellen
cp .env.example .env
# .env bearbeiten
nano .env
Wichtige Einstellungen in der .env:
# Web-Passwort (UNBEDINGT ÄNDERN!)
WEB_PASSWORD=dein-sicheres-passwort-hier
# API Keys (deine echten Keys eintragen)
OPENAI_API_KEY=sk-...
PERPLEXITY_API_KEY=pplx-...
APIFY_API_KEY=apify_api_...
# Supabase
SUPABASE_URL=https://dein-projekt.supabase.co
SUPABASE_KEY=dein-supabase-key
# Production Settings
DEBUG=false
LOG_LEVEL=INFO
Wichtig: Die .env Datei sollte NIEMALS committed werden!
Schritt 4: Docker Container starten
# Im Projektverzeichnis:
cd LinkedInWorkflow
# Container bauen und starten
docker compose up -d --build
# Logs ansehen
docker compose logs -f
# Status prüfen
docker compose ps
Die App ist jetzt unter http://dein-server:8000 erreichbar.
Schritt 5: Firewall konfigurieren (optional aber empfohlen)
# UFW installieren (falls nicht vorhanden)
sudo apt install ufw -y
# SSH erlauben (WICHTIG - sonst sperrst du dich aus!)
sudo ufw allow ssh
# Port 8000 erlauben
sudo ufw allow 8000
# Firewall aktivieren
sudo ufw enable
# Status prüfen
sudo ufw status
Schritt 6: Reverse Proxy mit Nginx & SSL (empfohlen für Production)
Nginx installieren
sudo apt install nginx -y
Nginx Konfiguration erstellen
sudo nano /etc/nginx/sites-available/linkedin-posts
Inhalt:
server {
listen 80;
server_name deine-domain.de;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
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;
proxy_cache_bypass $http_upgrade;
proxy_read_timeout 86400;
}
}
Nginx aktivieren
# Symlink erstellen
sudo ln -s /etc/nginx/sites-available/linkedin-posts /etc/nginx/sites-enabled/
# Default-Site entfernen
sudo rm /etc/nginx/sites-enabled/default
# Konfiguration testen
sudo nginx -t
# Nginx neu starten
sudo systemctl restart nginx
SSL mit Let's Encrypt (kostenlos)
# Certbot installieren
sudo apt install certbot python3-certbot-nginx -y
# SSL-Zertifikat beantragen
sudo certbot --nginx -d deine-domain.de
# Auto-Renewal testen
sudo certbot renew --dry-run
Nützliche Befehle
Container Management
# Container stoppen
docker compose down
# Container neu starten
docker compose restart
# Container neu bauen (nach Code-Änderungen)
docker compose up -d --build
# In Container einloggen
docker compose exec linkedin-posts bash
# Logs ansehen (live)
docker compose logs -f
# Logs der letzten 100 Zeilen
docker compose logs --tail=100
Updates einspielen
# Code aktualisieren (mit Git)
git pull
# Container neu bauen
docker compose up -d --build
Backup
# .env sichern (enthält alle Secrets!)
cp .env .env.backup
# Alle Daten sind in Supabase - kein lokales Backup nötig
Troubleshooting
Container startet nicht
# Logs ansehen
docker compose logs linkedin-posts
# Container-Status prüfen
docker compose ps -a
# Neustart erzwingen
docker compose down && docker compose up -d --build
Port bereits belegt
# Prüfen was auf Port 8000 läuft
sudo lsof -i :8000
# Prozess beenden
sudo kill -9 <PID>
Keine Verbindung zu Supabase
- Prüfe ob SUPABASE_URL und SUPABASE_KEY korrekt sind
- Prüfe ob der Server ausgehende Verbindungen erlaubt
- Teste:
curl -I https://dein-projekt.supabase.co
Passwort vergessen
# .env bearbeiten
nano .env
# WEB_PASSWORD ändern
# Container neu starten
docker compose restart
Sicherheitsempfehlungen
- Starkes Passwort verwenden - Mindestens 16 Zeichen, Sonderzeichen
- HTTPS aktivieren - Mit Nginx + Let's Encrypt (siehe Schritt 6)
- Firewall konfigurieren - Nur nötige Ports öffnen
- Server aktuell halten -
sudo apt update && sudo apt upgrade - Docker aktuell halten -
sudo apt upgrade docker-ce - Keine API Keys committen - .env in .gitignore
Monitoring (optional)
Einfaches Health-Check Script
# health-check.sh erstellen
cat > health-check.sh << 'EOF'
#!/bin/bash
if curl -s -o /dev/null -w "%{http_code}" http://localhost:8000/login | grep -q "200"; then
echo "$(date): OK"
else
echo "$(date): FEHLER - Neustart..."
docker compose restart
fi
EOF
chmod +x health-check.sh
# Als Cron-Job (alle 5 Minuten)
(crontab -l 2>/dev/null; echo "*/5 * * * * /home/user/LinkedInWorkflow/health-check.sh >> /var/log/linkedin-health.log 2>&1") | crontab -
Architektur
┌─────────────────────────────────────────────────────────┐
│ Internet │
└─────────────────────────┬───────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ Nginx (Port 80/443) │
│ - SSL Termination │
│ - Reverse Proxy │
└─────────────────────────┬───────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ Docker Container (Port 8000) │
│ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ FastAPI Application │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌────────────┐ │ │
│ │ │ Web UI │ │ API │ │ Agents │ │ │
│ │ │ (Jinja2) │ │ Endpoints │ │ (AI Logic) │ │ │
│ │ └─────────────┘ └─────────────┘ └────────────┘ │ │
│ └────────────────────────────────────────────────────┘ │
└─────────────────────────┬───────────────────────────────┘
│
┌───────────────┼───────────────┐
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Supabase │ │ OpenAI │ │ Perplexity│
│ DB │ │ API │ │ API │
└──────────┘ └──────────┘ └──────────┘
Support
Bei Problemen:
- Logs prüfen:
docker compose logs -f - GitHub Issues öffnen
- Container neu bauen:
docker compose up -d --build