Skip to content

Deployment & Betrieb

Vollständige Anleitung zum Aktualisieren, Starten und Betreiben aller Prilog-Dienste. Alle Applikationen laufen mit PM2 für Process-Management und Persistenz.

Voraussetzungen

  • Node.js 20+
  • Docker + Docker Compose
  • PM2 (npm install -g pm2)
  • Git-Zugriff auf alle Repos

Ports

DienstPortTyp
Backend-API3001Fastify
Admin-Dashboard3002Next.js
Kunden-Portal3003Next.js
Onboarding-Wizard3004Next.js
Marketing-Website3000Next.js
Web-Client5173Vite
PostgreSQL5432Docker
Redis6379Docker
MinIO API9000Docker
MinIO Console9001Docker

Vollständiges Update & Start

Dieses Script pullt alle Repos, installiert Dependencies, führt Migrationen aus und startet alle Dienste mit PM2.

bash
#!/bin/bash
set -e

echo "═══════════════════════════════════════════════════════"
echo "  PRILOG — Update & Start ($(date '+%Y-%m-%d %H:%M'))"
echo "═══════════════════════════════════════════════════════"

# ── 0. Laufende Prozesse stoppen ──────────────────────────────
echo ""
echo "▸ PM2-Prozesse stoppen..."
pm2 stop all 2>/dev/null || true
pm2 delete all 2>/dev/null || true

# ── 1. Infra-Repo pullen ──────────────────────────────────────
echo ""
echo "▸ Infra-Repo aktualisieren..."
cd /var/www/prilog-infra
git stash 2>/dev/null || true
git pull

# Docker-Infrastruktur nur bei lokaler Entwicklung:
# docker compose -f docker-compose.dev.yml up -d

# ── 2. Backend-API (Fastify + Prisma) ─────────────────────────
echo ""
echo "▸ Backend-API aktualisieren..."
cd /var/www/backend-api
git pull
npm install --silent
npx prisma generate
npx prisma migrate deploy
npx tsx prisma/seed-module-registry.ts
pm2 start "npx tsx watch src/server.ts" \
  --name backend-api \
  --cwd /var/www/backend-api \
  --time

# Warten bis Backend antwortet
echo "  Warte auf Backend (Port 3001)..."
until curl -sf http://localhost:3001/health > /dev/null 2>&1; do
  sleep 1
done
echo "  Backend bereit."

# ── 3. Admin-Dashboard (Next.js, Port 3002) ───────────────────
echo ""
echo "▸ Admin-Dashboard aktualisieren..."
cd /var/www/prilog-admin
git pull
npm install --silent
pm2 start "npm run dev" \
  --name admin \
  --cwd /var/www/prilog-admin \
  --time

# ── 4. Kunden-Portal (Next.js, Port 3003) ─────────────────────
echo ""
echo "▸ Kunden-Portal aktualisieren..."
cd /var/www/prilog-portal
git pull
npm install --silent
pm2 start "npm run dev" \
  --name portal \
  --cwd /var/www/prilog-portal \
  --time

# ── 5. Web-Client (Vite, Port 5173) ───────────────────────────
echo ""
echo "▸ Web-Client aktualisieren..."
cd /var/www/prilog-web-client
git pull
npm install --silent
pm2 start "npm run dev" \
  --name web-client \
  --cwd /var/www/prilog-web-client \
  --time

# ── 6. Marketing-Website (Next.js, Port 3000) ─────────────────
echo ""
echo "▸ Marketing-Website aktualisieren..."
cd /var/www/prilog-marketing
git pull
npm install --silent
pm2 start "npm run dev" \
  --name marketing \
  --cwd /var/www/prilog-marketing \
  --time

# ── 7. Onboarding-Wizard (Next.js, Port 3004) ─────────────────
echo ""
echo "▸ Onboarding-Wizard aktualisieren..."
cd /var/www/prilog-onboarding
git pull
npm install --silent
pm2 start "npm run dev" \
  --name onboarding \
  --cwd /var/www/prilog-onboarding \
  --time

# ── 8. SDK (nur Build, kein Server) ───────────────────────────
echo ""
echo "▸ SDK bauen..."
cd /var/www/prilog-sdk
git pull
npm install --silent
npm run build

# ── 9. Shared Packages (nur Install) ──────────────────────────
echo ""
echo "▸ Shared Packages aktualisieren..."
cd /var/www/prilog-types && git pull && npm install --silent
cd /var/www/prilog-api-client && git pull && npm install --silent

# ── 10. Agent (nur Pull + Install) ────────────────────────────
echo ""
echo "▸ Agent aktualisieren..."
cd /var/www/prilog-agent && git pull && npm install --silent

