72 lines
2.3 KiB
Bash
Executable File
72 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Deploy AI Rendezvous to the LXC host over SSH.
|
|
#
|
|
# Works in three ways:
|
|
# 1. locally: ./scripts/deploy.sh
|
|
# 2. from Gitea Actions: .gitea/workflows/deploy.yml calls this script
|
|
# 3. from a webhook: any tiny receiver on the LXC can exec this script
|
|
#
|
|
# Configuration via environment (or a gitignored deploy.env next to this file):
|
|
# SSH_HOST user@lxc-host (required)
|
|
# SSH_PORT 22
|
|
# DEPLOY_DIR /opt/ai-rendezvous checkout on the LXC
|
|
# BRANCH main
|
|
# DEPLOY_MODE docker | systemd how to run the service
|
|
# SERVICE_NAME ai-rendezvous systemd unit name (systemd mode)
|
|
# HEALTH_URL e.g. http://127.0.0.1:3000/health checked after deploy
|
|
set -euo pipefail
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
# shellcheck disable=SC1091
|
|
[ -f deploy.env ] && . ./deploy.env
|
|
|
|
: "${SSH_HOST:?Set SSH_HOST (user@lxc-host) via env, deploy.env or CI secrets}"
|
|
SSH_PORT="${SSH_PORT:-22}"
|
|
DEPLOY_DIR="${DEPLOY_DIR:-/opt/ai-rendezvous}"
|
|
BRANCH="${BRANCH:-main}"
|
|
DEPLOY_MODE="${DEPLOY_MODE:-docker}"
|
|
SERVICE_NAME="${SERVICE_NAME:-ai-rendezvous}"
|
|
HEALTH_URL="${HEALTH_URL:-}"
|
|
|
|
SSH_CMD=(ssh -p "$SSH_PORT" -o StrictHostKeyChecking=accept-new "$SSH_HOST")
|
|
|
|
echo "==> Deploying $BRANCH to $SSH_HOST:$DEPLOY_DIR (mode: $DEPLOY_MODE)"
|
|
|
|
"${SSH_CMD[@]}" BRANCH="$BRANCH" DEPLOY_DIR="$DEPLOY_DIR" DEPLOY_MODE="$DEPLOY_MODE" \
|
|
SERVICE_NAME="$SERVICE_NAME" bash -s <<'REMOTE'
|
|
set -euo pipefail
|
|
cd "$DEPLOY_DIR"
|
|
|
|
echo "--> fetching $BRANCH"
|
|
umask 022
|
|
git fetch --prune origin
|
|
git reset --hard "origin/$BRANCH"
|
|
|
|
if [ "$DEPLOY_MODE" = "docker" ]; then
|
|
echo "--> rebuilding containers"
|
|
docker compose up -d --build --remove-orphans
|
|
elif [ "$DEPLOY_MODE" = "systemd" ]; then
|
|
echo "--> building"
|
|
npm ci --no-audit --no-fund
|
|
npm run build
|
|
echo "--> restarting $SERVICE_NAME"
|
|
systemctl restart "$SERVICE_NAME"
|
|
else
|
|
echo "unknown DEPLOY_MODE: $DEPLOY_MODE" >&2
|
|
exit 1
|
|
fi
|
|
REMOTE
|
|
|
|
if [ -n "$HEALTH_URL" ]; then
|
|
echo "==> Health check $HEALTH_URL"
|
|
if "${SSH_CMD[@]}" curl -sf --max-time 5 --retry 10 --retry-delay 3 --retry-connrefused "$HEALTH_URL" >/dev/null; then
|
|
echo "==> healthy"
|
|
else
|
|
echo "!! health check FAILED after deploy" >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
echo "==> deploy OK"
|