refactor: remove Docker from Linux install.sh; fix log file path; add confirm prompt
This commit is contained in:
+38
-167
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# HAPI 管理脚本 (Linux)
|
||||
# 功能:状态查看、安装/升级/卸载 HAPI CLI、部署 Hub Docker、配置开机自启
|
||||
# 功能:状态查看、安装/升级/卸载 HAPI CLI、配置 Hub、配置开机自启
|
||||
# 支持:版本检测、多途径升级、GitHub Release 自动匹配架构
|
||||
#
|
||||
# 用法:
|
||||
@@ -11,7 +11,7 @@
|
||||
# bash install.sh --source github-official # 指定官方 GitHub Release
|
||||
# bash install.sh --force # 强制重新安装
|
||||
# bash install.sh --upgrade # 仅升级模式
|
||||
# bash install.sh --skip-hub # 跳过 Hub Docker 配置
|
||||
# bash install.sh --skip-hub # 跳过 Hub 配置(仅安装/升级 CLI)
|
||||
# bash install.sh --npm-registry https://registry.npmmirror.com
|
||||
# bash install.sh --github-mirror https://ghproxy.com
|
||||
# bash install.sh --help # 显示帮助
|
||||
@@ -24,7 +24,7 @@ set -e
|
||||
INSTALL_DIR=""
|
||||
HAPI_BIN_DIR=""
|
||||
HAPI_DATA=""
|
||||
LOG_FILE="/tmp/hapi-install.log"
|
||||
LOG_FILE=""
|
||||
VERSION_FILE=""
|
||||
SOURCE_FILE=""
|
||||
NODE_MIN_VERSION=22
|
||||
@@ -68,7 +68,6 @@ INSTALLED_SOURCE=""
|
||||
REMOTE_VERSION=""
|
||||
SELECTED_SOURCE=""
|
||||
IS_ROOT=false
|
||||
HAS_DOCKER=false
|
||||
|
||||
# 系统状态
|
||||
STATUS_CLI_INSTALLED=false
|
||||
@@ -76,7 +75,6 @@ STATUS_CLI_VERSION=""
|
||||
STATUS_CLI_SOURCE=""
|
||||
STATUS_CLI_PATH=""
|
||||
STATUS_REMOTE_VERSION=""
|
||||
STATUS_HUB_RUNNING=false
|
||||
STATUS_HUB_CONFIGURED=false
|
||||
STATUS_AUTOSTART_HUB_ENABLED=""
|
||||
STATUS_AUTOSTART_HUB_ACTIVE=""
|
||||
@@ -88,7 +86,7 @@ CLI_TOKEN=""
|
||||
# ─────────────────────────────────────────
|
||||
# 日志输出
|
||||
# ─────────────────────────────────────────
|
||||
log() { echo -e "$1" | tee -a "$LOG_FILE"; }
|
||||
log() { echo -e "$1"; [[ -n "$LOG_FILE" ]] && echo -e "$1" >> "$LOG_FILE"; }
|
||||
info() { log "${CYAN}[INFO]${NC} $1"; }
|
||||
ok() { log "${GREEN}[OK]${NC} $1"; }
|
||||
warn() { log "${YELLOW}[WARN]${NC} $1"; }
|
||||
@@ -112,7 +110,7 @@ HAPI 管理脚本 (Linux)
|
||||
github-fork - arkylin/Hapi-Docker GitHub Release
|
||||
--force 强制重新安装(即使版本相同)
|
||||
--upgrade 仅升级模式(已是最新则退出)
|
||||
--skip-hub 跳过 Hub Docker 配置(仅安装/升级 CLI)
|
||||
--skip-hub 跳过 Hub 配置(仅安装/升级 CLI)
|
||||
--npm-registry URL 自定义 npm registry
|
||||
--github-mirror URL 自定义 GitHub 镜像前缀
|
||||
--help, -h 显示此帮助
|
||||
@@ -732,18 +730,6 @@ install_nodejs() {
|
||||
}
|
||||
|
||||
# ─────────────────────────────────────────
|
||||
# 检查 Docker 权限
|
||||
# ─────────────────────────────────────────
|
||||
check_docker() {
|
||||
if command -v docker &>/dev/null; then
|
||||
if docker info &>/dev/null; then
|
||||
HAS_DOCKER=true
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
HAS_DOCKER=false
|
||||
}
|
||||
|
||||
# ─────────────────────────────────────────
|
||||
# 选择安装来源
|
||||
# ─────────────────────────────────────────
|
||||
@@ -795,15 +781,6 @@ select_source() {
|
||||
# 配置 HAPI Hub
|
||||
# ─────────────────────────────────────────
|
||||
setup_hub() {
|
||||
if [[ "$HAS_DOCKER" != true ]]; then
|
||||
err "Docker 不可用,无法配置 Hub"
|
||||
if [[ "$IS_ROOT" != true ]]; then
|
||||
warn "提示: 将当前用户加入 docker 组,然后重新登录:"
|
||||
warn " sudo usermod -aG docker \$USER"
|
||||
fi
|
||||
return 1
|
||||
fi
|
||||
|
||||
step "配置 HAPI Hub"
|
||||
|
||||
mkdir -p "$INSTALL_DIR" "$HAPI_DATA"
|
||||
@@ -839,67 +816,7 @@ EOF
|
||||
ok "已生成配置文件"
|
||||
fi
|
||||
|
||||
cat > "$INSTALL_DIR/docker-compose.yml" <<'EOF'
|
||||
services:
|
||||
hapi-hub:
|
||||
image: ghcr.io/arkylin/hapi-docker:latest
|
||||
container_name: hapi-hub
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3006:3006"
|
||||
volumes:
|
||||
- ./hapi-data:/root/.hapi
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
- HAPI_LISTEN_HOST=0.0.0.0
|
||||
- HAPI_LISTEN_PORT=3006
|
||||
EOF
|
||||
|
||||
(cd "$INSTALL_DIR" && docker compose pull >>"$LOG_FILE" 2>&1)
|
||||
(cd "$INSTALL_DIR" && docker compose up -d >>"$LOG_FILE" 2>&1)
|
||||
|
||||
info "等待 Hub 启动..."
|
||||
for i in {1..30}; do
|
||||
curl -s http://localhost:3006 &>/dev/null && break
|
||||
sleep 1
|
||||
done
|
||||
|
||||
ok "HAPI Hub 已启动"
|
||||
}
|
||||
|
||||
# ─────────────────────────────────────────
|
||||
# 停止 HAPI Hub
|
||||
# ─────────────────────────────────────────
|
||||
stop_hub() {
|
||||
if [[ ! -f "$INSTALL_DIR/docker-compose.yml" ]]; then
|
||||
warn "未找到 Hub 配置,无需停止"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [[ "$HAS_DOCKER" != true ]]; then
|
||||
err "Docker 不可用"
|
||||
return 1
|
||||
fi
|
||||
|
||||
step "停止 HAPI Hub"
|
||||
(cd "$INSTALL_DIR" && docker compose down >>"$LOG_FILE" 2>&1)
|
||||
ok "HAPI Hub 已停止"
|
||||
}
|
||||
|
||||
# ─────────────────────────────────────────
|
||||
# 启动 HAPI Hub
|
||||
# ─────────────────────────────────────────
|
||||
start_hub_only() {
|
||||
if [[ "$HAS_DOCKER" != true ]]; then
|
||||
err "Docker 不可用"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ -f "$INSTALL_DIR/docker-compose.yml" ]]; then
|
||||
(cd "$INSTALL_DIR" && docker compose up -d >>"$LOG_FILE" 2>&1)
|
||||
ok "HAPI Hub 已启动"
|
||||
fi
|
||||
ok "HAPI Hub 配置完成,请手动启动 Hub"
|
||||
}
|
||||
|
||||
# ─────────────────────────────────────────
|
||||
@@ -916,17 +833,15 @@ setup_systemd() {
|
||||
|
||||
cat > /etc/systemd/system/hapi-hub.service <<EOF
|
||||
[Unit]
|
||||
Description=HAPI Hub (Docker Compose)
|
||||
After=docker.service network-online.target
|
||||
Wants=docker.service
|
||||
Description=HAPI Hub
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
WorkingDirectory=$INSTALL_DIR
|
||||
ExecStartPre=-/usr/bin/docker compose pull
|
||||
ExecStart=/usr/bin/docker compose up -d
|
||||
ExecStop=/usr/bin/docker compose down
|
||||
ExecStart=$hapi_bin hub start
|
||||
ExecStop=$hapi_bin hub stop
|
||||
TimeoutStartSec=0
|
||||
|
||||
[Install]
|
||||
@@ -1059,7 +974,6 @@ collect_status() {
|
||||
STATUS_CLI_SOURCE=""
|
||||
STATUS_CLI_PATH=""
|
||||
STATUS_REMOTE_VERSION=""
|
||||
STATUS_HUB_RUNNING=false
|
||||
STATUS_HUB_CONFIGURED=false
|
||||
STATUS_AUTOSTART_HUB_ENABLED=""
|
||||
STATUS_AUTOSTART_HUB_ACTIVE=""
|
||||
@@ -1076,13 +990,8 @@ collect_status() {
|
||||
fi
|
||||
|
||||
# Hub 状态
|
||||
if [[ -f "$INSTALL_DIR/docker-compose.yml" ]]; then
|
||||
if [[ -f "$INSTALL_DIR/.env" ]]; then
|
||||
STATUS_HUB_CONFIGURED=true
|
||||
if [[ "$HAS_DOCKER" == true ]]; then
|
||||
if docker ps --format '{{.Names}}' 2>/dev/null | grep -q '^hapi-hub$'; then
|
||||
STATUS_HUB_RUNNING=true
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# 自启动状态
|
||||
@@ -1114,18 +1023,6 @@ print_status() {
|
||||
cli_color=$GREEN
|
||||
fi
|
||||
|
||||
local hub_status="未配置"
|
||||
local hub_color=$RED
|
||||
if [[ "$STATUS_HUB_CONFIGURED" == true ]]; then
|
||||
if [[ "$STATUS_HUB_RUNNING" == true ]]; then
|
||||
hub_status="运行中"
|
||||
hub_color=$GREEN
|
||||
else
|
||||
hub_status="已配置 (未运行)"
|
||||
hub_color=$YELLOW
|
||||
fi
|
||||
fi
|
||||
|
||||
local autostart_hub="未设置"
|
||||
local autostart_runner="未设置"
|
||||
if [[ -n "$STATUS_AUTOSTART_HUB_ENABLED" ]]; then
|
||||
@@ -1161,12 +1058,6 @@ print_status() {
|
||||
echo -e "${BOLD}║${NC} 路径: ${STATUS_CLI_PATH} ${BOLD}║${NC}"
|
||||
fi
|
||||
echo -e "${BOLD}║${NC} ${BOLD}║${NC}"
|
||||
echo -e "${BOLD}║${NC} ${BOLD}HAPI Hub${NC} ${BOLD}║${NC}"
|
||||
echo -e "${BOLD}║${NC} 状态: ${hub_color}${hub_status}${NC} ${BOLD}║${NC}"
|
||||
if [[ "$STATUS_HUB_CONFIGURED" == true ]]; then
|
||||
echo -e "${BOLD}║${NC} 配置: $INSTALL_DIR ${BOLD}║${NC}"
|
||||
fi
|
||||
echo -e "${BOLD}║${NC} ${BOLD}║${NC}"
|
||||
echo -e "${BOLD}║${NC} ${BOLD}开机自启${NC} ${BOLD}║${NC}"
|
||||
echo -e "${BOLD}║${NC} Hub: ${autostart_hub} ${BOLD}║${NC}"
|
||||
echo -e "${BOLD}║${NC} Runner: ${autostart_runner} ${BOLD}║${NC}"
|
||||
@@ -1208,27 +1099,6 @@ main_menu() {
|
||||
|
||||
echo ""
|
||||
|
||||
if [[ "$HAS_DOCKER" == true ]]; then
|
||||
if [[ "$STATUS_HUB_CONFIGURED" == false ]]; then
|
||||
echo " $i) 配置并启动 HAPI Hub"
|
||||
options+=("hub")
|
||||
((i++))
|
||||
else
|
||||
if [[ "$STATUS_HUB_RUNNING" == true ]]; then
|
||||
echo " $i) 停止 HAPI Hub"
|
||||
options+=("stop_hub")
|
||||
else
|
||||
echo " $i) 启动 HAPI Hub"
|
||||
options+=("start_hub")
|
||||
fi
|
||||
((i++))
|
||||
fi
|
||||
else
|
||||
echo -e " ${DIM}Hub 管理 (Docker 不可用)${NC}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
if [[ "$IS_ROOT" == true ]]; then
|
||||
if [[ -n "$STATUS_AUTOSTART_HUB_ENABLED" || -n "$STATUS_AUTOSTART_RUNNER_ENABLED" ]]; then
|
||||
if [[ "$STATUS_AUTOSTART_HUB_ENABLED" == "enabled" || "$STATUS_AUTOSTART_RUNNER_ENABLED" == "enabled" ]]; then
|
||||
@@ -1366,21 +1236,9 @@ main_menu() {
|
||||
read -rp "按 Enter 继续..."
|
||||
;;
|
||||
|
||||
start_hub)
|
||||
start_hub_only
|
||||
collect_status
|
||||
read -rp "按 Enter 继续..."
|
||||
;;
|
||||
|
||||
stop_hub)
|
||||
stop_hub
|
||||
collect_status
|
||||
read -rp "按 Enter 继续..."
|
||||
;;
|
||||
|
||||
setup_autostart|enable_autostart)
|
||||
if [[ "$STATUS_HUB_CONFIGURED" == false ]]; then
|
||||
warn "Hub 未配置,先执行配置并启动 HAPI Hub"
|
||||
warn "Hub 未配置,先执行配置"
|
||||
setup_hub || true
|
||||
fi
|
||||
setup_systemd
|
||||
@@ -1417,17 +1275,6 @@ check_prerequisites() {
|
||||
fi
|
||||
done
|
||||
ok "基础工具检查通过"
|
||||
|
||||
check_docker
|
||||
if [[ "$HAS_DOCKER" == true ]]; then
|
||||
ok "Docker 可用"
|
||||
else
|
||||
warn "Docker 不可用"
|
||||
if [[ "$IS_ROOT" != true ]]; then
|
||||
warn "提示: 将当前用户加入 docker 组,然后重新登录:"
|
||||
warn " sudo usermod -aG docker \$USER"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# ─────────────────────────────────────────
|
||||
@@ -1477,6 +1324,29 @@ run_quick_mode() {
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "$FORCE" != true && "$UPGRADE_ONLY" != true ]]; then
|
||||
local action="安装"
|
||||
[[ -n "$INSTALLED_VERSION" ]] && action="覆盖安装"
|
||||
local src_label=""
|
||||
case "$SELECTED_SOURCE" in
|
||||
npm) src_label="npm registry" ;;
|
||||
github-official) src_label="GitHub (tiann/hapi)" ;;
|
||||
github-fork) src_label="GitHub (arkylin/Hapi-Docker)" ;;
|
||||
esac
|
||||
echo ""
|
||||
echo -e "${BOLD}即将${action} HAPI CLI:${NC}"
|
||||
echo -e " 版本: ${CYAN}v$REMOTE_VERSION${NC}"
|
||||
echo -e " 来源: ${CYAN}$src_label${NC}"
|
||||
echo -e " 目录: ${CYAN}$INSTALL_DIR${NC}"
|
||||
echo ""
|
||||
read -rp "确认${action}? [Y/n]: " confirm
|
||||
if [[ "$confirm" =~ ^[Nn] ]]; then
|
||||
info "已取消"
|
||||
exit 0
|
||||
fi
|
||||
echo ""
|
||||
fi
|
||||
|
||||
if [[ "$SELECTED_SOURCE" == "npm" ]]; then
|
||||
install_nodejs || true
|
||||
fi
|
||||
@@ -1487,7 +1357,7 @@ run_quick_mode() {
|
||||
github-fork) install_from_github "$GITHUB_FORK_REPO" ;;
|
||||
esac
|
||||
|
||||
if [[ "$HAS_DOCKER" == true && "$SKIP_HUB" != true ]]; then
|
||||
if [[ "$SKIP_HUB" != true ]]; then
|
||||
setup_hub
|
||||
if [[ "$IS_ROOT" == true ]]; then
|
||||
setup_systemd
|
||||
@@ -1501,7 +1371,8 @@ run_quick_mode() {
|
||||
main() {
|
||||
parse_args "$@"
|
||||
|
||||
: > "$LOG_FILE"
|
||||
LOG_FILE="${XDG_CACHE_HOME:-$HOME/.cache}/hapi-install.log"
|
||||
mkdir -p "$(dirname "$LOG_FILE")" 2>/dev/null || true
|
||||
|
||||
# 如果带有旧版参数,或是管道执行(curl | bash),进入快速模式
|
||||
if [[ "$UPGRADE_ONLY" == true || "$FORCE" == true || -n "$SOURCE" || "$SKIP_HUB" == true || -n "$INSTALL_DIR_ARG" || ! -t 0 ]]; then
|
||||
|
||||
Reference in New Issue
Block a user