chore: sync storyforge handoff state
This commit is contained in:
53
scripts/deploy_fnos_storyforge_cliproxy.sh
Executable file
53
scripts/deploy_fnos_storyforge_cliproxy.sh
Executable file
@@ -0,0 +1,53 @@
|
||||
#!/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_CLIPROXY_STATE_ROOT:-/vol1/docker/hyzq-stack/shared/storyforge-cliproxyapi}"
|
||||
|
||||
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 python3
|
||||
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/cliproxyapi/auths" "$TMPDIR_DEPLOY/cliproxyapi/logs"
|
||||
cp "$ROOT/data/cliproxyapi/config.yaml" "$TMPDIR_DEPLOY/cliproxyapi/config.yaml"
|
||||
rsync -a "$ROOT/data/cliproxyapi/auths/" "$TMPDIR_DEPLOY/cliproxyapi/auths/" 2>/dev/null || true
|
||||
|
||||
run_remote "mkdir -p '$REMOTE_COMPOSE_DIR' '$REMOTE_ROOT' '$REMOTE_STATE_ROOT/auths' '$REMOTE_STATE_ROOT/logs'"
|
||||
"$FNOS_SCP" "$REMOTE_COMPOSE_DIR" "$ROOT/deploy/storyforge-fnos-cliproxy.compose.yaml"
|
||||
"$FNOS_SCP" "$REMOTE_STATE_ROOT" "$TMPDIR_DEPLOY/cliproxyapi/config.yaml"
|
||||
"$FNOS_SCP" "$REMOTE_STATE_ROOT" "$TMPDIR_DEPLOY/cliproxyapi/auths"
|
||||
|
||||
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-cliproxy.compose.yaml\" up -d --force-recreate storyforge-cliproxyapi'"
|
||||
|
||||
curl -fsS --max-time 15 "http://$FNOS_HOST:8317/v1/models" >/dev/null 2>&1 || true
|
||||
echo "fnOS cliproxy deployed: http://$FNOS_HOST:8317/v1/models"
|
||||
64
scripts/deploy_fnos_storyforge_huobao.sh
Executable file
64
scripts/deploy_fnos_storyforge_huobao.sh
Executable file
@@ -0,0 +1,64 @@
|
||||
#!/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_HUOBAO_STATE_ROOT:-/vol1/docker/hyzq-stack/shared/storyforge-huobao}"
|
||||
LOCAL_SOURCE_ROOT="${STORYFORGE_HUOBAO_SOURCE_ROOT:-/Users/kris/code/huobao-drama-upstream}"
|
||||
|
||||
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
|
||||
|
||||
FILTERED_SOURCE="$TMPDIR_DEPLOY/huobao-drama-source"
|
||||
mkdir -p "$FILTERED_SOURCE"
|
||||
rsync -a \
|
||||
--exclude '.git' \
|
||||
--exclude 'data' \
|
||||
--exclude 'web/node_modules' \
|
||||
--exclude 'web/dist' \
|
||||
--exclude '.DS_Store' \
|
||||
"$LOCAL_SOURCE_ROOT/" "$FILTERED_SOURCE/"
|
||||
mkdir -p "$TMPDIR_DEPLOY/state/data"
|
||||
if [ -f "$LOCAL_SOURCE_ROOT/data/drama.db" ]; then
|
||||
cp "$LOCAL_SOURCE_ROOT/data/drama.db" "$TMPDIR_DEPLOY/state/data/drama.db"
|
||||
fi
|
||||
|
||||
run_remote "mkdir -p '$REMOTE_COMPOSE_DIR' '$REMOTE_ROOT' '$REMOTE_STATE_ROOT/data'"
|
||||
"$FNOS_SCP" "$REMOTE_COMPOSE_DIR" "$ROOT/deploy/storyforge-fnos-huobao.compose.yaml"
|
||||
"$FNOS_SCP" "$REMOTE_ROOT" "$FILTERED_SOURCE"
|
||||
"$FNOS_SCP" "$REMOTE_STATE_ROOT" "$TMPDIR_DEPLOY/state/data"
|
||||
|
||||
run_remote "printf '%s\n' '$FNOS_PASSWORD_VALUE' | sudo -S -p '' sh -lc 'cd \"$REMOTE_COMPOSE_DIR\" && STORYFORGE_HUOBAO_IMAGE=storyforge-huobao:fnos docker compose -f \"$REMOTE_COMPOSE_DIR/storyforge-fnos-huobao.compose.yaml\" up -d --build --force-recreate storyforge-huobao'"
|
||||
|
||||
curl -fsS --max-time 30 "http://$FNOS_HOST:5678/health" >/dev/null
|
||||
echo "fnOS huobao deployed: http://$FNOS_HOST:5678/health"
|
||||
@@ -9,23 +9,32 @@ BACKEND_URL="${STORYFORGE_FNOS_BACKEND_URL:-http://$FNOS_HOST:$COLLECTOR_PORT}"
|
||||
SKIP_TUNNEL="${SKIP_TUNNEL:-0}"
|
||||
SKIP_SMOKE="${SKIP_SMOKE:-0}"
|
||||
|
||||
echo "[1/5] ensure fnOS cutvideo tunnel"
|
||||
echo "[1/8] ensure fnOS cutvideo tunnel"
|
||||
if [ "$SKIP_TUNNEL" = "1" ]; then
|
||||
echo "skip tunnel deployment because SKIP_TUNNEL=1"
|
||||
else
|
||||
STORYFORGE_FNOS_BACKEND_URL="$BACKEND_URL" bash "$ROOT/scripts/deploy_fnos_cutvideo_tunnel.sh"
|
||||
fi
|
||||
|
||||
echo "[2/5] deploy fnOS live recorder"
|
||||
echo "[2/8] deploy fnOS live recorder"
|
||||
bash "$ROOT/scripts/deploy_fnos_storyforge_live_recorder.sh"
|
||||
|
||||
echo "[3/5] deploy fnOS collector"
|
||||
echo "[3/8] deploy fnOS local model gateway"
|
||||
bash "$ROOT/scripts/deploy_fnos_storyforge_cliproxy.sh"
|
||||
|
||||
echo "[4/8] deploy fnOS n8n"
|
||||
bash "$ROOT/scripts/deploy_fnos_storyforge_n8n.sh"
|
||||
|
||||
echo "[5/8] deploy fnOS huobao"
|
||||
bash "$ROOT/scripts/deploy_fnos_storyforge_huobao.sh"
|
||||
|
||||
echo "[6/8] deploy fnOS collector"
|
||||
STORYFORGE_FNOS_COLLECTOR_URL="$BACKEND_URL" bash "$ROOT/scripts/deploy_fnos_storyforge_collector.sh"
|
||||
|
||||
echo "[4/5] deploy fnOS web"
|
||||
echo "[7/8] deploy fnOS web"
|
||||
STORYFORGE_FNOS_BACKEND_URL="$BACKEND_URL" bash "$ROOT/scripts/deploy_fnos_storyforge_web.sh"
|
||||
|
||||
echo "[5/5] smoke fnOS lan stack"
|
||||
echo "[8/8] smoke fnOS lan stack"
|
||||
if [ "$SKIP_SMOKE" = "1" ]; then
|
||||
echo "skip smoke because SKIP_SMOKE=1"
|
||||
else
|
||||
|
||||
52
scripts/deploy_fnos_storyforge_n8n.sh
Executable file
52
scripts/deploy_fnos_storyforge_n8n.sh
Executable file
@@ -0,0 +1,52 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user