重构 Nginx 执行器,支持通过 Docker 启动独立 Nginx 容器,更新配置结构,完善相关文档和测试用例

This commit is contained in:
ryan
2026-03-09 23:35:34 +08:00
parent 65817ac9b6
commit c4f314f2c5
10 changed files with 288 additions and 30 deletions
+11 -4
View File
@@ -70,9 +70,11 @@ go run .
"node_ip": "10.0.0.8",
"agent_version": "0.1.0",
"nginx_version": "1.25.5",
"nginx_path": "/opt/nginx/sbin/nginx",
"nginx_container_name": "atsflare-nginx",
"nginx_docker_image": "nginx:stable-alpine",
"route_config_path": "/etc/nginx/conf.d/atsflare_routes.conf",
"state_path": "/var/lib/atsflare/agent-state.json",
"nginx_binary": "nginx",
"heartbeat_interval": 30000000000,
"sync_interval": 30000000000,
"request_timeout": 10000000000
@@ -84,6 +86,9 @@ go run .
- 时间字段单位是纳秒,因为当前实现直接使用 Go 的 `time.Duration` JSON 反序列化
- `agent_token` 必须与 Server 侧 `AGENT_TOKEN` 完全一致
- `route_config_path` 只应指向 ATSFlare 独立管理的路由文件
- `nginx_path` 用于显式指定独立 Nginx 可执行文件路径
- 如果未指定 `nginx_path`,Agent 会尝试通过 Docker 启动独立 Nginx 容器
- Docker 模式默认使用 `nginx_container_name` 和 `nginx_docker_image`
### 3.2 启动 Agent
@@ -126,9 +131,10 @@ go build -o atsflare-agent ./cmd/agent
1. Agent 首次注册节点
2. Agent 拉取当前激活版本
3. Agent 写入 `route_config_path`
4. Agent 执行 `nginx -t`
5. Agent 执行 `nginx -s reload`
6. Agent 上报成功结果
4. Agent 使用 `nginx_path` 指向的独立 Nginx,或自动准备 Docker Nginx 容器
5. Agent 执行 `nginx -t`
6. Agent 执行 `nginx -s reload`
7. Agent 上报成功结果
### 4.4 验证管理端状态
@@ -181,6 +187,7 @@ npm run build
- Agent 运行器当前任一心跳或同步失败会直接退出,需要结合进程管理器拉起
- 尚未提供 systemd unit 文件
- 尚未提供 Docker Compose 或一键部署脚本
- Docker 模式当前默认直接启动单容器 Nginx,挂载与端口策略仍是 MVP 水平
- 前端页面已可用,但交互和校验仍是 MVP 水平
- 目前联调说明以手工步骤为主,未内置完整自动化端到端脚本
+4 -1
View File
@@ -62,7 +62,9 @@ Agent 使用 Go 单体程序:
* 单二进制
* systemd 管理
* 本地调用 `nginx`
* 优先调用独立 Nginx,而不是依赖系统全局 Nginx
* 显式配置 `nginx_path` 时,直接调用该路径下的 Nginx
* 未配置 `nginx_path` 时,默认通过 Docker 运行独立 Nginx 容器
* 管理本机 Nginx 路由配置文件和 reload
### Nginx 管理边界
@@ -71,6 +73,7 @@ Agent 使用 Go 单体程序:
* 重点生成独立的 Nginx 路由配置文件,例如 `/etc/nginx/conf.d/atsflare_routes.conf`
* `nginx.conf`、TLS 证书、缓存细节、upstream 高级配置先保持节点本地静态配置
* Agent 可以管理独立安装路径下的 Nginx,或者独立 Docker Nginx 容器
也就是说,MVP 先把 Nginx 当成“可集中配置的反向代理”,不是完整网关平台。
+6 -1
View File
@@ -47,7 +47,9 @@ Agent 放在 `atsf_agent`,使用 Go 单体程序开发。
* 单二进制
* systemd 运行
* 本地调用 `nginx`
* 优先调用独立 Nginx,不依赖系统全局 Nginx
* 支持通过 `nginx_path` 显式指定独立 Nginx 可执行文件
* 未指定 `nginx_path` 时,默认通过 Docker 启动独立 Nginx 容器
* 负责本机 Nginx 路由配置写入、校验、reload、状态上报
### 2.3 Nginx 配置边界
@@ -88,6 +90,7 @@ Agent 放在 `atsf_agent`,使用 Go 单体程序开发。
* 调用 `nginx -t` 和 `nginx -s reload`
* 失败回滚
* 上报应用结果
* 管理独立 Nginx 路径或 Docker Nginx 容器
### 3.3 `docs`
@@ -260,6 +263,8 @@ Agent 必须满足以下行为:
* 校验通过后执行 `nginx -s reload`
* 失败时回滚备份并再次校验和 reload
* 上报最终应用结果
* 优先使用 `nginx_path`
* 未配置 `nginx_path` 时自动准备并使用 Docker Nginx 容器
### 7.3 容错规范
+1
View File
@@ -150,6 +150,7 @@
* 写入前会备份旧路由配置文件
* `nginx -t` 或 reload 失败后会回滚
* 回滚结果会回传给 Server
* Agent 可使用独立 Nginx 路径或 Docker Nginx 容器运行
### Phase 4 检查项