# Scripts HAPI 一键安装脚本,自动完成 Node.js v22、HAPI CLI(多来源可选)、Hub Docker 部署以及 Hub & Runner 开机自启的全套配置。 **核心特性:** - **多来源安装**:npm registry / 官方 GitHub Release / 本仓库 GitHub Release - **版本检测**:自动检测已安装版本,智能比较远程最新版本 - **多途径升级**:支持跨来源切换升级,重复运行脚本即可更新 - **架构自适应**:自动检测系统平台与架构,匹配对应二进制 --- ## 脚本列表 | 脚本 | 平台 | 说明 | |------|------|------| | `install.sh` | Linux (systemd) | Bash 脚本,支持 Debian/Ubuntu、RHEL/CentOS、Alpine 等 | | `install.ps1` | Windows | PowerShell 脚本,需要管理员权限 | --- ## 安装来源对比 | 来源 | 说明 | 需要 Node.js | 适用场景 | |------|------|-------------|----------| | **npm** | `npm install -g @twsxtd/hapi` | ✅ | 官方推荐,自动处理依赖 | | **github-official** | 从 [tiann/hapi](https://github.com/tiann/hapi/releases) 下载二进制 | ❌ | 独立可执行文件,无需 Node.js 运行时 | | **github-fork** | 从 [arkylin/Hapi-Docker](https://github.com/arkylin/Hapi-Docker/releases) 下载二进制 | ❌ | 本仓库预构建版本 | --- ## 使用方法 ### Linux ```bash # 交互式安装(默认提示选择来源) sudo bash install.sh # 指定安装来源 sudo bash install.sh --source npm # npm registry sudo bash install.sh --source github-official # 官方 GitHub Release sudo bash install.sh --source github-fork # 本仓库 GitHub Release # 仅升级(已是最新则跳过) sudo bash install.sh --upgrade # 强制重新安装(即使版本相同) sudo bash install.sh --force # 仅安装/升级 CLI,跳过 Hub Docker 配置 sudo bash install.sh --skip-hub # 指定国内 npm 镜像 sudo bash install.sh --npm-registry https://registry.npmmirror.com # 指定 GitHub 镜像(国内环境推荐) sudo bash install.sh --github-mirror https://ghproxy.com --source github-official # 显示帮助 sudo bash install.sh --help ``` ### Windows 以**管理员身份**打开 PowerShell: ```powershell # 交互式安装 .\install.ps1 # 指定安装来源 .\install.ps1 -Source npm .\install.ps1 -Source github-official .\install.ps1 -Source github-fork # 仅升级 .\install.ps1 -Upgrade # 强制重新安装 .\install.ps1 -Force # 仅安装/升级 CLI .\install.ps1 -SkipHub # 指定国内 npm 镜像 .\install.ps1 -NpmRegistry https://registry.npmmirror.com # 指定 GitHub 镜像(国内环境推荐) .\install.ps1 -GithubMirror https://ghproxy.com -Source github-official ``` --- ## 脚本流程 ``` 1. 前置检查 → root/管理员权限、系统架构、必要工具 2. 选择安装来源 → 交互式选择或 --source 参数指定 3. 获取远程版本 → npm view / GitHub API 查询最新版本 4. 检测已安装 → 读取本地版本、来源、安装路径 5. 版本比较 → 远程 vs 本地,决定升级/跳过/切换来源 6. 安装/升级 CLI → 按来源下载/安装,记录版本和来源 7. 安装 Node.js → npm 来源时自动安装 v22(GitHub 来源跳过) 8. 检查 Docker → 未安装则自动安装(Linux)/ 提示安装(Windows) 9. 配置 Hub → docker-compose.yml + .env,启动容器 10. 开机自启 → systemd 服务(Linux)/ 计划任务(Windows) 11. 返回结果 → 地址、Token、状态、常用命令 ``` --- ## 版本管理 脚本会在安装目录下记录元数据: | 文件 | 说明 | |------|------| | `.hapi-version` | 已安装的 HAPI CLI 版本号 | | `.hapi-source` | 安装来源(`npm` / `github:tiann/hapi` / `github:arkylin/Hapi-Docker`)| 重复运行脚本时会自动读取这些信息,判断是否需要升级。 ### 升级场景 ```bash # 场景 1: 保持当前来源升级 sudo bash install.sh --upgrade # 场景 2: 切换到 GitHub Release 安装 sudo bash install.sh --source github-official # 场景 3: 已是最新,强制重新安装 sudo bash install.sh --force ``` --- ## 安装后管理 ### Linux (systemd) ```bash # 查看状态 systemctl status hapi-hub systemctl status hapi-runner # 启停控制 systemctl start|stop|restart hapi-hub systemctl start|stop|restart hapi-runner # 禁用开机自启 systemctl disable hapi-hub systemctl disable hapi-runner # 查看日志 journalctl -u hapi-hub -f journalctl -u hapi-runner -f docker compose -f /opt/hapi/docker-compose.yml logs -f ``` ### Windows (计划任务) ```powershell # 查看状态 Get-ScheduledTask -TaskName "HAPI Hub" Get-ScheduledTask -TaskName "HAPI Runner" # 启停控制 Start-ScheduledTask -TaskName "HAPI Hub" Stop-ScheduledTask -TaskName "HAPI Hub" # 删除计划任务 Unregister-ScheduledTask -TaskName "HAPI Hub" -Confirm:$false Unregister-ScheduledTask -TaskName "HAPI Runner" -Confirm:$false # 查看日志 docker compose -f C:\hapi\docker-compose.yml logs -f ``` --- ## 安装目录 | 平台 | 路径 | 说明 | |------|------|------| | Linux | `/opt/hapi/` | Hub 配置、docker-compose、数据卷 | | Linux | `/opt/hapi/bin/` | GitHub Release 方式安装的 HAPI CLI | | Linux | `/opt/hapi/hapi-data/` | SQLite 数据库、Hub 持久化数据 | | Linux | `/etc/profile.d/hapi.sh` | PATH 环境变量配置 | | Linux | `/tmp/hapi-install.log` | 安装日志 | | Windows | `C:\hapi\` | Hub 配置、docker-compose、数据卷 | | Windows | `C:\hapi\bin\` | GitHub Release 方式安装的 HAPI CLI | | Windows | `C:\hapi\hapi-data\` | SQLite 数据库、Hub 持久化数据 | | Windows | `%TEMP%\hapi-install.log` | 安装日志 | --- ## 环境变量说明 脚本自动生成的 `.env` 文件: | 变量 | 必填 | 默认值 | 说明 | |------|------|--------|------| | `CLI_API_TOKEN` | 是 | 自动生成 | Hub 认证令牌 | | `HAPI_PUBLIC_URL` | 否 | 自动检测 | Hub 公网地址 | | `CORS_ORIGINS` | 否 | `*` | CORS 允许的域名 | | `TZ` | 否 | `Asia/Shanghai` | 时区 | --- ## 常见问题 ### GitHub API rate limit 未认证的 GitHub API 请求有每小时 60 次的限制。如遇此错误: ```bash # Linux: 设置 GITHUB_TOKEN 后重试 export GITHUB_TOKEN=your_token_here sudo -E bash install.sh --source github-official ``` ### npm 全局路径不在 PATH 脚本会自动检测并添加。如仍失败,手动添加: ```bash # Linux export PATH="$(npm config get prefix)/bin:$PATH" # Windows (PowerShell) $env:Path += ";$(npm config get prefix)" ```