综合 OpenFlare:自托管 OpenResty 控制面,配置版本化发布 + Agent 自动 reload 与回滚

2026-10-11 20:00:53

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

复制全文 生成海报 OpenResty 运维 反向代理 自托管 Docker

推荐文章

程序员茄子在线接单