#!/usr/bin/env bash # # NetOps To-Do — oppsett på Debian 13 (trixie), f.eks. en fersk LXC. # Installerer Node fra apt, henter koden, og setter opp systemd-tjeneste. # # Bruk (som root): # ./setup-debian13.sh # kloner repoet til /opt/netops og setter opp # ./setup-debian13.sh # bruker repoet skriptet allerede ligger i # # Eksempel: # bash setup-debian13.sh ssh://forgejo@int.git.vanvikinternet.no/jvanvik/netops.git # # Valgfrie miljøvariabler: # PORT=3000 lytteport (default 3000) # APP_DIR=/opt/netops hvor repoet havner ved kloning # DISABLE_COOKIE_AUTH=1 skru av selvvalgt navn i UI (når proxyen gjør auth) # # Kjør skriptet på nytt etter en `git pull` for å oppgradere (idempotent). set -euo pipefail PORT="${PORT:-3000}" APP_DIR="${APP_DIR:-/opt/netops}" SERVICE=netops-todo if [ "$(id -u)" -ne 0 ]; then echo "Kjør som root — skriptet installerer pakker og systemd-tjeneste." >&2 exit 1 fi echo "==> Installerer pakker (git, nodejs, npm, curl) …" apt-get update -qq DEBIAN_FRONTEND=noninteractive apt-get install -y -qq git nodejs npm curl ca-certificates >/dev/null node_major="$(node -e 'console.log(process.versions.node.split(".")[0])')" if [ "$node_major" -lt 18 ]; then echo "Node $node_major er for gammel (appen krever >=18). Debian 13 skal ha Node 20+." >&2 exit 1 fi echo " Node $(node --version) OK" # ---------- Hent koden ---------- if [ $# -ge 1 ]; then if [ -d "$APP_DIR/.git" ]; then echo "==> $APP_DIR finnes allerede — oppdaterer med git pull …" git -C "$APP_DIR" pull --ff-only else echo "==> Kloner $1 → $APP_DIR …" git clone "$1" "$APP_DIR" fi else # Ingen URL oppgitt: anta at skriptet kjøres fra et allerede klonet repo script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" APP_DIR="$(git -C "$script_dir" rev-parse --show-toplevel 2>/dev/null || true)" if [ -z "$APP_DIR" ]; then echo "Bruk: $0 — eller kjør skriptet fra et klonet repo." >&2 exit 1 fi echo "==> Bruker eksisterende repo: $APP_DIR" fi # Appen kan ligge i repo-rota eller i netops-todo-node/ if [ -f "$APP_DIR/server.js" ]; then NODE_DIR="$APP_DIR" elif [ -f "$APP_DIR/netops-todo-node/server.js" ]; then NODE_DIR="$APP_DIR/netops-todo-node" else echo "Fant ikke server.js under $APP_DIR." >&2 exit 1 fi echo "==> npm ci i $NODE_DIR …" (cd "$NODE_DIR" && npm ci --omit=dev --no-audit --no-fund) echo "==> Skriver /etc/systemd/system/$SERVICE.service …" # DynamicUser + StateDirectory: systemd oppretter tjenestebruker og # /var/lib/netops-todo med riktige rettigheter — ingen useradd/chown nødvendig. cat > "/etc/systemd/system/$SERVICE.service" </dev/null; then ip="$(hostname -I | awk '{print $1}')" echo echo "✔ NetOps To-Do kjører: http://$ip:$PORT" echo echo "Neste steg — Nginx Proxy Manager (se også README.md):" echo " Proxy Host → scheme http, forward $ip:$PORT, eget (sub)domene," echo " og skru PÅ 'Websockets Support'. SSL via Let's Encrypt + Force SSL." echo echo "NB: Appen stoler på X-Remote-User/Basic Auth-headere fra proxyen." echo " Sørg for at port $PORT kun er nåbar fra proxyen (brannmur/ACL)." else echo "✖ Tjenesten svarte ikke på /healthz — sjekk: journalctl -u $SERVICE -e" >&2 exit 1 fi