feat(moicen): htyts 预检脚本与一键栈 release 检测含 htyts/htyproc

- scripts/moicen_htyts_smoke.sh:Redis、PG/dbtask、本机 TS HTTP、可选公网 v2
- moicen_start:存在 target/release/htyts|htyproc 时也使用 --release

Made-with: Cursor
This commit is contained in:
2026-04-26 20:30:55 +08:00
parent 517023a6cd
commit 220265195c
2 changed files with 92 additions and 1 deletions
+88
View File
@@ -0,0 +1,88 @@
#!/usr/bin/env bash
# 在 **moicen** 上、于 huike-back 根执行:检查 htyts 依赖与 HTTP 探活(不启动进程)。
# 用法: ./scripts/moicen_htyts_smoke.sh
# 可选: MOICEN_HUIKE_ROOT=/path/to/huike-back
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
HUIKE="${MOICEN_HUIKE_ROOT:-$(cd "$SCRIPT_DIR/.." && pwd)}"
ENV_FILE="$HUIKE/htyts/.env"
if [ ! -f "$ENV_FILE" ]; then
echo "缺少 $ENV_FILE" >&2
echo "执行: cd \"$HUIKE\" && cp envs/moicen/htyts.env htyts/.env && 按实机编辑 TS_DATABASE_URL / JWT_KEY(须与 AuthCore/htyuc 一致)" >&2
exit 1
fi
read_kv() {
# 读取 KEY=value,忽略 # 行;value 可含 =,去掉首尾可选引号
local key="$1"
local line
line="$(grep -E "^[[:space:]]*${key}=" "$ENV_FILE" | tail -n1)" || true
if [ -z "$line" ]; then
echo ""
return
fi
local v="${line#*=}"
v="${v%$'\r'}"
v="${v#\"}"
v="${v%\"}"
v="${v#\'}"
v="${v%\'}"
printf '%s' "$v"
}
TS_DB_URL="$(read_kv TS_DATABASE_URL)"
if [ -z "$TS_DB_URL" ]; then
TS_DB_URL="$(read_kv DATABASE_URL)"
fi
REDIS_HOST="$(read_kv REDIS_HOST)"
REDIS_PORT="$(read_kv REDIS_PORT)"
TS_PORT="$(read_kv TS_PORT)"
[ -n "${REDIS_HOST:-}" ] || REDIS_HOST=127.0.0.1
[ -n "${REDIS_PORT:-}" ] || REDIS_PORT=6379
[ -n "${TS_PORT:-}" ] || TS_PORT=3003
echo "== Redis $REDIS_HOST:$REDIS_PORT =="
if ! command -v redis-cli >/dev/null 2>&1; then
echo "未安装 redis-cli,跳过 Redis 检查" >&2
else
redis-cli -h "$REDIS_HOST" -p "$REDIS_PORT" ping | grep -q PONG || {
echo "Redis 无 PONG" >&2
exit 1
}
echo "OK"
fi
echo "== PostgreSQLTS_DATABASE_URL =="
if [ -z "$TS_DB_URL" ]; then
echo "未找到 TS_DATABASE_URL / DATABASE_URL" >&2
exit 1
fi
if ! command -v psql >/dev/null 2>&1; then
echo "未安装 psql,跳过 PG 检查" >&2
else
psql "$TS_DB_URL" -v ON_ERROR_STOP=1 -c "select 1" >/dev/null
psql "$TS_DB_URL" -v ON_ERROR_STOP=1 -c "select count(*) as dbtask_rows from dbtask" || {
echo "dbtask 表不存在或不可读:在 htyts_models 目录对同一 DATABASE_URL 执行 diesel migration run" >&2
exit 1
}
echo "OK(已连库且存在 dbtask"
fi
echo "== 本机 htyts HTTP :$TS_PORT =="
if curl -sS --connect-timeout 2 "http://127.0.0.1:${TS_PORT}/api/v1/ts" | grep -q 'Task Server'; then
echo "OK -=Task Server=-"
else
echo "未响应或进程未起。起服: cd \"$HUIKE\" && ./scripts/moicen_start_huiwings_stack.sh(需先有 htyts/.env;或单独 cd htyts && ./start.sh" >&2
echo "排障: tail -n 80 \"$HUIKE/htyts/htyts.nohup.log\"" >&2
exit 1
fi
echo "== 经域名(可选,需本机能解析 ts.moicen.com =="
if curl -sS --connect-timeout 5 -o /dev/null -w '%{http_code}\n' "https://ts.moicen.com/api/v2/ts/" 2>/dev/null | grep -q '^200$'; then
echo "OK https://ts.moicen.com/api/v2/ts/"
else
echo "跳过或失败(本机无公网 / 证书 / openresty 未 reload 时属正常)"
fi
echo "全部通过。"
+4 -1
View File
@@ -40,7 +40,10 @@ fi
REL=""
# 有任一 release 可执行则全程加 --release(与旧机用 debug 时可改 REL 或先不 build --release
if [ -f "$AUTH/target/release/htyuc" ] 2>/dev/null || [ -f "$HUIKE/target/release/htyws" ] 2>/dev/null; then
if [ -f "$AUTH/target/release/htyuc" ] 2>/dev/null \
|| [ -f "$HUIKE/target/release/htyws" ] 2>/dev/null \
|| [ -f "$HUIKE/target/release/htyts" ] 2>/dev/null \
|| [ -f "$HUIKE/target/release/htyproc" ] 2>/dev/null; then
REL=--release
fi