Files
OpenFlare/docs/en/plan/Agent Unified OpenResty Binary Control Scheme.md
T
2026-05-28 23:00:48 +08:00

85 lines
5.3 KiB
Markdown

# Agent Unified OpenResty Binary Control Scheme
## Summary
Unify the Agent running model as "write to the managed configuration file, then call the `openresty` binary to execute `-t`, reload, start/restart". Docker deployment no longer has the Agent control another OpenResty container, but instead provides an independent `ghcr.io/rain-kl/openflare-agent` image; this image is based on `openresty/openresty`, with the Agent controller and OpenResty binary built-in.
## Key Changes
- Agent runtime:
- Remove the DockerExecutor / Docker container management logic from the production path.
- Default to using `openresty` when `openresty_path` is not configured.
- Uniformly execute binary calls with `-c <main_config_path>` to avoid misreading the OpenResty default configuration.
- The apply flow is: backup -> write files -> `openresty -t -c ...` -> reload; if reload indicates it is not running, then start.
- restart uses `openresty -c ... -s quit` followed by `openresty -c ...` to start, keeping fault tolerance for missing PIDs.
- Configurations and File Responsibilities:
- Keep parser compatibility for old fields `openresty_container_name`, `openresty_docker_image`, and `docker_binary`, but mark them as deprecated and no longer involved in control logic.
- Add `access_log_path`, defaulting to `data_dir/var/log/openflare/access.log`, and no longer placing access logs inside `conf.d`.
- Add `runtime_config_dir`, defaulting to `data_dir/etc/openflare`, where `pow_config.json` is written.
- `cert_dir` only writes certificate/key files; `lua_dir` only writes Lua code and static resources.
- Support splitting files before writing: certificate files go into `cert_dir`, and `pow_config.json` goes into `runtime_config_dir`.
- Docker Agent Image:
- Add `openflare_agent/Dockerfile`, with the runtime image based on `openresty/openresty:alpine`.
- Defaults to `OPENFLARE_OPENRESTY_PATH=openresty` and `OPENFLARE_DATA_DIR=/data`.
- Expose `80`, `443`, and `18081`.
- Support mounting `/etc/openflare/agent.json`, and also support environment variable configurations.
- CI publishes independent multi-architecture images: `ghcr.io/rain-kl/openflare-agent:<version>` and `latest`.
- Agent Configuration Entry:
- Keep `-config` + `agent.json`.
- Add environment variable overrides/fallbacks: `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`.
- If the configuration file does not exist but environment variables are sufficient, the Agent can start directly; if both exist, environment variables override file values.
- Scripts and Documentation:
- `install-agent.sh` becomes a local OpenResty deployment script, adding `--openresty-path` and automatically finding `openresty` when not passed.
- `uninstall-agent.sh` only uninstalls the Agent itself, and no longer deletes the Docker OpenResty container or image.
- Update architecture, development constraints, deployment instructions, Agent guide, configuration item reference, README, and old Docker control descriptions in English image documents.
## Public Interfaces
- Add Agent configuration fields:
- `access_log_path`
- `runtime_config_dir`
- Deprecated but compatibly read:
- `openresty_container_name`
- `openresty_docker_image`
- `docker_binary`
- Add Docker image:
- `ghcr.io/rain-kl/openflare-agent`
- Target Docker execution method examples:
- Mount configuration file: `-v ./agent.json:/etc/openflare/agent.json`
- Or environment variables: `-e OPENFLARE_SERVER_URL=... -e OPENFLARE_AGENT_TOKEN=...`
## Test Plan
- `openflare_agent/internal/config`:
- Default `openresty_path` is `openresty`.
- Old Docker fields can be read but do not affect the executor.
- Environment variables can start the Agent without a configuration file and can override the configuration file.
- New default paths conform to responsibility boundaries.
- `openflare_agent/internal/nginx`:
- Binary commands all include `-c <main_config_path>`.
- Apply success, reload failure rollback, and start fallback when not running.
- `pow_config.json` is no longer written to `cert_dir` or `lua_dir`.
- Stale `cert_dir/pow_config.json` and `lua_dir/pow_config.json` will be cleaned up.
- access log is rendered to `access_log_path`.
- checksum can still uniformly include the main config, route config, certificates, and PoW config into comparisons.
- Integration Regression:
- `cd openflare_agent && GOCACHE=/tmp/openflare-go-cache go test ./...`
- `cd openflare_server && GOCACHE=/tmp/openflare-go-cache go test ./...`
- Dockerfile build smoke test: build the Agent image and start it using env-only configuration to the executable stage.
## Assumptions
- Docker Agent image name is fixed as `ghcr.io/rain-kl/openflare-agent`.
- Old Docker control fields are compatibly preserved but are no longer a supported behavior.
- This phase does not modify Server APIs, does not modify database models, and does not introduce remote command capabilities.
- The OpenResty main configuration template continues to be generated by the Server; the Agent is only responsible for local path replacement, file landing, and binary control.