first commit
This commit is contained in:
+134
@@ -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"
|
||||
Reference in New Issue
Block a user