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
| Dienst | Port | Typ |
|---|---|---|
| Backend-API | 3001 | Fastify |
| Admin-Dashboard | 3002 | Next.js |
| Kunden-Portal | 3003 | Next.js |
| Onboarding-Wizard | 3004 | Next.js |
| Marketing-Website | 3000 | Next.js |
| Web-Client | 5173 | Vite |
| PostgreSQL | 5432 | Docker |
| Redis | 6379 | Docker |
| MinIO API | 9000 | Docker |
| MinIO Console | 9001 | Docker |
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 saveEinzelne Dienste
Nur Backend aktualisieren
bash
cd /var/www/backend-api
git pull
npm install
npx prisma generate
npx prisma migrate deploy
pm2 restart backend-apiNur 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 passenNur 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 -dPM2 Befehlsreferenz
| Befehl | Beschreibung |
|---|---|
pm2 status | Alle Prozesse mit Status, CPU, RAM |
pm2 logs | Alle Logs live (Strg+C zum Beenden) |
pm2 logs backend-api | Nur Logs eines Prozesses |
pm2 logs backend-api --lines 100 | Letzte 100 Zeilen |
pm2 restart all | Alle Prozesse neu starten |
pm2 restart backend-api | Einzelnen Prozess neu starten |
pm2 stop all | Alle Prozesse stoppen |
pm2 stop portal | Einzelnen Prozess stoppen |
pm2 delete all | Alle Prozesse entfernen |
pm2 monit | Echtzeit-Dashboard (CPU, RAM, Logs) |
pm2 save | Aktuellen Zustand speichern (für Reboot) |
pm2 startup | Autostart-Service einrichten |
pm2 flush | Alle 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-ClientPM2-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 --timePrisma-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 deployDocker-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 -dgit pull schlägt fehl (lokale Änderungen)
bash
git stash # Lokale Änderungen sichern
git pull # Remote-Stand holen
git stash pop # Änderungen wieder anwenden (optional)