#!/bin/bash set -e # ----------------------------- # Variablen anpassen # ----------------------------- REPO_URL="https://gitea.malmert.de/marcus/mitm-webserver.git" APP_DIR="/opt/mitm-webserver" FRONTEND_DIR="$APP_DIR/frontend" BACKEND_DIR="$APP_DIR/backend" BACKEND_SERVICE="mitm-backend" NGINX_SITE="/etc/nginx/sites-available/mitm-webserver" USER_ROOT="root" GITEA_RUNNER_URL="https://gitea.malmert.de//api/v1/repos/marcus/mitm-webserver/actions/runners/register" RUNNER_TOKEN="cThC2xmAZWaOAqRRMENuVVTJckxaHiJxVGx2NCQY" RUNNER_NAME="mitm-runner" NODE_VERSION="lts/*" # aktuelle LTS Version PYTHON_VERSION="3" # aktuelle Python 3 Version # ----------------------------- # System aktualisieren & Pakete installieren # ----------------------------- echo "==> Update & Upgrade" apt update && apt upgrade -y apt install -y git curl build-essential nginx python3 python3-pip python3-venv unzip wget python3-dev \ libnetfilter-queue-dev libnfnetlink-dev libpcap-dev autoconf automake libtool pkg-config libjson-c-dev # ----------------------------- # Node.js installieren (LTS) # ----------------------------- echo "==> Install Node.js LTS" curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - apt install -y nodejs # ----------------------------- # Repository clonen / pull # ----------------------------- echo "==> Setup repository" if [ ! -d "$APP_DIR" ]; then git clone "$REPO_URL" "$APP_DIR" else cd "$APP_DIR" git reset --hard git pull fi # ----------------------------- # Frontend bauen # ----------------------------- echo "==> Build Frontend" cd "$FRONTEND_DIR" npm install npm run build # ----------------------------- # Backend vorbereiten # ----------------------------- echo "==> Setup Backend" cd "$BACKEND_DIR" python3 -m venv venv source venv/bin/activate pip install --upgrade pip # ----------------------------- # nDPI installieren (system lib + python bindings) # ----------------------------- if ! ldconfig -p | grep -q "libndpi"; then echo "==> Build and install nDPI library" NDPIDIR="/tmp/nDPI" rm -rf "$NDPIDIR" git clone --depth 1 https://github.com/ntop/nDPI.git "$NDPIDIR" cd "$NDPIDIR" ./autogen.sh ./configure --prefix=/usr make -j"$(nproc)" make install ldconfig else echo "==> nDPI library already installed" fi if [ -d "/tmp/nDPI/python" ]; then echo "==> Install nDPI Python bindings" # nDPI bindings currently fail with newer build backends on some hosts # (e.g. metadata parsing errors such as "cannot parse PACK_ON"). pip install "setuptools<81" "packaging<25" wheel if ! pip install --no-build-isolation /tmp/nDPI/python; then echo "==> WARNING: nDPI Python bindings install failed, backend will run without DPI enrichment" fi fi cd "$BACKEND_DIR" pip install -r requirements.txt deactivate # ----------------------------- # Systemd Service für Backend # ----------------------------- echo "==> Setup Systemd Service" cat >/etc/systemd/system/$BACKEND_SERVICE.service < Configure Nginx" cat >$NGINX_SITE < Entferne Nginx Default-Site" sudo rm -f "$DEFAULT_SITE" fi nginx -t systemctl restart nginx # ----------------------------- # Gitea Act Runner installieren # ----------------------------- echo "==> Install Gitea Act Runner" RUNNER_DIR="/opt/gitea-act-runner" mkdir -p "$RUNNER_DIR" cd "$RUNNER_DIR" # Binary herunterladen GITEA_RUNNER_BIN="act_runner-0.2.13-linux-amd64" wget -O $GITEA_RUNNER_BIN "https://gitea.com/gitea/act_runner/releases/download/v0.2.13/act_runner-0.2.13-linux-amd64" chmod +x $GITEA_RUNNER_BIN mv $GITEA_RUNNER_BIN act_runner # Runner registrieren ./act_runner register --instance "https://gitea.malmert.de/" --token "$RUNNER_TOKEN" --name "$RUNNER_NAME" --labels "self-hosted:host" --no-interactive # Systemd-Service einrichten cat >/etc/systemd/system/gitea-act-runner.service < Gitea Act Runner installiert & gestartet" # ----------------------------- # Gitea Runner Job Script # ----------------------------- echo "==> Setup auto-build script" BUILD_SCRIPT="$RUNNER_DIR/build.sh" cat >$BUILD_SCRIPT <<'EOL' #!/bin/bash set -e APP_DIR="/opt/mitm-webserver" FRONTEND_DIR="$APP_DIR/frontend" BACKEND_DIR="$APP_DIR/backend" BACKEND_SERVICE="mitm-backend" cd $APP_DIR git reset --hard git pull # Build Frontend cd $FRONTEND_DIR npm install npm run build # Backend Dependencies cd $BACKEND_DIR source venv/bin/activate if [ -d "/tmp/nDPI/python" ]; then pip install "setuptools<81" "packaging<25" wheel if ! pip install --no-build-isolation /tmp/nDPI/python; then echo "WARNING: nDPI Python bindings install failed during runner build" fi fi pip install -r requirements.txt deactivate # Restart backend systemctl restart $BACKEND_SERVICE EOL chmod +x $BUILD_SCRIPT echo "==> Setup complete! Gitea Runner will automatically build on push." echo "Frontend: http:///" echo "Backend API: http:///api/"