53 lines
2.0 KiB
Bash
Executable File
53 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT="$(CDPATH= cd -- "$(dirname "$0")/.." && pwd)"
|
|
|
|
export CODEX_HOME="${CODEX_HOME:-$HOME/.codex}"
|
|
export FNOS_SKILL="${FNOS_SKILL:-$CODEX_HOME/skills/fnos-hyzq-deploy}"
|
|
export FNOS_SSH="${FNOS_SSH:-$FNOS_SKILL/scripts/fnos_ssh.sh}"
|
|
export FNOS_SCP="${FNOS_SCP:-$FNOS_SKILL/scripts/fnos_scp.sh}"
|
|
|
|
FNOS_HOST="${FNOS_HOST:-192.168.31.188}"
|
|
REMOTE_ROOT="${STORYFORGE_FNOS_REMOTE_ROOT:-/vol1/docker/hyzq-stack/current/storyforge}"
|
|
REMOTE_COMPOSE_DIR="${STORYFORGE_FNOS_COMPOSE_DIR:-/vol1/docker/hyzq-stack/current/deploy/fnos}"
|
|
REMOTE_STATE_ROOT="${STORYFORGE_N8N_STATE_ROOT:-/vol1/docker/hyzq-stack/shared/storyforge-n8n}"
|
|
|
|
resolve_fnos_password() {
|
|
if [ -n "${FNOS_PASSWORD:-}" ]; then
|
|
printf '%s' "$FNOS_PASSWORD"
|
|
return 0
|
|
fi
|
|
security find-internet-password -s "$FNOS_HOST" -a "${FNOS_USER:-krisolo}" -w
|
|
}
|
|
|
|
need_cmd() {
|
|
command -v "$1" >/dev/null 2>&1 || { echo "missing required command: $1" >&2; exit 1; }
|
|
}
|
|
|
|
need_cmd rsync
|
|
need_cmd security
|
|
need_cmd sshpass
|
|
|
|
run_remote() {
|
|
local remote_cmd="$1"
|
|
sshpass -p "$FNOS_PASSWORD_VALUE" ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "${FNOS_USER:-krisolo}@${FNOS_HOST}" "$remote_cmd"
|
|
}
|
|
|
|
FNOS_PASSWORD_VALUE="$(resolve_fnos_password)"
|
|
TMPDIR_DEPLOY="$(mktemp -d)"
|
|
trap 'rm -rf "$TMPDIR_DEPLOY"' EXIT
|
|
|
|
mkdir -p "$TMPDIR_DEPLOY/data"
|
|
rsync -a "$ROOT/data/n8n/" "$TMPDIR_DEPLOY/data/"
|
|
|
|
run_remote "mkdir -p '$REMOTE_COMPOSE_DIR' '$REMOTE_ROOT' '$REMOTE_ROOT/n8n' '$REMOTE_STATE_ROOT/storage'"
|
|
"$FNOS_SCP" "$REMOTE_COMPOSE_DIR" "$ROOT/deploy/storyforge-fnos-n8n.compose.yaml"
|
|
"$FNOS_SCP" "$REMOTE_ROOT" "$ROOT/n8n"
|
|
"$FNOS_SCP" "$REMOTE_STATE_ROOT" "$TMPDIR_DEPLOY/data"
|
|
|
|
run_remote "printf '%s\n' '$FNOS_PASSWORD_VALUE' | sudo -S -p '' sh -lc 'cd \"$REMOTE_COMPOSE_DIR\" && docker compose -f \"$REMOTE_COMPOSE_DIR/storyforge-fnos-n8n.compose.yaml\" up -d --force-recreate storyforge-n8n'"
|
|
|
|
curl -fsS --max-time 20 "http://$FNOS_HOST:5670/healthz" >/dev/null
|
|
echo "fnOS n8n deployed: http://$FNOS_HOST:5670/healthz"
|