# ── 11. Docs (nur Pull) ───────────────────────────────────────
echo ""
echo "▸ Docs aktualisieren..."
cd /var/www/prilog_docs && git pull && npm install --silent

# ── 12. Python-Projekte (nur Pull) ────────────────────────────
echo ""
echo "▸ Python-Projekte aktualisieren..."
cd /var/www/prilog-bot && git pull
cd /var/www/prilog-matrix-connector && git pull

# ── 13. PM2 persistieren ──────────────────────────────────────
echo ""
echo "▸ PM2-Konfiguration speichern..."
pm2 save

# ── Fertig ─────────────────────────────────────────────────────
echo ""
echo "═══════════════════════════════════════════════════════"
echo "  Alle Dienste gestartet."
echo "═══════════════════════════════════════════════════════"
echo ""
pm2 status
echo ""
echo "Nützliche Befehle:"
echo "  pm2 status              Alle Prozesse anzeigen"
echo "  pm2 logs                Alle Logs live"
echo "  pm2 logs backend-api    Nur Backend-Logs"
echo "  pm2 restart all         Alle neu starten"
echo "  pm2 restart backend-api Nur Backend"
echo "  pm2 stop all            Alle stoppen"
echo "  pm2 monit               Echtzeit-Monitoring"

Ersteinrichtung (einmalig)

Beim allerersten Deployment auf einem neuen Server:

bash
# 1. PM2 global installieren
npm install -g pm2

# 2. PM2 Autostart einrichten (überlebt Reboot)
pm2 startup
# → Gibt einen sudo-Befehl aus, diesen ausführen, z.B.:
# sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u lee --hp /home/lee

# 3. Update-Script ausführbar machen
chmod +x /var/www/prilog-update.sh

# 4. Script ausführen
/var/www/prilog-update.sh

# 5. PM2-Zustand speichern (wird beim Reboot wiederhergestellt)
pm2 save

Einzelne Dienste

Nur Backend aktualisieren

bash
cd /var/www/backend-api
git pull
npm install
npx prisma generate
npx prisma migrate deploy
pm2 restart backend-api

Nur ein Frontend aktualisieren

bash
cd /var/www/prilog-portal   # oder prilog-admin, prilog-web-client, etc.
git pull
npm install
pm2 restart portal          # Name muss zum PM2-Prozess passen

Nur Docker-Infrastruktur neu starten

bash
cd /var/www/prilog-infra
docker compose -f docker-compose.dev.yml down
docker compose -f docker-compose.dev.yml up -d

PM2 Befehlsreferenz

BefehlBeschreibung
pm2 statusAlle Prozesse mit Status, CPU, RAM
pm2 logsAlle Logs live (Strg+C zum Beenden)
pm2 logs backend-apiNur Logs eines Prozesses
pm2 logs backend-api --lines 100Letzte 100 Zeilen
pm2 restart allAlle Prozesse neu starten
pm2 restart backend-apiEinzelnen Prozess neu starten
pm2 stop allAlle Prozesse stoppen
pm2 stop portalEinzelnen Prozess stoppen
pm2 delete allAlle Prozesse entfernen
pm2 monitEchtzeit-Dashboard (CPU, RAM, Logs)
pm2 saveAktuellen Zustand speichern (für Reboot)
pm2 startupAutostart-Service einrichten
pm2 flushAlle Log-Dateien leeren

Troubleshooting

Port bereits belegt

bash
# Prozess auf Port finden und beenden
kill $(lsof -t -i:3001)    # Backend
kill $(lsof -t -i:3002)    # Admin
kill $(lsof -t -i:3003)    # Portal
kill $(lsof -t -i:5173)    # Web-Client

PM2-Prozess startet nicht

bash
# Logs prüfen
pm2 logs backend-api --lines 50

# Prozess löschen und neu starten
pm2 delete backend-api
pm2 start "npx tsx watch src/server.ts" --name backend-api --cwd /var/www/backend-api --time

Prisma-Migration schlägt fehl

bash
cd /var/www/backend-api

# Fehlgeschlagene Migration als applied markieren
npx prisma migrate resolve --applied MIGRATION_NAME

# Dann erneut deployen
npx prisma migrate deploy

Docker-Container starten nicht

bash
cd /var/www/prilog-infra
docker compose -f docker-compose.dev.yml down -v   # Volumes löschen (ACHTUNG: Daten weg!)
docker compose -f docker-compose.dev.yml up -d

git pull schlägt fehl (lokale Änderungen)

bash
git stash        # Lokale Änderungen sichern
git pull         # Remote-Stand holen
git stash pop    # Änderungen wieder anwenden (optional)