Files
Hapi-Docker/scripts

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)"