Files
2026-06-29 09:52:02 +02:00

135 lines
5.0 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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"