Files
Infrastruktur-Monitoring-Sy…/deploy/deploy-test.sh
Dennis Nemec a9f22601fb
Some checks failed
CI / backend (push) Has been cancelled
CI / frontend (push) Has been cancelled
CI / ui (push) Has been cancelled
Add test deployment script for the Debian server
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-02 21:47:04 +02:00

56 lines
2.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# Deploy a test instance to the Debian server (ssh alias "softvisor") on port 3333.
# Builds a static x86_64 binary in Docker, ships it with the frontend, installs a
# systemd unit. Safe to re-run: keeps the existing .env (and therefore the DB/admin).
set -euo pipefail
cd "$(dirname "$0")/.."
HOST=${HOST:-softvisor}
PORT=${PORT:-3333}
DIR=/opt/monitoring
echo "== build frontend"
(cd frontend && npm run build >/dev/null)
echo "== build static linux binary (docker)"
docker run --rm -v "$PWD/backend":/home/rust/src -v cargo-registry-musl:/root/.cargo/registry \
messense/rust-musl-cross:x86_64-musl cargo build --release -p api -q
echo "== upload"
ssh "$HOST" "mkdir -p $DIR/data"
rsync -az backend/target/x86_64-unknown-linux-musl/release/monitoring-server "$HOST:$DIR/monitoring-server"
rsync -az --delete frontend/dist/ "$HOST:$DIR/dist/"
echo "== configure (first run only)"
if ! ssh "$HOST" "test -f $DIR/.env"; then
ADMIN_PW=$(openssl rand -base64 18 | tr -d '/+=' | head -c 20)
ssh "$HOST" "umask 077; cat > $DIR/.env" <<ENV
DATABASE_URL=sqlite://$DIR/data/monitoring.db?mode=rwc
JWT_SECRET=$(openssl rand -hex 32)
BIND=0.0.0.0:$PORT
BOOTSTRAP_ADMIN_EMAIL=admin@softvisor.de
BOOTSTRAP_ADMIN_PASSWORD=$ADMIN_PW
COOKIE_SECURE=false
FRONTEND_DIR=$DIR/dist
RUST_LOG=info,sqlx=warn
ENV
echo "Bootstrap admin: admin@softvisor.de / $ADMIN_PW (change it after first login)"
fi
echo "== systemd"
ssh "$HOST" "cat > /etc/systemd/system/monitoring.service" <<UNIT
[Unit]
Description=SoftVisor Infrastructure Monitoring (test deployment)
After=network.target
[Service]
WorkingDirectory=$DIR
EnvironmentFile=$DIR/.env
ExecStart=$DIR/monitoring-server
Restart=on-failure
[Install]
WantedBy=multi-user.target
UNIT
ssh "$HOST" "systemctl daemon-reload && systemctl enable -q monitoring.service && systemctl restart monitoring.service && sleep 2 && systemctl is-active monitoring.service && curl -s http://127.0.0.1:$PORT/healthz && echo"
echo "== done: http://$(ssh "$HOST" hostname -I | awk '{print $1}'):$PORT/"