collabrix/teamchat-daemon.sh
DGSoft a7ff948e7e Beta Release: Complete Kanban system with auto-save, route persistence, and UI improvements
- Added complete Kanban board functionality with drag-and-drop
- Implemented auto-save for Kanban card editing (no more edit button)
- Added route persistence to remember last visited page on reload
- Improved Kanban UI design with slimmer borders and compact layout
- Added checklist functionality for Kanban cards
- Enhanced file upload and direct messaging features
- Improved authentication and user management
- Added toast notifications system
- Various UI/UX improvements and bug fixes
2025-12-10 23:17:07 +01:00

223 lines
5.1 KiB
Bash
Executable File

#!/bin/bash
# Team Chat System - Systemd Daemon
# Läuft als Systemd-Service und hält die Services am Leben
set -e
# Konfiguration
PROJECT_DIR="/home/OfficeDesk"
BACKEND_DIR="$PROJECT_DIR/backend"
FRONTEND_DIR="$PROJECT_DIR/frontend"
LOG_DIR="$PROJECT_DIR/logs"
# PID-Dateien
BACKEND_PID_FILE="$LOG_DIR/backend.pid"
FRONTEND_PID_FILE="$LOG_DIR/frontend.pid"
# Log-Dateien
BACKEND_LOG="$LOG_DIR/backend.log"
FRONTEND_LOG="$LOG_DIR/frontend.log"
# Erstelle Log-Verzeichnis falls nicht vorhanden
mkdir -p "$LOG_DIR"
# Farben für Ausgabe (nur wenn Terminal interaktiv)
if [[ -t 1 ]]; then
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
else
RED=''
GREEN=''
YELLOW=''
BLUE=''
NC=''
fi
# Hilfsfunktionen
log() {
echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] $1${NC}" >&2
}
error() {
echo -e "${RED}[ERROR] $1${NC}" >&2
}
warning() {
echo -e "${YELLOW}[WARNING] $1${NC}" >&2
}
info() {
echo -e "${BLUE}[INFO] $1${NC}" >&2
}
# Prüft ob ein Prozess läuft
is_running() {
local pid_file=$1
if [[ -f "$pid_file" ]]; then
local pid=$(cat "$pid_file")
if kill -0 "$pid" 2>/dev/null; then
return 0 # Läuft
else
rm -f "$pid_file" # PID-Datei aufräumen
return 1 # Läuft nicht
fi
fi
return 1 # Läuft nicht
}
# Backend starten
start_backend() {
if is_running "$BACKEND_PID_FILE"; then
warning "Backend läuft bereits (PID: $(cat $BACKEND_PID_FILE))"
return 0
fi
log "Starte Backend-Server..."
cd "$BACKEND_DIR"
# Starte Backend im Hintergrund
nohup /bin/python -m uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload > "$BACKEND_LOG" 2>&1 &
local backend_pid=$!
# Warte kurz und prüfe ob der Prozess gestartet ist
sleep 2
if kill -0 $backend_pid 2>/dev/null; then
echo $backend_pid > "$BACKEND_PID_FILE"
log "✅ Backend gestartet (PID: $backend_pid)"
else
error "Backend konnte nicht gestartet werden"
cat "$BACKEND_LOG" 2>/dev/null || true
return 1
fi
}
# Frontend starten
start_frontend() {
if is_running "$FRONTEND_PID_FILE"; then
warning "Frontend läuft bereits (PID: $(cat $FRONTEND_PID_FILE))"
return 0
fi
log "Starte Frontend-Server (Production)..."
cd "$FRONTEND_DIR"
# Starte Production Server anstatt dev server
/home/OfficeDesk/frontend-production.sh > "$FRONTEND_LOG" 2>&1 &
local frontend_pid=$!
# Warte kurz und prüfe ob der Prozess gestartet ist
sleep 3
if kill -0 $frontend_pid 2>/dev/null; then
echo $frontend_pid > "$FRONTEND_PID_FILE"
log "✅ Frontend gestartet (PID: $frontend_pid)"
else
error "Frontend konnte nicht gestartet werden"
cat "$FRONTEND_LOG" 2>/dev/null || true
return 1
fi
}
# Backend stoppen
stop_backend() {
if ! is_running "$BACKEND_PID_FILE"; then
return 0
fi
local pid=$(cat "$BACKEND_PID_FILE")
log "Stoppe Backend (PID: $pid)..."
if kill "$pid" 2>/dev/null; then
# Warte bis der Prozess beendet ist
local count=0
while kill -0 "$pid" 2>/dev/null && [ $count -lt 10 ]; do
sleep 1
((count++))
done
if kill -0 "$pid" 2>/dev/null; then
kill -9 "$pid" 2>/dev/null || true
fi
rm -f "$BACKEND_PID_FILE"
log "✅ Backend gestoppt"
else
error "Backend konnte nicht gestoppt werden"
return 1
fi
}
# Frontend stoppen
stop_frontend() {
if ! is_running "$FRONTEND_PID_FILE"; then
return 0
fi
local pid=$(cat "$FRONTEND_PID_FILE")
log "Stoppe Frontend (PID: $pid)..."
if kill "$pid" 2>/dev/null; then
# Warte bis der Prozess beendet ist
local count=0
while kill -0 "$pid" 2>/dev/null && [ $count -lt 10 ]; do
sleep 1
((count++))
done
if kill -0 "$pid" 2>/dev/null; then
kill -9 "$pid" 2>/dev/null || true
fi
rm -f "$FRONTEND_PID_FILE"
log "✅ Frontend gestoppt"
else
error "Frontend konnte nicht gestoppt werden"
return 1
fi
}
# Signal-Handler für sauberes Beenden
cleanup() {
log "Beende Team Chat System..."
stop_frontend
stop_backend
log "✅ System beendet"
exit 0
}
# Signale abfangen
trap cleanup SIGTERM SIGINT
# Hauptlogik für Systemd
log "Starte Team Chat System als Systemd-Service..."
# Services starten
start_backend
start_frontend
log "✅ Team Chat System läuft"
log "📍 Frontend: http://192.168.0.12"
log "📍 Backend: http://localhost:8000"
# Warte auf Signale (Systemd hält den Prozess am Leben)
while true; do
# Prüfe alle 30 Sekunden ob die Services noch laufen
sleep 30
# Backend neu starten falls nötig
if ! is_running "$BACKEND_PID_FILE"; then
warning "Backend ist nicht mehr aktiv, starte neu..."
start_backend
fi
# Frontend neu starten falls nötig
if ! is_running "$FRONTEND_PID_FILE"; then
warning "Frontend ist nicht mehr aktiv, starte neu..."
start_frontend
fi
done