first commit

This commit is contained in:
2026-06-29 09:52:02 +02:00
commit da2f7c3c86
31 changed files with 2306 additions and 0 deletions
+134
View File
@@ -0,0 +1,134 @@
#!/usr/bin/env bash
# ============================================================================
# EPI-Support Monitor Setup / Deploy auf dem Linux-Webserver (SRHNWEB)
#
# Annahme: die Projektdateien liegen bereits unter /var/www/html/episupport
# (z. B. per git clone, scp oder rsync dorthin kopiert).
#
# Aufruf auf dem Server:
# sudo bash /var/www/html/episupport/deploy/setup.sh
#
# Das Skript ist idempotent mehrfaches Ausführen ist unproblematisch
# (z. B. nach einem Update der Dateien für einen Neustart der Dienste).
# ============================================================================
set -euo pipefail
APP_DIR="/var/www/html/episupport"
SERVICE_USER="www-data"
PY="${PYTHON:-python3}"
bold() { printf "\033[1m%s\033[0m\n" "$*"; }
info() { printf " • %s\n" "$*"; }
if [[ $EUID -ne 0 ]]; then
echo "Bitte mit sudo/root ausführen: sudo bash $0" >&2
exit 1
fi
if [[ ! -f "$APP_DIR/wsgi.py" ]]; then
echo "Projektdateien nicht in $APP_DIR gefunden. Erst dorthin kopieren." >&2
exit 1
fi
cd "$APP_DIR"
# --- 1) System-Pakete (nur falls fehlend) -----------------------------------
bold "1/6 System-Pakete prüfen"
if ! command -v "$PY" >/dev/null; then
info "Installiere python3 ..."
apt-get update -qq && apt-get install -y python3 python3-venv python3-pip
fi
if ! "$PY" -m venv --help >/dev/null 2>&1; then
info "Installiere python3-venv ..."
apt-get update -qq && apt-get install -y python3-venv
fi
# --- 2) Virtualenv + Abhängigkeiten -----------------------------------------
bold "2/6 Python-Umgebung einrichten"
# Ein vorhandenes venv ohne bin/python ist ungültig (z. B. versehentlich von
# Windows mitkopiert -> hat venv/Scripts/ statt venv/bin/). Dann neu anlegen.
if [[ -d venv && ! -x venv/bin/python ]]; then
info "Ungültiges/fremdes venv gefunden wird neu erstellt"
rm -rf venv
fi
# Erreicht der Server PyPI? Falls nicht (häufig in abgeschotteten Netzen),
# installieren wir die Pakete über apt und geben dem venv via
# --system-site-packages Zugriff darauf.
PYPI_OK=1
if ! curl -sS --max-time 15 -o /dev/null https://pypi.org/simple/ 2>/dev/null; then
PYPI_OK=0
info "PyPI nicht erreichbar nutze System-Pakete (apt) statt pip"
fi
VENV_ARGS=""
[[ $PYPI_OK -eq 0 ]] && VENV_ARGS="--system-site-packages"
if [[ ! -x venv/bin/python ]]; then
if ! "$PY" -m venv $VENV_ARGS venv 2>/dev/null; then
info "venv-Erstellung fehlgeschlagen installiere python3-venv und versuche erneut"
apt-get update -qq && apt-get install -y python3-venv
"$PY" -m venv $VENV_ARGS venv
fi
info "venv erstellt"
fi
if [[ $PYPI_OK -eq 1 ]]; then
./venv/bin/python -m pip install --upgrade pip
./venv/bin/python -m pip install -r requirements.txt
else
apt-get update -qq
apt-get install -y python3-flask python3-requests python3-dotenv \
python3-openpyxl gunicorn
fi
# Verifizieren, dass alle Importe verfügbar sind
./venv/bin/python -c "import flask, requests, dotenv, openpyxl, gunicorn" \
&& info "Abhängigkeiten verfügbar" \
|| { echo " ! Python-Abhängigkeiten fehlen weiterhin." >&2; exit 1; }
# --- 3) Konfiguration + Datenverzeichnis ------------------------------------
bold "3/6 Konfiguration"
mkdir -p data
if [[ ! -f .env ]]; then
cp .env.example .env
info ".env aus Vorlage erstellt BITTE Zugangsdaten eintragen:"
info " nano $APP_DIR/.env"
else
info ".env vorhanden (unverändert gelassen)"
fi
chown -R "$SERVICE_USER:$SERVICE_USER" "$APP_DIR"
chmod 640 .env
info "Besitzrechte auf $SERVICE_USER gesetzt"
# --- 4) systemd-Dienste ------------------------------------------------------
bold "4/6 systemd-Dienste installieren"
cp deploy/episupport-web.service /etc/systemd/system/episupport-web.service
cp deploy/episupport-poller.service /etc/systemd/system/episupport-poller.service
systemctl daemon-reload
systemctl enable --now episupport-poller.service
systemctl enable --now episupport-web.service
info "episupport-web und episupport-poller aktiviert und gestartet"
# --- 5) Apache-Anbindung -----------------------------------------------------
bold "5/6 Apache konfigurieren"
a2enmod proxy proxy_http headers >/dev/null
cp deploy/episupport-apache.conf /etc/apache2/conf-available/episupport.conf
a2enconf episupport >/dev/null
if apache2ctl configtest 2>/dev/null; then
systemctl reload apache2
info "Apache neu geladen erreichbar unter http(s)://srhnweb/episupport"
else
echo " ! Apache-Konfigtest fehlgeschlagen bitte prüfen (apache2ctl configtest)." >&2
fi
# --- 6) Status ---------------------------------------------------------------
bold "6/6 Status"
systemctl --no-pager --lines=0 status episupport-web episupport-poller || true
echo
bold "Fertig."
echo " Dashboard: http(s)://srhnweb/episupport"
echo " Logs Web: journalctl -u episupport-web -f"
echo " Logs Poller: journalctl -u episupport-poller -f"
echo
echo " WICHTIG: Falls noch nicht geschehen, Zugangsdaten in .env eintragen und"
echo " danach: sudo systemctl restart episupport-poller episupport-web"