feat: add one-click install scripts for Linux and Windows

- Support multiple install sources: npm, GitHub Release (official/fork)
- Auto-detect installed version and support upgrade across sources
- Auto-match system architecture when downloading from GitHub Release
- Create systemd services (Linux) and scheduled tasks (Windows)
- Update README with quick-start one-liner commands

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <[email protected]>
This commit is contained in:
i
2026-06-01 22:57:55 +08:00
co-authored by HAPI
parent 4759787276
commit 4f2a71c3e3
4 changed files with 2091 additions and 0 deletions
+222
View File
@@ -0,0 +1,222 @@
# 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
# 显示帮助
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
```
---
## 脚本流程
```
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)"
```