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 下载二进制 | ❌ | 独立可执行文件,无需 Node.js 运行时 |
| github-fork | 从 arkylin/Hapi-Docker 下载二进制 | ❌ | 本仓库预构建版本 |
使用方法
Linux
# 交互式安装(默认提示选择来源)
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:
# 交互式安装
.\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) |
重复运行脚本时会自动读取这些信息,判断是否需要升级。
升级场景
# 场景 1: 保持当前来源升级
sudo bash install.sh --upgrade
# 场景 2: 切换到 GitHub Release 安装
sudo bash install.sh --source github-official
# 场景 3: 已是最新,强制重新安装
sudo bash install.sh --force
安装后管理
Linux (systemd)
# 查看状态
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 (计划任务)
# 查看状态
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 次的限制。如遇此错误:
# Linux: 设置 GITHUB_TOKEN 后重试
export GITHUB_TOKEN=your_token_here
sudo -E bash install.sh --source github-official
npm 全局路径不在 PATH
脚本会自动检测并添加。如仍失败,手动添加:
# Linux
export PATH="$(npm config get prefix)/bin:$PATH"
# Windows (PowerShell)
$env:Path += ";$(npm config get prefix)"