feat: webserver proxy (#116)

This commit is contained in:
Julian Sommer
2026-04-08 11:46:43 +10:00
committed by GitHub
parent 820b605c0b
commit 45ea467fcc
37 changed files with 522 additions and 334 deletions
+13 -11
View File
@@ -77,7 +77,8 @@ start_node_services() {
# Start all services - each node's config binds to its specific IP
# UI is not needed for E2E tests and fails in pseudo multi-node (wrong cert path)
UI=false ./scripts/start-dev.sh "$data_dir"
# Services run as root (admin init/join require sudo)
sudo UI=false ./scripts/start-dev.sh "$data_dir"
echo "Node$node_num services started"
}
@@ -91,7 +92,8 @@ stop_node_services() {
echo "Stopping services for node$node_num..."
# Stop using PID files in the node's log directory
./scripts/stop-dev.sh "$data_dir"
# Services run as root (admin init/join require sudo), so stop must also be root
sudo ./scripts/stop-dev.sh "$data_dir"
echo "Node$node_num services stopped"
}
@@ -668,9 +670,9 @@ force_cleanup_all_nodes() {
if [ -f "$pidfile" ]; then
local pid
pid=$(cat "$pidfile" 2>/dev/null || true)
if [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null; then
if [ -n "$pid" ] && sudo kill -0 "$pid" 2>/dev/null; then
echo " Node$i: killing $svc (PID $pid)..."
kill -TERM "$pid" 2>/dev/null || true
sudo kill -TERM "$pid" 2>/dev/null || true
fi
fi
done
@@ -691,17 +693,17 @@ force_cleanup_all_nodes() {
if [ -f "$pidfile" ]; then
local pid
pid=$(cat "$pidfile" 2>/dev/null || true)
if [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null; then
if [ -n "$pid" ] && sudo kill -0 "$pid" 2>/dev/null; then
echo " Node$i: force-killing $svc (PID $pid)..."
kill -9 "$pid" 2>/dev/null || true
sudo kill -9 "$pid" 2>/dev/null || true
fi
fi
done
fi
done
# Kill any remaining QEMU processes
pkill -9 -x qemu-system-x86_64 2>/dev/null || true
# Kill any remaining QEMU processes (root-owned since services run as root)
sudo pkill -9 -x qemu-system-x86_64 2>/dev/null || true
sleep 1
@@ -716,7 +718,7 @@ force_cleanup_all_nodes() {
if [ -n "$lock_files" ]; then
echo " Node$i: removing stale badger LOCK files..."
echo "$lock_files" | while read -r f; do
rm -f "$f"
sudo rm -f "$f"
echo " removed $f"
done
fi
@@ -762,7 +764,7 @@ init_leader_node() {
# Start init in background — formation server will wait for joins
# shellcheck disable=SC2086
./bin/spx admin init \
sudo ./bin/spx admin init \
--node node1 \
--bind "${NODE1_IP}" \
--cluster-bind "${NODE1_IP}" \
@@ -803,7 +805,7 @@ join_follower_node() {
rm -rf "$data_dir/"
# Route to node1 (seed node) - other nodes discovered via NATS gossip
./bin/spx admin join \
sudo ./bin/spx admin join \
--node "node$node_num" \
--bind "$node_ip" \
--cluster-bind "$node_ip" \
+5 -5
View File
@@ -25,15 +25,15 @@ cleanup() {
dump_all_node_logs
fi
# Kill any lingering formation background processes
[ -n "$LEADER_INIT_PID" ] && kill "$LEADER_INIT_PID" 2>/dev/null || true
[ -n "$JOIN2_PID" ] && kill "$JOIN2_PID" 2>/dev/null || true
[ -n "$JOIN3_PID" ] && kill "$JOIN3_PID" 2>/dev/null || true
# Kill any lingering formation background processes (root-owned via sudo)
[ -n "$LEADER_INIT_PID" ] && sudo kill "$LEADER_INIT_PID" 2>/dev/null || true
[ -n "$JOIN2_PID" ] && sudo kill "$JOIN2_PID" 2>/dev/null || true
[ -n "$JOIN3_PID" ] && sudo kill "$JOIN3_PID" 2>/dev/null || true
# Try coordinated shutdown first (only if NATS is likely still up)
if [ "$CLUSTER_SERVICES_STARTED" = "true" ]; then
echo "Attempting coordinated cluster shutdown..."
if timeout 60 ./bin/spx admin cluster shutdown --force --timeout 30s --config "$HOME/node1/config/spinifex.toml" 2>/dev/null; then
if timeout 60 sudo ./bin/spx admin cluster shutdown --force --timeout 30s --config "$HOME/node1/config/spinifex.toml" 2>/dev/null; then
echo "Coordinated shutdown succeeded"
else
echo "Coordinated shutdown failed, falling back to per-node stop..."