diff --git a/README.md b/README.md index 5f67b245..c92e6a48 100644 --- a/README.md +++ b/README.md @@ -54,16 +54,25 @@ OpenFlare 是开源 CDN 编排与边缘安全平台。它支持反向代理、 ![OpenFlare dashboard overview](./docs/assets/readme/dashboard-overview.png) -### 节点详情 +### 访问日志 -![OpenFlare node detail](./docs/assets/readme/node-detail.png) +![OpenFlare version release](./docs/assets/readme/domain_overview.png) -### 配置新增 +### WAF 防护 -![OpenFlare version release](./docs/assets/readme/proxy-route-detail.png) +![OpenFlare version release](./docs/assets/readme/waf.png) ## 快速开始 +### 硬件配置推荐 + +| 组件 | 最低硬件配额 | 推荐硬件配额 | 说明 | +| --- |-------------------------------| --- | --- | +| **Server 控制面** | 1 核 CPU / 2 GB 内存 / 20 GB 磁盘 | 2 核 CPU / 4 GB 内存 / 50 GB+ 磁盘 | 磁盘用量需根据访问日志留存时长与并发流量合理扩容 | +| **Agent 数据面** | 1 核 CPU / 512 MB 内存 / 2 GB 磁盘 | 2 核 CPU / 2 GB 内存 / 10 GB+ 磁盘 | 根据 OpenResty 的并发代理连接量与 WAF 拦截处理扩容 | +| **Relay 中继节点**| 1 核 CPU / 1 GB 内存 / 5 GB 磁盘 | 2 核 CPU / 2 GB 内存 / 20 GB 磁盘 | frps 传输中继吞吐量主要受带宽与 CPU 吞吐能力限制 | +| **OpenFlared 客户端**| 1 核 CPU / 256 MB 内存 / 1 GB 磁盘 | 1 核 CPU / 512 MB 内存 / 5 GB 磁盘 | 独立运行于内网,自身资源占用极小,保障网络吞吐即可 | + ### 1. 启动 Server 使用 docker-compose @@ -72,11 +81,6 @@ OpenFlare 是开源 CDN 编排与边缘安全平台。它支持反向代理、 # 下载环境变量模板并创建 .env 文件 curl -o .env.example https://raw.githubusercontent.com/Rain-kl/OpenFlare/refs/heads/main/.env.example cp .env.example .env - -# ClickHouse 服务端:curl performance.xml 到 ./config/clickhouse,并以单文件方式挂载到 config.d -mkdir -p ./config/clickhouse -curl -fsSL -o ./config/clickhouse/performance.xml \ - https://raw.githubusercontent.com/Rain-kl/OpenFlare/refs/heads/main/config/clickhouse/performance.xml ``` ```yaml @@ -96,8 +100,6 @@ services: condition: service_healthy redis: condition: service_healthy - clickhouse: - condition: service_healthy postgres: image: postgres:17-alpine @@ -127,34 +129,10 @@ services: retries: 5 start_period: 5s - clickhouse: - image: clickhouse/clickhouse-server:25.3-alpine - restart: unless-stopped - environment: - CLICKHOUSE_DB: ${CLICKHOUSE_NAME:-openflare} - CLICKHOUSE_USER: ${CLICKHOUSE_USERNAME:-default} - CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD:-replace-with-clickhouse-password} - CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: 1 - TZ: ${TZ:-Asia/Shanghai} - ulimits: - nofile: - soft: 262144 - hard: 262144 - volumes: - - openflare_clickhouse_data:/var/lib/clickhouse - - ./config/clickhouse/performance.xml:/etc/clickhouse-server/config.d/performance.xml:ro - healthcheck: - test: ["CMD", "clickhouse-client", "--user", "${CLICKHOUSE_USERNAME:-default}", "--password", "${CLICKHOUSE_PASSWORD:-replace-with-clickhouse-password}", "--query", "SELECT 1"] - interval: 10s - timeout: 5s - retries: 5 - start_period: 15s - volumes: openflare_uploads: openflare_postgres_data: openflare_redis_data: - openflare_clickhouse_data: ``` 详细部署说明见 [部署文档](https://open-flare.pages.dev/deployment/deployment)。 diff --git a/docs/assets/readme/access-logs.png b/docs/assets/readme/access-logs.png new file mode 100644 index 00000000..4f993e95 Binary files /dev/null and b/docs/assets/readme/access-logs.png differ diff --git a/docs/assets/readme/domain_overview.png b/docs/assets/readme/domain_overview.png new file mode 100644 index 00000000..b4360918 Binary files /dev/null and b/docs/assets/readme/domain_overview.png differ diff --git a/docs/assets/readme/waf.png b/docs/assets/readme/waf.png new file mode 100644 index 00000000..2277ada6 Binary files /dev/null and b/docs/assets/readme/waf.png differ diff --git a/docs/changelog/index.md b/docs/changelog/index.md index 0aa30942..cb9a7766 100644 --- a/docs/changelog/index.md +++ b/docs/changelog/index.md @@ -11,20 +11,16 @@ sidebar: false ## 重大变更 > [!IMPORTANT] -> -> 3.1.2 版本更新了 CLickHouse 部署配置。 -> -> 3.0.0 版本为 Wavelet 平台迁移与架构重构版本,涉及数据库表结构、环境变量以及前后端底层架构的重大变更。请务必在升级前备份数据库,并且更新到 V2.3.4。 -> 目前已知的兼容性问题: -> -> - Pages 无法迁移, 升级前请先手动下载并备份 Pages 静态站点的 ZIP 包,升级后重新创建。 -> - 性能调优参数重置, 升级后请重新配置 +> +>3.5.1 版本解耦了日志存储,ClickHouse 变为可选项,如果想切换数据库, 点击 「任务管理」 -> 「切换日志数据库」任务,按提示迁移数据并切换主库。 +> + ## [Unreleased] ### 新增 -- 日志存储解耦:新增日志存储抽象(`internal/repository/logstore`),ClickHouse 变为可选项,不启用时由 PostgreSQL/SQLite 承担全部日志功能;新增「切换日志数据库」任务支持 PostgreSQL/SQLite 与 ClickHouse 间数据迁移(迁移期间冻结日志写入,成功后自动切换主库并保留源数据);日志保留时间改为按存储库在业务配置中设置(`log_retention_days_*`),过期清理并入系统垃圾清理每日任务。 +- 日志存储解耦:ClickHouse 变为可选项,不启用时由 PostgreSQL/SQLite 承担全部日志功能;新增「切换日志数据库」任务支持 PostgreSQL/SQLite 与 ClickHouse 间数据迁移(迁移期间冻结日志写入,成功后自动切换主库并保留源数据);日志保留时间改为按存储库在业务配置中设置(`log_retention_days_*`),过期清理并入系统垃圾清理每日任务。 ### 变更 diff --git a/docs/deployment/agent.md b/docs/deployment/agent.md index a622f2ec..b30de243 100644 --- a/docs/deployment/agent.md +++ b/docs/deployment/agent.md @@ -136,55 +136,6 @@ docker run -d --name openflare-agent --restart unless-stopped \ > **Pages 持久化** > 默认将 Pages 部署目录挂载到 Docker 命名卷 `openflare-agent-pages`(容器内路径 `/data/var/lib/openflare/pages`)。重建或升级 Agent 容器时无需重新拉取静态站点包。 -> [!NOTE] -> **非 Root 安全加固运行** -> Agent 容器内部已完成安全加固,在启动后会统一以低权限非 root 用户 `openflare` 运行。 -> 容器已内置了 `cap_net_bind_service` 内核能力,使得低权限进程依然能够正常监听宿主机的 `80` 和 `443` 特权端口。 -> 同时,OpenResty 运行时所需的各种临时路径(包括 PID 路径、各类临时缓存目录如 `client_body_temp_path`、`proxy_temp_path` 等)都由 Agent 控制器动态渲染并自动重定向至容器内的 `/data` 目录,彻底避免在非 root 权限运行时写入默认系统路径而导致的权限拒绝错误(Permission Denied)。 -> 具体物理缓存写入路径为: -> * 临时缓存目录:`/data/var/cache/nginx` -> * 代理缓存目录:`/data/var/cache/openflare_proxy` - -## 启动与验证 - -systemd 环境: - -```bash -systemctl status openflare-agent -journalctl -u openflare-agent -f -``` - -手动启动: - -```bash -/opt/openflare-agent/openflare-agent -config /opt/openflare-agent/agent.json -``` - -源码运行: - -```bash - -export LOG_LEVEL='info' -go run ./cmd/agent -config /path/to/agent.json -``` - -编译后二进制运行: - -```bash - -go build -o openflare-agent ./cmd/agent -export LOG_LEVEL='info' -./openflare-agent -config /path/to/agent.json -``` - -在管理端确认: - -| 位置 | 期望结果 | -| --- | --- | -| 节点列表 | 节点在线 | -| 节点详情 | 能看到心跳时间、当前版本和基础资源信息 | -| 应用记录 | 发布配置后出现应用结果 | - ## 卸载 ### 交互式卸载 (推荐) @@ -195,38 +146,14 @@ export LOG_LEVEL='info' curl -fsSL https://raw.githubusercontent.com/Rain-kl/OpenFlare/main/scripts/uninstall-agent.sh | bash ``` -### 自动化 (非交互式) 卸载 +### 卸载 -使用命令行传参进行无人值守卸载。 - -本地卸载(默认): - -```bash -curl -fsSL https://raw.githubusercontent.com/Rain-kl/OpenFlare/main/scripts/uninstall-agent.sh | bash -s -- --install-dir /opt/openflare-agent -``` - -Docker 容器卸载: - -```bash -curl -fsSL https://raw.githubusercontent.com/Rain-kl/OpenFlare/main/scripts/uninstall-agent.sh | bash -s -- --docker -``` - -支持参数: - -| 参数 | 说明 | -| --- | --- | -| `--install-dir` | 安装目录,默认 `/opt/openflare-agent`(仅本地卸载生效) | -| `--service-name` | systemd 服务名,默认 `openflare-agent`(仅本地卸载生效) | -| `--docker` | 使用 Docker 容器方式卸载 | -| `--method` | 卸载方式,可选 `local` 或 `docker`(默认 `local`) | - -本地卸载只会移除 Agent 服务、进程和安装目录,不会删除本机 OpenResty。Docker 卸载会停止并删除 `openflare-agent` 容器,交互模式下还可以选择是否清理对应的 Docker 镜像。 +停止并删除 `openflare-agent` 容器即可 ## 常见问题 -| 现象 | 处理步骤 | -| --- | --- | -| `agent_token 和 discovery_token 不能同时为空` | 检查 `agent.json` 至少配置了一个 Token | -| 节点一直离线 | 在 Agent 节点执行 `curl -I http://your-server:3000`,确认 Server 地址可达 | -| OpenResty 没有启动 | 查看 `journalctl -u openflare-agent`,确认 `openresty_path` 可执行,80/443 端口未被占用,且运行用户(如 `openflare`)对数据目录具有读写权限 | -| 发布后重复失败 | Agent 会阻断同一 `version + checksum` 的重复应用;需要修正配置后重新发布,或激活旧版本回滚 | +| 现象 | 处理步骤 | +| --- |---------------------------------------------------------------------------------------------------------| +| `agent_token 和 discovery_token 不能同时为空` | 检查 `agent.json` 至少配置了一个 Token | +| 节点一直离线 | 在 Agent 节点执行 `curl -I http://your-server:3000`,确认 Server 地址可达 | +| 发布后重复失败 | Agent 会阻断同一 `version + checksum` 的重复应用;在节点尝试强制同步,或者重新发布版本 | diff --git a/docs/deployment/deployment.md b/docs/deployment/deployment.md index e42e21b8..ea995c7b 100644 --- a/docs/deployment/deployment.md +++ b/docs/deployment/deployment.md @@ -47,33 +47,13 @@ Internal Service (192.168.x.x) ## 前置条件 -Server: - -| 项目 | 要求 | -| --- | --- | -| Go | `1.25+`,仅源码运行需要 | -| Node.js | `18+`,仅源码构建管理端需要 | -| 数据库 | 可写 SQLite 文件目录,或可访问的 PostgreSQL 实例 | -| 端口 | 默认监听 `3000` | - -Agent: - -| 项目 | 要求 | -| --- | --- | -| 系统 | 安装脚本支持 Linux 和 macOS;systemd 服务仅在 Linux + systemd 环境创建 | -| 架构 | `amd64` 或 `arm64` | -| OpenResty | 本地部署需要可执行 `openresty`,或通过 `--openresty-path` 指定路径 | -| Docker | 仅 Docker 部署 Agent 镜像时需要 | -| 网络 | Agent 节点必须能访问 Server 地址 | -| GeoIP | WAF 地域规则使用 OpenResty 读取本地 MaxMind mmdb;镜像内置文件或首次下载,Agent 负责周期更新 | - ### 硬件配置推荐 -| 组件 | 最低硬件配额 | 推荐硬件配额 | 说明 | -| --- | --- | --- | --- | -| **Server 控制面** | 1 核 CPU / 1 GB 内存 / 10 GB 磁盘 | 2 核 CPU / 4 GB 内存 / 50 GB+ 磁盘 | 磁盘用量需根据访问日志留存时长与并发流量合理扩容 | +| 组件 | 最低硬件配额 | 推荐硬件配额 | 说明 | +| --- |-------------------------------| --- | --- | +| **Server 控制面** | 1 核 CPU / 2 GB 内存 / 20 GB 磁盘 | 2 核 CPU / 4 GB 内存 / 50 GB+ 磁盘 | 磁盘用量需根据访问日志留存时长与并发流量合理扩容 | | **Agent 数据面** | 1 核 CPU / 512 MB 内存 / 2 GB 磁盘 | 2 核 CPU / 2 GB 内存 / 10 GB+ 磁盘 | 根据 OpenResty 的并发代理连接量与 WAF 拦截处理扩容 | -| **Relay 中继节点**| 1 核 CPU / 1 GB 内存 / 5 GB 磁盘 | 2 核 CPU / 2 GB 内存 / 20 GB 磁盘 | frps 传输中继吞吐量主要受带宽与 CPU 吞吐能力限制 | +| **Relay 中继节点**| 1 核 CPU / 1 GB 内存 / 5 GB 磁盘 | 2 核 CPU / 2 GB 内存 / 20 GB 磁盘 | frps 传输中继吞吐量主要受带宽与 CPU 吞吐能力限制 | | **OpenFlared 客户端**| 1 核 CPU / 256 MB 内存 / 1 GB 磁盘 | 1 核 CPU / 512 MB 内存 / 5 GB 磁盘 | 独立运行于内网,自身资源占用极小,保障网络吞吐即可 | ## Docker Compose 部署 Server @@ -169,41 +149,3 @@ curl -fsSL https://raw.githubusercontent.com/Rain-kl/OpenFlare/main/scripts/inst systemctl status openflare-agent journalctl -u openflare-agent -f ``` - -## 手动运行 Agent - -源码运行: - -```bash - -export LOG_LEVEL='info' -go run ./cmd/agent -config /path/to/agent.json -``` - -编译后二进制运行: - -```bash - -go build -o openflare-agent ./cmd/agent -export LOG_LEVEL='info' -./openflare-agent -config /path/to/agent.json -``` - -最小 `agent.json` 示例: - -```json -{ - "server_url": "http://127.0.0.1:3000", - "agent_token": "replace-with-node-auth-token", - "data_dir": "./data", - "openresty_path": "openresty", - "heartbeat_interval": 3000, - "request_timeout": 10000 -} -``` - -未配置 `openresty_path` 时,Agent 默认调用 `openresty`。 - -默认情况下,Agent 在 HTTP 心跳成功后会尝试升级为 WebSocket。升级成功时,Server 发布或激活配置会立即通知 Agent;如果 WebSocket 无法建立或意外断开,Agent 会自动退回 HTTP 心跳同步。 - -WAF 地域规则依赖 Agent 本地 `GeoLite2-Country.mmdb` / `GeoLite2-City.mmdb`(OpenResty `resty.maxminddb` 读磁盘路径)。Docker 镜像会将 MMDB COPY 到 `data_dir/etc/openflare/`;裸二进制安装时若文件缺失则首次启动按配置 URL 下载。Agent 按配置周期尝试更新;更新失败只记录警告,不影响配置同步与 OpenResty reload。MMDB **不**再嵌入 agent 二进制。Server 控制面可选 MaxMind 提供方仍**仅内嵌 Country**(约 9MB,不含 City)用于离线 seed。 diff --git a/docs/deployment/openflared.md b/docs/deployment/openflared.md index 52482474..66d0a933 100644 --- a/docs/deployment/openflared.md +++ b/docs/deployment/openflared.md @@ -34,7 +34,7 @@ --- -## Docker 运行(推荐) +## Docker 运行 Docker 部署是内网运行最简单也最安全的方式。官方的 `openflared` 镜像已经内置了客户端控制器以及 `frpc v0.69.0` 二进制运行时,无需额外搭建环境。 @@ -51,40 +51,6 @@ docker run -d --name openflared --restart unless-stopped \ --- -## 宿主机手动运行 - -如果您需要直接在内网的 Linux/macOS/Windows 宿主机上独立运行: - -### 1. 编译二进制 - -```bash -go build -o bin/flared ./cmd/flared -``` - -### 2. 准备 `flared.json` - -在程序同级目录下创建 `flared.json` 配置文件: - -```json -{ - "server_url": "http://your-server-ip:3000", - "tunnel_token": "your-tunnel-auth-token", - "frpc_path": "/usr/local/bin/frpc", - "data_dir": "./data", - "heartbeat_interval": "10s", - "sync_interval": "30s" -} -``` - -### 3. 运行服务 - -```bash -export LOG_LEVEL='info' -./flared -config ./flared.json -``` - ---- - ## 启动与验证 ### 1. 自动同步逻辑 diff --git a/docs/deployment/relay.md b/docs/deployment/relay.md index fbf486d9..f4befcb0 100644 --- a/docs/deployment/relay.md +++ b/docs/deployment/relay.md @@ -15,7 +15,7 @@ - 必须确保 `bindPort`(frpc 连接端口,默认 `7000`)可被公网/内网客户端访问。 - 必须确保 `vhostHTTPPort`(HTTP Vhost 端口,默认 `8080`)处于空闲状态,Agent 将在此端口上与 frps 进行流量传递。 3. **软件依赖**(仅限宿主机直接部署): - - 本地需有可执行的 `frps` 二进制文件(建议版本为 `v0.61.0+` 或最新稳定版 `v0.69.0`),或通过参数显式指定路径。 + - 本地需有可执行的 `frps` 二进制文件,或通过参数显式指定路径。 --- @@ -40,9 +40,9 @@ --- -## Docker 运行(推荐) +## Docker 运行) -Docker 运行是 TunnelRelay 节点最便捷的部署方案。官方镜像内置了 `openflare-relay` 控制器与 `frps v0.69.0` 运行时,开箱即用。 +Docker 运行是 TunnelRelay 节点最便捷的部署方案。官方镜像内置了 `openflare-relay` 控制器与 `frps` 运行时,开箱即用。 ```bash docker pull ghcr.io/rain-kl/openflare-relay:latest @@ -67,39 +67,6 @@ docker run -d --name openflare-relay --restart unless-stopped \ --- -## 宿主机手动运行 - -如果您倾向于在物理机或虚拟机上直接运行: - -### 1. 编译二进制 - -```bash -go build -o bin/openflare-relay ./cmd/relay -``` - -### 2. 准备 `relay.json` - -在程序同级目录下创建 `relay.json` 配置文件: - -```json -{ - "server_url": "http://127.0.0.1:3000", - "agent_token": "your-relay-node-agent-token", - "frps_path": "/usr/local/bin/frps", - "data_dir": "./data", - "heartbeat_interval": "10s", - "request_timeout": "10s" -} -``` - -### 3. 运行服务 - -```bash -export LOG_LEVEL='info' -./openflare-relay -config ./relay.json -``` - ---- ## 启动与验证 @@ -110,11 +77,6 @@ export LOG_LEVEL='info' docker logs -f openflare-relay ``` -如果是在 Linux 上通过 Systemd 托管的,可执行: -```bash -journalctl -u openflare-relay -f -``` - ### 2. 验证运行状态 启动成功后,Relay 将进行以下工作: diff --git a/docs/deployment/server.md b/docs/deployment/server.md index 292ecfd2..935e2e30 100644 --- a/docs/deployment/server.md +++ b/docs/deployment/server.md @@ -6,7 +6,8 @@ OpenFlare Server 是 Gin + GORM 单体控制面,负责管理端 UI、管理 AP > [!IMPORTANT] > **关于外部依赖**: -> OpenFlare 系统内建了对后台异步任务(Asynq 框架)及海量节点日志分析与度量指标(观测面板)的支持。因此,**无论采用何种部署模式,系统都必须依赖 Redis(或 Valkey)与 ClickHouse 的运行**。各个部署方案的主要差异在于主关系型数据库的选择(SQLite vs PostgreSQL)以及是否启用链路追踪服务(Jaeger)。 +> OpenFlare 系统内建了对后台异步任务(Asynq 框架)的支持。因此,**无论采用何种部署模式,系统都必须依赖 Redis(或 Valkey)**。各个部署方案的主要差异在于主关系型数据库的选择(SQLite vs PostgreSQL)以及是否启用链路追踪服务(Jaeger)。 +> 若业务流量过大, 建议使用 ClickHouse 存储日志。 > [!TIP] > **ClickHouse 服务端性能配置(推荐挂载)** @@ -37,11 +38,11 @@ volumes: 使用 Docker 部署可以免去本地配置 Go 与 Node.js 前端构建环境的麻烦。根据你的服务器硬件配置及业务需求,你可以选择以下三种方案之一: -### 1. 快速启动 (SQLite + Redis + ClickHouse) +### 1. 快速启动 (SQLite + Redis) > **适用场景**:测试体验、轻量化单机部署。 > -> **特点**:主关系型数据库使用内建的 SQLite 文件 +> **特点**:主关系型数据库使用 SQLite 创建 `docker-compose.yaml` 文件: @@ -70,8 +71,6 @@ services: depends_on: redis: condition: service_healthy - clickhouse: - condition: service_healthy redis: image: valkey/valkey:8.0-alpine @@ -84,47 +83,13 @@ services: interval: 10s timeout: 5s retries: 5 - - clickhouse: - image: clickhouse/clickhouse-server:25.3-alpine - restart: unless-stopped - environment: - CLICKHOUSE_DB: openflare - CLICKHOUSE_USER: default - CLICKHOUSE_PASSWORD: 123456 - CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: 1 - TZ: Asia/Shanghai - ulimits: - nofile: - soft: 262144 - hard: 262144 - volumes: - - ./data/clickhouse_data:/var/lib/clickhouse - - ./config/clickhouse/performance.xml:/etc/clickhouse-server/config.d/performance.xml:ro - healthcheck: - test: ["CMD", "clickhouse-client", "--user", "default", "--password", "123456", "--query", "SELECT 1"] - interval: 10s - timeout: 5s - retries: 5 - start_period: 15s -``` - -运行启动命令: - -```bash -mkdir -p ./config/clickhouse -curl -fsSL -o ./config/clickhouse/performance.xml \ - https://raw.githubusercontent.com/Rain-kl/OpenFlare/refs/heads/main/config/clickhouse/performance.xml -docker compose up -d ``` --- -### 2. 生产推荐 (PostgreSQL + Redis + ClickHouse) +### 2. 小流量业务场景 (PostgreSQL + Redis) -> **适用场景**:生产环境、多节点集群管理、高并发高可用要求。 -> -> **特点**:完全分层架构。启用专用的 PostgreSQL 服务作为主关系数据库,Redis 负责高并发分布式锁、会话缓存与异步队列,ClickHouse 承载海量日志异步 Flush 与观测指标。 +> **适用场景**:生产环境、业务流量中小, PostgreSQL 不会成为日志记录的瓶颈。 创建 `docker-compose.yaml` 文件: @@ -145,8 +110,6 @@ services: condition: service_healthy redis: condition: service_healthy - clickhouse: - condition: service_healthy postgres: image: postgres:17-alpine @@ -176,45 +139,18 @@ services: retries: 5 start_period: 5s - clickhouse: - image: clickhouse/clickhouse-server:25.3-alpine - restart: unless-stopped - environment: - CLICKHOUSE_DB: ${CLICKHOUSE_NAME:-openflare} - CLICKHOUSE_USER: ${CLICKHOUSE_USERNAME:-default} - CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD:-replace-with-clickhouse-password} - CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: 1 - TZ: ${TZ:-Asia/Shanghai} - ulimits: - nofile: - soft: 262144 - hard: 262144 - volumes: - - openflare_clickhouse_data:/var/lib/clickhouse - - ./config/clickhouse/performance.xml:/etc/clickhouse-server/config.d/performance.xml:ro - healthcheck: - test: ["CMD", "clickhouse-client", "--user", "${CLICKHOUSE_USERNAME:-default}", "--password", "${CLICKHOUSE_PASSWORD:-replace-with-clickhouse-password}", "--query", "SELECT 1"] - interval: 10s - timeout: 5s - retries: 5 - start_period: 15s - volumes: openflare_uploads: openflare_postgres_data: openflare_redis_data: - openflare_clickhouse_data: ``` 创建对应的 `.env` 文件来配置系统环境变量(可复制并修改根目录下的 `.env.example`): ```bash -mkdir -p ./config/clickhouse -curl -fsSL -o ./config/clickhouse/performance.xml \ - https://raw.githubusercontent.com/Rain-kl/OpenFlare/refs/heads/main/config/clickhouse/performance.xml curl -o .env.example https://raw.githubusercontent.com/Rain-kl/OpenFlare/refs/heads/main/.env.example cp .env.example .env -# 编辑 .env 文件,填入对应的数据库、Redis、ClickHouse 连接地址、密码与 APP_SESSION_SECRET +# 编辑 .env 文件,填入对应的数据库、Redis、密码与 APP_SESSION_SECRET docker compose up -d ``` @@ -223,9 +159,9 @@ docker compose up -d ### 3. 进阶版 (含 Jaeger 链路追踪的完整编排) -> **适用场景**:开发者调试、系统深度性能诊断、高级可观测性追溯。 +> **适用场景**:大流量场景, 需要进行链路性能指标追踪。 > -> **特点**:在“生产推荐”全家桶的基础上,联动拉起 Jaeger 作为 OpenTelemetry (OTel) 链路追踪的后端,收集 Server 运行时各个 API 请求的 Span Trace 信息。 +> **特点**:在“生产推荐”全家桶的基础上,使用 ClickHouse 存储日志, 联动 Jaeger 作为 OpenTelemetry (OTel) 链路追踪的后端。 创建 `docker-compose.yaml` 文件: @@ -340,64 +276,6 @@ docker compose up -d --- -## 方式二:本地部署 (源码/二进制启动) - -如果你不希望使用 Docker,也可以直接在本地或虚拟机上从源码构建和运行 Server。由于后台异步任务和可观测指标分析为系统核心防线,**本地部署时依然需要连接外部 Redis 与 ClickHouse 实例**。 - -### 前置条件 - -| 项目 | 要求 | -| --- | --- | -| Go | `1.25+` | -| Node.js | `18+` | -| pnpm | 推荐通过 `corepack enable` 使用项目声明的 pnpm | -| 外部服务 | 必须在本地或远端运行 Redis (Valkey) 和 ClickHouse 实例;ClickHouse 建议挂载仓库提供的 `performance.xml`(见上文「ClickHouse 服务端性能配置」) | - -### 1. 构建管理端前端 - -Go Server 运行时需要嵌入前端静态资源。编译 Go 二进制前需要先构建前端静态产物并输出到 Go 服务目录: - -```bash -cd frontend -corepack enable -pnpm install -pnpm build:embed -cd .. -``` - -> **常用前端代码检查命令**: -> * `pnpm lint` -> * `pnpm typecheck` - -### 2. 使用 SQLite 启动 - -关系数据库存储在本地 SQLite 文件,但依然需要提供 Redis 和 ClickHouse 连接配置: - -```bash -cp config.example.yaml config.yaml -# 编辑 config.yaml: -# 1. 设置 app.session_secret 为一个随机的长字符串 -# 2. 将 database.enabled 设为 false 以启用内置 SQLite -# 3. 将 redis.addrs 与 clickhouse.hosts 修改为你的本地/局域网服务连接信息 - -# 启动 Server(默认融合模式) -go run main.go all -``` - -### 3. 使用 PostgreSQL 启动 - -```bash -cp config.example.yaml config.yaml -# 编辑 config.yaml: -# 1. 设置 app.session_secret -# 2. 将 database.enabled 设为 true,并完整设置 database.*、redis.*、clickhouse.* 字段连接参数 - -# 启动 Server(默认融合模式) -go run main.go all -``` - ---- - ## 首次登录 Server 默认监听 `3000` 端口,启动成功后可以使用浏览器访问:`http://localhost:3000`。 @@ -413,28 +291,12 @@ Server 默认监听 `3000` 端口,启动成功后可以使用浏览器访问 --- -## 常用运维指南 - -### 1. 命令行子服务分进程启动 +## 分布式部署 在大型生产部署中,你可以选择将 Server 按职责拆分为多个进程运行: ```bash -go run main.go api # 仅启动管理端与节点通信的 API 服务 -go run main.go worker # 仅启动后台任务的 Worker 服务 -go run main.go scheduler # 仅启动定时任务的 Scheduler 服务 -go run main.go all # 融合模式(在一进程内运行上述所有服务,默认) -``` - -### 2. 状态验证 - -```bash -# 验证编译是否通过 -go build ./... - -# 运行内部单元测试 -go test ./internal/apps/openflare/... -count=1 - -# 检查服务健康状态 -curl http://127.0.0.1:3000/api/v1/d/status +go run main.go api # 仅启动管理端与节点通信的 API 服务 +go run main.go worker # 仅启动后台任务的 Worker 服务 +go run main.go scheduler # 仅启动定时任务的 Scheduler 服务 ``` diff --git a/docs/guide/quick-start.md b/docs/guide/quick-start.md index 20743df2..c1e7cef1 100644 --- a/docs/guide/quick-start.md +++ b/docs/guide/quick-start.md @@ -14,12 +14,12 @@ Agent 统一通过 OpenResty 二进制控制运行时。本地部署需要节点 ## 环境要求 -| 项目 | 要求 | -| --- | --- | -| Docker / Docker Compose | 用于启动 Server 及其依赖的 PostgreSQL、Redis 和 ClickHouse 容器;如采用 Docker Agent,也用于运行 Agent | -| OpenResty | 本地安装 Agent 时需要可执行 `openresty`,或在安装脚本中指定路径 | -| 可访问端口 | Server 默认监听 `3000`,Agent 节点需要能访问 Server 地址 | -| 浏览器 | 用于访问管理端 | +| 项目 | 要求 | +| --- |------------------------------------------------------------------| +| Docker / Docker Compose | 用于启动 Server 及其依赖的 PostgreSQL、Valkey;如采用 Docker Agent,也用于运行 Agent | +| OpenResty | 本地安装 Agent 时需要可执行 `openresty`,或在安装脚本中指定路径 | +| 可访问端口 | Server 默认监听 `3000`,Agent 节点需要能访问 Server 地址 | +| 浏览器 | 用于访问管理端 | - **Docker**:`20.10.0+` - **Docker Compose**:`2.0.0+` @@ -28,15 +28,7 @@ Agent 统一通过 OpenResty 二进制控制运行时。本地部署需要节点 ## 1. 启动 Server -为了保证异步任务队列(Asynq 框架)及可观测流量看板功能完整运行,快速开始推荐采用 **PostgreSQL + Redis + ClickHouse** 经典单机版编排。 - -先拉取 ClickHouse 服务端性能配置到 `./config/clickhouse`,并以单文件方式挂载: - -```bash -mkdir -p ./config/clickhouse -curl -fsSL -o ./config/clickhouse/performance.xml \ - https://raw.githubusercontent.com/Rain-kl/OpenFlare/refs/heads/main/config/clickhouse/performance.xml -``` +快速开始推荐采用 **PostgreSQL + Redis ** 标准部署方案。 在空目录中创建 `docker-compose.yaml`: @@ -63,15 +55,11 @@ services: DB_NAME: "${DB_NAME:-openflare}" REDIS_ENABLED: "true" REDIS_ADDR: "redis:6379" - CLICKHOUSE_ENABLED: "true" - CLICKHOUSE_HOST: "clickhouse:9000" depends_on: postgres: condition: service_healthy redis: condition: service_healthy - clickhouse: - condition: service_healthy postgres: image: postgres:17-alpine @@ -100,34 +88,11 @@ services: timeout: 5s retries: 5 - clickhouse: - image: clickhouse/clickhouse-server:25.3-alpine - restart: unless-stopped - environment: - CLICKHOUSE_DB: openflare - CLICKHOUSE_USER: default - CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD:-replace-with-clickhouse-password} - CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: 1 - TZ: Asia/Shanghai - ulimits: - nofile: - soft: 262144 - hard: 262144 - volumes: - - openflare_clickhouse_data:/var/lib/clickhouse - - ./config/clickhouse/performance.xml:/etc/clickhouse-server/config.d/performance.xml:ro - healthcheck: - test: ["CMD", "clickhouse-client", "--user", "default", "--password", "${CLICKHOUSE_PASSWORD:-replace-with-clickhouse-password}", "--query", "SELECT 1"] - interval: 10s - timeout: 5s - retries: 5 - start_period: 15s volumes: openflare_uploads: openflare_postgres_data: openflare_redis_data: - openflare_clickhouse_data: ``` 启动服务: @@ -158,6 +123,12 @@ http://localhost:3000 > [!WARNING] > 为了你的系统安全,首次登录后请立即修改默认密码。 +如果忘记密码并且没有配置找回密码渠道, 可以使用命令进行重置 + +```bash +go run main.go reset-paswd # 重置管理员密码 +``` + --- ## 2. 准备 Agent Token diff --git a/frontend/components/layout/sidebar.tsx b/frontend/components/layout/sidebar.tsx index dea8323e..ddd3c9c5 100644 --- a/frontend/components/layout/sidebar.tsx +++ b/frontend/components/layout/sidebar.tsx @@ -72,7 +72,7 @@ const data = { { title: '存储管理', url: '/admin/files', icon: FolderOpen }, { title: '数据管理', url: '/admin/database', icon: Database }, { title: '通知推送', url: '/admin/push', icon: Bell }, - { title: '系统日志', url: '/admin/logs', icon: Terminal }, + // { title: '系统日志', url: '/admin/logs', icon: Terminal }, { title: '系统配置', url: '/admin/system', icon: ShieldCheck }, { title: '系统设置', url: '/admin/settings', icon: Settings }, ],