[优化] 部署脚本优化

This commit is contained in:
ryan
2026-06-06 11:06:45 +08:00
parent 3cfefb4367
commit 2662c65f57
6 changed files with 577 additions and 228 deletions
+4
View File
@@ -20,12 +20,16 @@ sidebar: false
### 新增
- 新增 Agent 交互式安装向导,支持选择本地安装和 Docker 运行模式;未传参数时自动进入交互菜单
- 新增 Docker 运行模式的智能环境检查,检测到未安装 Docker 时支持一键在线安装,中国大陆环境支持多镜像源自动测速优选与加速器配置
- 新增 Agent 交互式卸载向导,支持选择本地卸载和 Docker 容器卸载模式;未传参数时自动进入交互菜单
- 新增 Pages 静态托管使用指南(`pages-usage.md`),讲解 ZIP 上传、SPA Fallback 与 API 代理配置
- 新增 Uptime Kuma 监控同步集成指南(`uptime-kuma.md`),说明同步参数与专属标签隔离机制
- 完善 WAF IP 组订阅模式使用指南(`waf-usage.md`),补充 JSON 路径提取映射规则与同步参数说明
### 变更
- 重构 `install-agent.sh` 安装脚本与 `uninstall-agent.sh` 卸载脚本以兼容交互式导引、非交互式命令行参数及 Docker 部署/卸载参数(`--docker`/`--method docker`)
- 重构 Go 包依赖结构为统一模块(Monorepo),模块命名为 `github.com/rain-kl/openflare`
- 移除各子目录下独立的 `go.mod`/`go.sum` 文件,统一由根目录 `go.mod` 进行全局依赖管理与依赖版本锁定
- 替换全仓库 Go 源文件中的内部引用路径,由本地相对路径迁移为标准 GitHub 绝对导入路径
+54 -11
View File
@@ -20,7 +20,19 @@ OpenFlare Agent 运行在代理节点侧。它不会接收远程 shell 指令,
## 一键安装
使用 `discovery_token`:
### 交互式安装 (推荐)
如果在不传递任何参数的情况下运行安装脚本,脚本将进入交互模式。您将可以通过向导选择安装方式(本地运行 / Docker 容器运行),并配置 Server 地址与认证 Token(若选择 Docker 方式且本地没有 Docker,脚本还会询问并智能安装 Docker):
```bash
curl -fsSL https://raw.githubusercontent.com/Rain-kl/OpenFlare/main/scripts/install-agent.sh | bash
```
### 自动化 (非交互式) 安装
如果在执行脚本时附加了任何参数,脚本将进入自动化安装模式,不需要任何交互。
使用 `discovery_token` 进行本地安装:
```bash
curl -fsSL https://raw.githubusercontent.com/Rain-kl/OpenFlare/main/scripts/install-agent.sh | bash -s -- \
@@ -28,7 +40,7 @@ curl -fsSL https://raw.githubusercontent.com/Rain-kl/OpenFlare/main/scripts/inst
--discovery-token YOUR_DISCOVERY_TOKEN
```
使用节点专属 `agent_token`:
使用节点专属 `agent_token` 进行本地安装:
```bash
curl -fsSL https://raw.githubusercontent.com/Rain-kl/OpenFlare/main/scripts/install-agent.sh | bash -s -- \
@@ -36,19 +48,30 @@ curl -fsSL https://raw.githubusercontent.com/Rain-kl/OpenFlare/main/scripts/inst
--agent-token YOUR_AGENT_TOKEN
```
安装脚本会下载最新 Agent,默认写入 `/opt/openflare-agent`,生成 `agent.json`,并在 Linux + systemd 环境创建 `openflare-agent.service`。
使用 Docker 容器自动化安装:
```bash
curl -fsSL https://raw.githubusercontent.com/Rain-kl/OpenFlare/main/scripts/install-agent.sh | bash -s -- \
--server-url http://your-server:3000 \
--discovery-token YOUR_DISCOVERY_TOKEN \
--docker
```
安装脚本在本地安装模式下会下载最新 Agent,默认写入 `/opt/openflare-agent`,生成 `agent.json`,并在 Linux + systemd 环境创建 `openflare-agent.service`。
支持参数:
| 参数 | 说明 |
| --- | --- |
| `--server-url` | Server 地址,必填 |
| `--server-url` | Server 地址 |
| `--discovery-token` | 首次自动注册 Token |
| `--agent-token` | 节点专属 Token |
| `--install-dir` | 安装目录,默认 `/opt/openflare-agent` |
| `--openresty-path` | OpenResty 二进制路径,未传时自动查找 `openresty` |
| `--install-dir` | 安装目录,默认 `/opt/openflare-agent`(仅本地安装生效) |
| `--openresty-path` | OpenResty 二进制路径,未传时自动查找 `openresty`(仅本地安装生效) |
| `--repo` | 下载 Agent 的 GitHub 仓库,默认 `Rain-kl/OpenFlare` |
| `--no-service` | 不创建 systemd 服务 |
| `--no-service` | 不创建 systemd 服务(仅本地安装生效) |
| `--docker` | 使用 Docker 容器方式安装 |
| `--method` | 安装方式,可选 `local` 或 `docker`(默认 `local`) |
## 配置文件
@@ -150,20 +173,40 @@ export LOG_LEVEL='info'
## 卸载
如需彻底卸载 Agent 并清空本地数据:
### 交互式卸载 (推荐)
如果在不传递任何参数的情况下运行卸载脚本,脚本将进入交互模式。您可以通过提示菜单选择卸载方式(本地卸载 / Docker 容器卸载):
```bash
curl -fsSL https://raw.githubusercontent.com/Rain-kl/OpenFlare/main/scripts/uninstall-agent.sh | bash
```
### 自动化 (非交互式) 卸载
使用命令行传参进行无人值守卸载。
本地卸载(默认):
```bash
curl -fsSL https://raw.githubusercontent.com/Rain-kl/OpenFlare/main/scripts/uninstall-agent.sh | bash -s -- --install-dir /opt/openflare-agent
```
Docker 容器卸载:
```bash
curl -fsSL https://raw.githubusercontent.com/Rain-kl/OpenFlare/main/scripts/uninstall-agent.sh | bash -s -- --docker
```
支持参数:
| 参数 | 说明 |
| --- | --- |
| `--install-dir` | 安装目录,默认 `/opt/openflare-agent` |
| `--service-name` | systemd 服务名,默认 `openflare-agent` |
| `--install-dir` | 安装目录,默认 `/opt/openflare-agent`(仅本地卸载生效) |
| `--service-name` | systemd 服务名,默认 `openflare-agent`(仅本地卸载生效) |
| `--docker` | 使用 Docker 容器方式卸载 |
| `--method` | 卸载方式,可选 `local` 或 `docker`(默认 `local`) |
卸载脚本只移除 Agent 服务、进程和安装目录,不会删除本机 OpenResty。
本地卸载只会移除 Agent 服务、进程和安装目录,不会删除本机 OpenResty。Docker 卸载会停止并删除 `openflare-agent` 容器,交互模式下还可以选择是否清理对应的 Docker 镜像。
## 常见问题
@@ -0,0 +1,85 @@
# 交互式智能安装脚本实现计划
本计划旨在拓展 OpenFlare Agent 安装脚本的功能,支持交互式选择本地安装或 Docker 容器安装,并提供智能检测/在线安装 Docker 环境的机制,同时保留通过命令行传参进行自动化安装的既有能力。
---
## 1. 目标与背景 (Goal & Context)
* **需求背景**:当前安装脚本 `install-agent.sh` 仅支持在宿主机直接下载二进制并配置为本地 systemd 服务运行。随着 Docker 部署方式的普及,需要让用户在一键安装时能根据需要交互式选择 Docker 或本地部署,从而提升部署体验。
* **开发范围 (Scope)**:
* 支持交互式运行(未传参时):提示用户选择 Local 方式或 Docker 方式。
* 当选择 Docker 方式时,检测本地是否存在 `docker` 命令。若不存在,提示并在线安装 Docker(支持国内镜像源及自动测速选择最低延迟源)。
* 交互引导用户配置 `server_url` 和 `agent-token` 或 `discovery-token`。
* 如果选择 Docker,则最终拉取 Agent 镜像并运行容器;如果选择 Local,则继续原有的本地二进制下载及配置发布逻辑。
* 兼容非交互式模式:如果执行脚本时传递了任意参数,则跳过任何交互式提示,直接进行自动化安装(支持新参数 `--docker` / `--method docker` 来自动选用 Docker 部署)。
---
## 2. 设计与决策 (Design & Decisions)
### 交互工作流
1. 检查 `$#`(参数数量)。若 `$# -eq 0`,激活 `INTERACTIVE=true`。
2. 在交互模式下:
* 引导用户选择安装方法(1: Local, 2: Docker)。
* 若选择 Docker,调用 `Install_Docker` 检测并安装环境。
* 引导用户输入 `SERVER_URL` 并进行非空校验。
* 引导用户选择 Token 类型(1: Discovery Token, 2: Agent Token),并输入对应的 Token 值。
* 若选择 Local 且未传 `--openresty-path`,如果 `openresty` 二进制未能在 $PATH 中找到,交互提示用户手动输入 OpenResty 路径。
3. 非交互模式下:
* 解析命令行参数。
* 支持通过 `--docker` 或 `--method docker` 指定 Docker 容器安装。
* 依然根据传入的 `--server-url` 和 Token 自动执行安装,绝不进行任何交互。
### 数据流与架构图
```mermaid
graph TD
Start[执行 install-agent.sh] --> CheckArgs{是否有命令行参数?}
CheckArgs -- 是 (非交互模式) --> ParseArgs[解析参数]
ParseArgs --> IsDockerParam{是否指定 Docker?}
IsDockerParam -- 是 --> RunDocker[Docker 容器拉取与启动]
IsDockerParam -- 否 --> RunLocal[本地二进制下载与 systemd 服务创建]
CheckArgs -- 否 (交互模式) --> PromptMethod[提示选择 Local 或 Docker]
PromptMethod --> MethodChosen{选择结果}
MethodChosen -- Docker --> CheckDocker{本地有 Docker 吗?}
CheckDocker -- 否 --> PromptDockerInstall[询问是否安装 Docker?]
PromptDockerInstall -- 是 --> InstallDocker[在线安装 Docker + 配置国内镜像加速]
PromptDockerInstall -- 否 --> ExitScript[取消安装并退出]
CheckDocker -- 是 --> PromptServerUrl[提示输入 Server URL & Token]
InstallDocker --> PromptServerUrl
MethodChosen -- Local --> PromptLocalConfig[检测 OpenResty 并提示输入 Server URL & Token]
PromptServerUrl --> RunDocker
PromptLocalConfig --> RunLocal
```
---
## 3. 具体修改文件清单 (Proposed Changes)
### 边缘 Agent 与部署脚本
* #### [MODIFY] [install-agent.sh](file:///Users/ryan/DEV/Go/OpenFlare/scripts/install-agent.sh)
* 职责:
1. 引入交互式选择逻辑和 `Install_Docker` / `configure_accelerator` 函数。
2. 新增 `--docker` 和 `--method` 命令行参数支持。
3. 支持用户交互输入配置项。
4. 增加 Docker 镜像拉取、停止旧容器并启动新容器的安装路径。
* #### [MODIFY] [agent.md](file:///Users/ryan/DEV/Go/OpenFlare/docs/deployment/agent.md)
* 职责:更新一键安装说明文档,增加交互式模式的说明以及 `--docker` 参数的自动化 Docker 安装说明。
---
## 4. 验证计划 (Verification Plan)
### 自动化与脚本测试
* 在干净的测试环境运行脚本:
* `bash scripts/install-agent.sh` (测试交互模式 -> 选用 Local)
* `bash scripts/install-agent.sh` (测试交互模式 -> 选用 Docker)
* `bash scripts/install-agent.sh --server-url http://127.0.0.1:3000 --discovery-token mytoken` (测试自动 Local 安装)
* `bash scripts/install-agent.sh --server-url http://127.0.0.1:3000 --discovery-token mytoken --docker` (测试自动 Docker 安装)
### 数据面生效验证
* 通过 `docker ps` 和 `docker logs openflare-agent` 确认容器成功拉取并启动,环境参数注入正确。