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:
@@ -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)"
|
||||
```
|
||||
Reference in New Issue
Block a user