mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-09-30 06:16:37 +08:00
235 lines
6.5 KiB
Markdown
235 lines
6.5 KiB
Markdown
<p align="right">
|
||
<strong>中文</strong> | <a href="./README.en.md">English</a>
|
||
</p>
|
||
|
||
<div align="center">
|
||
|
||
[//]: # ( <img src="./openflare_server/web/public/logo.png" width="120" height="120" alt="OpenFlare logo">)
|
||
|
||
# OpenFlare
|
||
|
||
轻量、自托管的 OpenResty 控制面,用于管理反向代理规则、配置发布、节点同步、TLS 证书与基础可观测能力。
|
||
|
||
</div>
|
||
|
||
<p align="center">
|
||
<a href="https://raw.githubusercontent.com/Rain-kl/OpenFlare/main/LICENSE">
|
||
<img src="https://img.shields.io/github/license/Rain-kl/OpenFlare?color=brightgreen" alt="license">
|
||
</a>
|
||
<a href="https://github.com/Rain-kl/OpenFlare/releases/latest">
|
||
<img src="https://img.shields.io/github/v/release/Rain-kl/OpenFlare?color=brightgreen&include_prereleases" alt="release">
|
||
</a>
|
||
<a href="https://github.com/Rain-kl/OpenFlare/pkgs/container/openflare">
|
||
<img src="https://img.shields.io/badge/GHCR-ghcr.io%2Frain--kl%2Fopenflare-brightgreen" alt="ghcr">
|
||
</a>
|
||
</p>
|
||
|
||
## 为什么存在
|
||
|
||
OpenFlare 解决的是一类朴素但高频的运维问题:
|
||
|
||
* 在一个管理端里维护域名到源站的反向代理规则
|
||
* 生成完整 OpenResty 配置并以不可变版本发布
|
||
* 让节点侧 Agent 自动拉取、校验、reload 与失败回滚
|
||
* 统一托管证书、域名、节点凭证与版本状态
|
||
* 提供足够实用的总览、节点详情与访问分析能力
|
||
|
||
## 核心能力
|
||
|
||
* 配置版本化:支持预览、发布、激活、历史回滚
|
||
* Agent 自动应用:周期性同步、落盘、`openresty -t`、`openresty -s reload`、失败自动回滚
|
||
* OpenResty 托管:统一管理主配置模板、性能参数、缓存参数与受管路由
|
||
* TLS 与域名管理:支持证书托管、域名资产维护、精确匹配与通配符匹配
|
||
* 访问与节点观测:支持请求窗口聚合、状态码分布、来源分布、节点资源与健康事件展示
|
||
|
||
## 系统架构
|
||
|
||
```text
|
||
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
|
||
|
||
```yaml
|
||
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:
|
||
- openflare-data:/data
|
||
|
||
volumes:
|
||
postgres-data:
|
||
openflare-data:
|
||
```
|
||
|
||
```bash
|
||
docker compose up -d
|
||
```
|
||
|
||
访问地址:`http://localhost:3000`
|
||
|
||
默认账号:
|
||
|
||
* 用户名:`root`
|
||
* 密码:`123456`
|
||
|
||
### 2. 接入 Agent
|
||
|
||
**注意:** 安装agent前需确保存已经安装了Docker, 虽然支持裸Openresty,但未得到充分验证,可能存在未知问题.
|
||
|
||
使用 `discovery_token` 接入:
|
||
|
||
```bash
|
||
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`:
|
||
|
||
```bash
|
||
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。
|
||
|
||
### 3. 发布第一份配置
|
||
|
||
1. 登录管理端并新增反代规则
|
||
2. 在发布前查看预览或变更摘要
|
||
3. 激活新版本
|
||
4. 等待 Agent 在后续 heartbeat 中拉取并应用配置
|
||
|
||
版本号格式固定为 `YYYYMMDD-NNN`,历史版本不可变,回滚通过重新激活旧版本完成。
|
||
|
||
## 仓库结构
|
||
|
||
* `openflare_server`:Gin + GORM + SQLite/PostgreSQL 单体控制面
|
||
* `openflare_server/web`:Next.js 15 App Router 管理端前端
|
||
* `openflare_agent`:Go 单体 Agent
|
||
* `scripts`:安装脚本与辅助脚本
|
||
* `docs`:设计、规范、部署与配置文档
|
||
|
||
## 本地开发
|
||
|
||
### Server
|
||
|
||
```bash
|
||
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
|
||
|
||
```bash
|
||
cd openflare_server/web
|
||
pnpm install
|
||
pnpm dev
|
||
```
|
||
|
||
### Agent
|
||
|
||
```bash
|
||
cd openflare_agent
|
||
go run ./cmd/agent -config /path/to/agent.json
|
||
```
|
||
|
||
## 文档导航
|
||
|
||
建议按以下顺序阅读:
|
||
|
||
1. [docs/design.md](./docs/design.md)
|
||
2. [docs/development-guidelines.md](./docs/development-guidelines.md)
|
||
3. [docs/development-plan.md](./docs/development-plan.md)
|
||
4. [docs/frontend-development-guidelines.md](./docs/frontend-development-guidelines.md)
|
||
5. [docs/deployment.md](./docs/deployment.md)
|
||
6. [docs/app-config.md](./docs/app-config.md)
|
||
|
||
## 管理端与接口
|
||
|
||
管理端当前覆盖:
|
||
|
||
* 反代规则
|
||
* 配置版本
|
||
* 节点管理
|
||
* 应用记录
|
||
* TLS 证书
|
||
* 域名管理
|
||
* 用户管理
|
||
* 设置
|
||
* 版本更新
|
||
|
||
登录管理端后,可访问 Swagger UI:`/swagger/index.html`
|
||
|
||
如需重新生成 Swagger 文档,请使用与服务端依赖一致的版本:
|
||
`go install github.com/swaggo/swag/cmd/swag@v1.16.4`
|
||
|
||
## 开源协议
|
||
|
||
本项目采用 [Apache License 2.0](./LICENSE) 开源。
|