OpenFlare:自托管 OpenResty 控制面,配置版本化发布 + Agent 自动 reload 与回滚
OpenFlare 是一个轻量、自托管的 OpenResty 控制面,用于管理反向代理规则、配置发布、节点同步、TLS 证书与基础可观测能力。
- 仓库:github.com/Rain-kl/OpenFlare(README 由 VMXWorld fork 镜像)
- 许可证:Apache License 2.0
- 项目处于快速迭代期,设计与实现均不稳定,请使用最新版本并关注更新日志。
解决的高频运维问题
- 在一个管理端里维护域名到源站的反向代理规则
- 生成完整 OpenResty 配置并以不可变版本发布
- 让节点侧 Agent 自动拉取、校验、reload 与失败回滚
- 统一托管证书、域名、节点凭证与版本状态
- 提供总览、节点详情与访问分析能力
核心能力
- 配置版本化:支持预览、发布、激活、历史回滚
- Agent 自动应用:周期性同步、落盘、
openresty -t校验、openresty -s reload、失败自动回滚 - OpenResty 托管:统一管理主配置模板、性能参数、缓存参数与受管路由
- TLS 与域名管理:支持证书托管、域名资产维护、精确匹配与通配符匹配
- 访问与节点观测:请求窗口聚合、状态码分布、来源分布、节点资源与健康事件展示
系统架构
OpenFlare Server (Gin + GORM + SQLite/PostgreSQL + Web UI)
| HTTP API / Config Pull
v
OpenFlare Agent (register / heartbeat / sync / apply / update)
|
v
Local OpenResty or Docker OpenResty
|
v
Origin
职责划分
openflare_server:管理端 UI、管理 API、Agent API、配置渲染、版本发布与状态存储openflare_agent:节点注册、心跳、同步、本地写入、校验、reload、回滚、自更新openflare_server/web:新版管理端前端,静态导出后由 Go Server 托管
快速开始
1. 启动 Server(docker compose)
services:
postgres:
image: postgres:17-alpine
restart: unless-stopped
environment:
POSTGRES_DB: openflare
POSTGRES_USER: openflare
POSTGRES_PASSWORD: replace-with-strong-password
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U openflare -d openflare"]
interval: 10s
timeout: 5s
retries: 5
openflare:
image: ghcr.io/rain-kl/openflare:latest
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
ports:
- "3000:3000"
environment:
SESSION_SECRET: replace-with-random-string
DSN: postgres://openflare:replace-with-strong-password@postgres:5432/openflare?sslmode=disable
GIN_MODE: release
LOG_LEVEL: info
volumes:
postgres-data:
docker compose up -d
访问 http://localhost:3000,默认账号 root / 密码 123456(务必修改,并关闭新用户注册)。
2. 接入 Agent
需先装 Docker;裸 OpenResty 支持但未充分验证。
使用 discovery_token:
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
使用节点专属 agent_token:
curl -fsSL https://raw.githubusercontent.com/Rain-kl/OpenFlare/main/scripts/install-agent.sh | bash -s -- \
--server-url http://your-server:3000 \
--agent-token YOUR_AGENT_TOKEN
安装脚本默认写入 /opt/openflare-agent,创建 openflare-agent.service,可重复执行以重装或升级 Agent。
卸载:
curl -fsSL https://raw.githubusercontent.com/Rain-kl/OpenFlare/main/scripts/uninstall-agent.sh | bash
卸载脚本先停止并移除 openflare-agent.service、删除 /opt/openflare-agent,再根据 agent.json 判断 OpenResty 安装方式:Docker 模式删除对应容器并尝试移除镜像;本机 openresty_path 模式不改动本机 OpenResty,只提示手动卸载。
3. 发布第一份配置
- 登录管理端并新增反代规则
- 发布前查看预览或变更摘要
- 激活新版本
- 等待 Agent 在后续 heartbeat 中拉取并应用配置
版本号格式固定为 YYYYMMDD-NNN,历史版本不可变,回滚通过重新激活旧版本完成。
本地开发
Server:
cd openflare_server
export SESSION_SECRET='replace-with-random-string'
export SQLITE_PATH='./openflare.db'
# 设置 DSN 或 SQL_DSN 后切换到 PostgreSQL;若 PostgreSQL 为空且 ./openflare.db 存在,启动时会自动迁移 SQLite 数据。
# export DSN='postgres://openflare:secret@127.0.0.1:5432/openflare?sslmode=disable'
go run .
Frontend:
cd openflare_server/web
pnpm install
pnpm dev
Agent:
cd openflare_agent
go run ./cmd/agent -config /path/to/agent.json
管理端覆盖
反代规则、配置版本、节点管理、应用记录、TLS 证书、域名管理、用户管理、设置、版本更新。
登录后可访问 Swagger UI:/swagger/index.html