mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-02 14:56:38 +08:00
4.7 KiB
4.7 KiB
Agent Unified OpenResty Binary Control Scheme
Agent 统一 OpenResty 二进制控制方案
Summary
将 Agent 运行模型统一为“写入受管配置文件,然后调用 openresty 二进制执行 -t、reload、start/restart”。Docker 部署不再由 Agent 控制另一个 OpenResty 容器,而是提供独立的 ghcr.io/rain-kl/openflare-agent 镜像;该镜像基于 openresty/openresty,内置 Agent 控制器和 OpenResty 二进制。
Key Changes
-
Agent runtime:
- 移除生产路径中的 DockerExecutor / Docker 容器管理逻辑。
openresty_path未配置时默认使用openresty。- 二进制执行统一带
-c <main_config_path>,避免误读 OpenResty 默认配置。 - apply 流程为:备份 -> 写入文件 ->
openresty -t -c ...-> reload;若 reload 表明未运行,则 start。 - restart 使用
openresty -c ... -s quit后再openresty -c ...启动,保留缺失 PID 的容错。
-
配置与文件职责:
- 保留旧字段
openresty_container_name、openresty_docker_image、docker_binary的解析兼容,但标记废弃且不再参与控制逻辑。 - 新增
access_log_path,默认data_dir/var/log/openflare/access.log,不再把访问日志放进conf.d。 - 新增
runtime_config_dir,默认data_dir/etc/openflare,pow_config.json写入这里。 cert_dir只写证书/密钥文件;lua_dir只写 Lua 代码与静态资源。- 支持文件写入前先拆分:证书文件进入
cert_dir,pow_config.json进入runtime_config_dir。
- 保留旧字段
-
Docker Agent 镜像:
- 新增
openflare_agent/Dockerfile,运行镜像基于openresty/openresty:alpine。 - 默认
OPENFLARE_OPENRESTY_PATH=openresty、OPENFLARE_DATA_DIR=/data。 - 暴露
80、443、18081。 - 支持挂载
/etc/openflare/agent.json,也支持环境变量配置。 - CI 发布独立多架构镜像:
ghcr.io/rain-kl/openflare-agent:<version>和latest。
- 新增
-
Agent 配置入口:
- 保留
-config+agent.json。 - 新增环境变量覆盖/兜底:
OPENFLARE_SERVER_URL、OPENFLARE_AGENT_TOKEN、OPENFLARE_DISCOVERY_TOKEN、OPENFLARE_NODE_NAME、OPENFLARE_NODE_IP、OPENFLARE_DATA_DIR、OPENFLARE_OPENRESTY_PATH、OPENFLARE_HEARTBEAT_INTERVAL、OPENFLARE_REQUEST_TIMEOUT、OPENFLARE_OPENRESTY_OBSERVABILITY_PORT。 - 若配置文件不存在但环境变量足够,Agent 可直接启动;若两者都存在,环境变量覆盖文件值。
- 保留
-
脚本与文档:
install-agent.sh转为本地 OpenResty 部署脚本,增加--openresty-path,未传时自动查找openresty。uninstall-agent.sh只卸载 Agent 本身,不再删除 Docker OpenResty 容器或镜像。- 更新架构、开发约束、部署说明、Agent 指南、配置项参考、README,以及英文镜像文档中的旧 Docker 控制说明。
Public Interfaces
-
新增 Agent 配置字段:
access_log_pathruntime_config_dir
-
废弃但兼容读取:
openresty_container_nameopenresty_docker_imagedocker_binary
-
新增 Docker 镜像:
ghcr.io/rain-kl/openflare-agent
-
Docker 运行方式示例目标:
- 挂载配置文件:
-v ./agent.json:/etc/openflare/agent.json - 或环境变量:
-e OPENFLARE_SERVER_URL=... -e OPENFLARE_AGENT_TOKEN=...
- 挂载配置文件:
Test Plan
-
openflare_agent/internal/config:- 默认
openresty_path为openresty。 - 旧 Docker 字段可读取但不影响 executor。
- 环境变量可在无配置文件时启动,并可覆盖配置文件。
- 新默认路径符合职责边界。
- 默认
-
openflare_agent/internal/nginx:- 二进制命令都包含
-c <main_config_path>。 - apply 成功、reload 失败后回滚、未运行时 start fallback。
pow_config.json不再写入cert_dir或lua_dir。- stale
cert_dir/pow_config.json与lua_dir/pow_config.json会被清理。 - access log 渲染到
access_log_path。 - checksum 仍能把主配置、路由配置、证书和 PoW 配置统一纳入比较。
- 二进制命令都包含
-
集成回归:
cd openflare_agent && GOCACHE=/tmp/openflare-go-cache go test ./...cd openflare_server && GOCACHE=/tmp/openflare-go-cache go test ./...- Dockerfile 构建 smoke test:构建 Agent 镜像并用 env-only 配置启动到可执行阶段。
Assumptions
- Docker Agent 镜像名固定为
ghcr.io/rain-kl/openflare-agent。 - 旧 Docker 控制字段保留兼容,但不再作为受支持行为。
- 本次不改 Server API、不改数据库模型、不引入远程命令能力。
- OpenResty 主配置模板继续由 Server 生成;Agent 只负责本地路径替换、文件落盘和二进制控制。