The quadlet .network unit is generator-managed and cannot be enabled; it is pulled in automatically by the containers that set Wants=/After=searxng-network. Enable only the three container units. The explicit start of the network is kept (start works on generated units).
96 lines
3.4 KiB
Bash
Executable File
96 lines
3.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# deploy-searxng-quadlet.sh — Install and (re)start the SearXNG quadlet stack.
|
|
#
|
|
# The gluetun + searxng + valkey trio is boot-persistent via Quadlet, not
|
|
# podman-compose (see AGENTS.md). This script:
|
|
# 1. Pushes main to origin
|
|
# 2. Pulls the repo on the target
|
|
# 3. Copies the quadlet units into ~/.config/containers/systemd/
|
|
# 4. daemon-reloads, enables the units for boot, and starts them in order
|
|
#
|
|
# It is idempotent: it stops any running units and removes any containers with
|
|
# the trio's names (compose leftovers or the previous quadlet run) before
|
|
# reinstalling and starting, so it is safe to run on first migration and on
|
|
# every later config change.
|
|
#
|
|
# Usage:
|
|
# ./scripts/deploy-searxng-quadlet.sh <target> [--dry-run]
|
|
# ./scripts/deploy-searxng-quadlet.sh dankclaw
|
|
set -euo pipefail
|
|
|
|
REMOTE_USER="dank"
|
|
REMOTE_HOST="dankclaw"
|
|
REMOTE_DIR="/home/dank/serverAppConfigs"
|
|
QDIR="dankclaw/searxng/quadlet"
|
|
UNITS="searxng-network.service gluetun.service searxng-valkey.service searxng.service"
|
|
|
|
TARGET="${1:-}"
|
|
DRY_RUN=0
|
|
if [ "${2:-}" = "--dry-run" ]; then
|
|
DRY_RUN=1
|
|
fi
|
|
|
|
if [ -z "${TARGET:-}" ]; then
|
|
echo "Usage: $0 <target> [--dry-run]"
|
|
exit 1
|
|
fi
|
|
if [ "${TARGET}" != "dankclaw" ]; then
|
|
echo "This stack runs only on dankclaw (got: ${TARGET})"
|
|
exit 1
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Local pre-flight
|
|
# ---------------------------------------------------------------------------
|
|
cd "$(dirname "$0")/.."
|
|
if ! git diff --quiet HEAD; then
|
|
echo "FAIL: Local working tree has uncommitted changes. Commit first."
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$DRY_RUN" = "1" ]; then
|
|
echo "[dry-run] Would push main, pull on ${REMOTE_HOST}, install quadlet units, and start: ${UNITS}"
|
|
exit 0
|
|
fi
|
|
|
|
echo "=== Deploying SearXNG quadlet stack to ${REMOTE_HOST} ==="
|
|
echo "[1/3] Pushing local main to origin..."
|
|
git push origin main
|
|
|
|
REMOTE="${REMOTE_USER}@${REMOTE_HOST}"
|
|
|
|
echo "[2/3] Installing and starting the quadlet units on ${REMOTE_HOST}..."
|
|
ssh "$REMOTE" bash -s <<REMOTE_EOF
|
|
set -euo pipefail
|
|
cd '${REMOTE_DIR}'
|
|
|
|
echo ' Pulling repo...'
|
|
git pull origin main
|
|
|
|
echo ' Stopping any running units (idempotent)...'
|
|
systemctl --user stop searxng.service gluetun.service searxng-valkey.service searxng-network.service 2>/dev/null || true
|
|
|
|
echo ' Removing any containers with the trio names (compose leftovers or prior run)...'
|
|
podman rm -f searxng searxng-valkey gluetun 2>/dev/null || true
|
|
|
|
echo ' Copying quadlet units into ~/.config/containers/systemd/ ...'
|
|
mkdir -p ~/.config/containers/systemd
|
|
cp ${QDIR}/*.container ${QDIR}/*.network ~/.config/containers/systemd/
|
|
|
|
echo ' daemon-reload + enable the container units for boot...'
|
|
# The .network unit is generator-managed: it cannot be enabled, and it is pulled
|
|
# in automatically by the containers that set Wants=/After=searxng-network.service.
|
|
systemctl --user daemon-reload
|
|
systemctl --user enable gluetun.service searxng-valkey.service searxng.service
|
|
|
|
echo ' Starting in dependency order...'
|
|
systemctl --user start searxng-network.service
|
|
systemctl --user start gluetun.service searxng-valkey.service
|
|
systemctl --user start searxng.service
|
|
REMOTE_EOF
|
|
|
|
echo "[3/3] Verifying unit state..."
|
|
ssh "$REMOTE" 'systemctl --user --no-pager status searxng-network.service gluetun.service searxng-valkey.service searxng.service 2>&1 | grep -E "●|Active:"' || true
|
|
|
|
echo "=== SearXNG quadlet stack deployed to ${REMOTE_HOST} ==="
|