Files
frpc-console/update-logs.md
T
2026-08-26 19:08:36 +08:00

216 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 📌 版本说明
| 版本类型 | 标记 | 适用场景 |
|----------|------|----------|
| LTS 正式版 | `-lts` | 生产环境,长期维护 |
| 技术预览版 | `-preview` | 功能前瞻,建议测试环境验证 |
## 2.7-preview (2026-08-11)
本次预览版的核心是 **ProcessManager 进程管理模块重构**,将 frpc 的管理方式从“基于 PID 文件的简单函数集”升级为“带状态机、冲突检测、健康检查、自动恢复的完整生命周期控制器”。这是 frpc-console 从“frpc 启动器”向“frpc 生命周期控制器”演进的关键版本。
### 核心变更
- **进程管理模块独立** —— 新增 `internal/process` 包,将进程管理逻辑从 `frp.go` 中抽离为独立模块,包含状态机、互斥锁、进程属性、实例归属检测等子模块,为长期维护和扩展奠定基础
- **状态机驱动生命周期管理** —— 从“PID 文件存在即运行”的隐式状态升级为 8 种显式状态(UNKNOWN / STARTING / RUNNING / DEGRADED / CONFLICT / FAILED / STOPPING / STOPPED),状态转换由检测结果驱动,状态语义清晰可追溯
- **三级健康检查体系** —— 建立 Process HealthPID 存活)+ Admin Health(端口可访问 + 归属验证)+ Service Health(代理 running)的递进式健康检查,不同层级失败对应不同恢复策略
- **FRPReady 绑定 PID** —— `FRPReady` 检测从全局状态改为绑定具体 PID,通过 admin API 读取代理状态确认服务就绪,避免旧实例状态干扰新实例判断
- **实例归属检测与 CONFLICT 状态** —— `DetectFrpcInstances()` 通过 PID + ExecPath + CmdLine 三重确认识别系统内所有 frpc 进程,区分 Owned/Unknown 实例,冲突时保留 Owned 实例、清理 Unknown 实例,新增 CONFLICT 状态承载冲突场景
- **RELOADING 中间态** —— Reload 操作期间状态机进入 RELOADING 中间态,看门狗和健康检查在此期间跳过恢复动作,彻底解决 reload 导致旧 PID 消失被误判为 FAILED 的竞态问题
- **启动超时逻辑修正** —— 超时判断仅对 STARTING 状态生效,已进入 RUNNING 的进程不再受超时影响,解决了长期运行后每 30 秒触发一次超时误判的问题
- **端口检测升级为归属验证** —— `CheckPort()` 从仅返回 bool 升级为返回 PortCheckResultReady + Err + PID + Process),支持端口归属验证,端口被占用但 PID 不一致时触发 CONFLICT 状态
- **孤儿进程与僵尸进程防护** —— 启动前自动清理孤儿进程(端口被占用但无有效 PID);启动后通过 goroutine 调用 `cmd.Wait()` 回收子进程,防止 frpc 退出后变成僵尸进程堆积
- **进程互斥锁** —— Linux 使用 `flock` 实现进程间互斥锁,Windows 使用内存锁,防止并发启动/停止操作产生竞态条件
- **看门狗升级为智能恢复** —— 每 30 秒检查完整状态,根据 Phase 执行差异化恢复策略(CONFLICT → 清理 Unknown 实例;DEGRADED → 重启;FAILED → 自动重启;RELOADING → 跳过检查)
### 模块化重构
- **代码结构模块化** —— 将单体结构拆分为 `internal/process``internal/frp``internal/db``internal/auth``internal/api` 等独立模块,模块边界清晰,为后续 3.0 控制器架构铺路
- **frp 模块拆分** —— 原 `frp.go` 拆分为 `binary.go`(二进制提取)、`config.go`(模板渲染)、`legacy.go`(兼容层)、`toml.go`(TOML 解析),职责单一,便于维护
- **数据库 Schema v3 升级** —— 新增 `admin_port` 字段,默认 7400,采用重型迁移策略(建新表 → 迁移数据 → 交换表名)替代 ALTER TABLE,确保数据一致性;v2→v3 迁移自动完成,无需用户干预
### UI 优化
- **配置页面新增 admin_port 输入框** —— 用户可自定义 frpc admin 端口,默认 7400,保存后自动写入 `frpc.toml``[webServer]`
- **前端状态适配** —— 前端 `getFrpcStatus()` 从检查 `state` 字段升级为检查 `phase === "RUNNING"`,与后端状态机对齐
- **版本号结构化** —— `version.ini` 从单行版本号升级为 INI 格式,包含 `[build]`version / channel / commit / build_time)和 `[environment]`builder / go_version / platform),为“关于”页面提供完整数据源
### 部署变更
- **Docker 镜像加速自动配置** —— `deploy.sh` 自动检测 Docker daemon 的 registry-mirrors 配置,检测用户配置和默认地址连通性,按需写入可用镜像源,自动重启 Docker 应用配置
- **frpc 二进制提取路径统一** —— 从 embed 提取的 frpc 二进制统一放到程序同层目录(`./frpc`),不再写入 `./data/` 持久化目录,避免污染数据目录
- **日志路径统一** —— frpc 日志从根目录 `./frpc.log` 迁移至 `./data/frpc.log`,与数据库、配置文件、PID 文件统一存放,前后端路径一致
### 修复
- 修复 reload 触发 `STARTING → FAILED` 导致旧实例被误杀的问题
- 修复 `startTime` 长期运行后每 30 秒触发启动超时误判的问题
- 修复 `FRPReady` 检测到旧实例状态导致新实例误判为 RUNNING 的问题
- 修复 `CheckPort()` 在容器环境下返回 PID=0 导致端口归属验证失效的问题
- 修复 2.5-lts 升级到 2.7-preview 时 `admin_port` 字段缺失导致热加载失败的问题
- 修复 Windows 编译后 `./data/frpc` 路径与 `frpc_windows_amd64.exe` 不一致的问题
### 已知问题
- `work connection pool is full` 在瞬时并发高峰时偶发,已通过 `poolCount` 从 8 调整为 10 缓解,持续观察中
- Preview 通道尚未经过长期稳定性测试,生产环境请使用 LTS 通道
### 升级说明
- 从 2.5-lts 升级时,数据库 Schema 自动从 v2 迁移至 v3`admin_port` 默认值为 7400,无需手动操作
- `frpc.toml``[webServer]` 段格式需从 `addr = "127.0.0.1:7400"` 调整为 `addr = "127.0.0.1"` + `port = 7400`,新部署自动适配,旧部署升级时模板自动覆盖
- 建议升级前备份 `./data/` 目录,确保回退路径可用
**版本定位:** 2.7-preview 是一个技术预览版,核心目标是验证 ProcessManager 状态机在真实环境中的稳定性和准确性。虽然 P0 级问题已修复,但建议在测试环境中充分验证后再考虑生产部署。LTS 通道用户请继续使用 2.5-lts。
---
## 2.5-lts (2026-08-03)
> **稳定加固版 —— 架构升级与部署流程闭环**
### 核心变更
- 数据目录规范化 —— 所有运行时文件统一迁移至 `/app/data`,挂载点从 `/app` 收窄至 `/app/data`,彻底解决挂载覆盖二进制文件的问题
- 版本管理解耦 —— 二进制不再注入版本信息,由 `deploy.sh` 在部署时写入 `version.ini`
- 入口脚本分离 —— 引入 `run-deploy.sh` 独立入口,用户只需记住一个命令
- 僵尸进程回收 —— 子进程退出时自动回收资源,防止僵尸进程积累
### UI 优化
- 字体全系 HarmonyOS Sans SC,视觉风格统一
- 「用户配置」Tab 移至导航栏最右侧
- 弹窗居中修复,顶部导航字号优化
### 🐛 修复
- 修复挂载覆盖导致二进制不可用的问题
- 修复 `ps | grep` 进程检测在容器环境不可靠的问题
- 修复旧版本升级时数据库路径不兼容的问题
## 🚀 2.4-lts (2026-07-30)
> **紧急修复版 —— 架构升级与部署流程重构**
>
> 本次版本为 **非正统 LTS 版本**(2.4 在语义版本中不属于 LTS 序列),因 `main` 分支在新架构迁移过程中出现编译阻塞,为快速恢复 LTS 通道可用性而发布。**2.5-lts 将回归正常语义版本规则。**
### 🔧 核心变更
- **部署架构重构** —— 引入 `run-deploy.sh` 独立入口,实现部署脚本与项目分支解耦
- **数据目录规范化** —— 所有运行时文件(数据库、配置、日志、PID)统一迁移至 `/app/data` 子目录,挂载点从 `/app` 收窄至 `/app/data`,彻底解决挂载覆盖二进制文件的问题
- **版本管理解耦** —— 二进制不再注入版本信息,版本由 `deploy.sh` 在部署时写入 `version.ini` 文件
- **PID 文件进程检测** —— frpc 状态检测从 `ps | grep` 改为基于 PID 文件,更加可靠
- **旧版本自动迁移** —— 检测到根目录存在旧数据文件时,自动迁移至 `data/` 子目录,并保留备份
### ✨ 功能完整
- Ping 延迟检测(顶部导航实时显示)
- 用户配置页独立(账户管理与全局配置分离)
- 401 统一拦截(认证过期自动跳转登录)
- 声明式数据库迁移引擎(基于 `db-history.go`
- frp v2 协议正式启用(`wireProtocol = "v2"`
### 📦 部署变更
| 变更项 | 旧方案 | 新方案 |
|--------|--------|--------|
| 挂载点 | `-v ${DEPLOY_DIR}:/app` | `-v ${DEPLOY_DIR}/data:/app/data` |
| 数据库路径 | `/app/frpc-console.db` | `/app/data/frpc-console.db` |
| 配置文件 | `/app/frpc.toml` | `/app/data/frpc.toml` |
| 版本文件 | 编译时注入 `-ldflags` | 部署时写入 `version.ini` |
### 🐛 修复
- 修复 `main` 分支因挂载覆盖导致二进制文件不可用的问题
- 修复 `ps | grep` 进程检测在容器环境不可靠的问题
- 修复旧版本升级时数据库路径不兼容的问题
---
## 🚀 2.3-preview (2026-07-28)
> **技术预览版** —— 在 LTS 稳定核心(2.0)基础上,集成 2.1 与 2.2 的新特性,并完成基础设施层的全面加固。
### ✨ 新增特性
- **Ping 延迟检测** —— 顶部导航实时显示 frpc 到 frps 的延迟,状态图标 + ms 值,直观反映网络质量(2.1)
- **用户配置页独立** —— 账户管理与全局配置分离,用户信息与 frpc 配置各自独立管理(2.1)
- **声明式数据库迁移引擎** —— 基于 `db-history.go` 的 Schema 版本声明,对比新旧差异自动决定迁移路径(2.2)
### 🔧 改进与优化
- **401 统一拦截** —— API 请求返回 401 时自动清除认证状态并跳转登录页,避免页面卡死(2.1)
- **数据库路径统一** —— 数据库文件固定为 `./frpc-console.db`Docker 部署时挂载整个 `/app` 目录,所有运行时文件(db / toml / log / pid)完整持久化
- **`deploy.sh` 部署逻辑重构** —— 备份 → 拉代码 → 停容器 → 构建 → 启动,顺序闭环;移除宿主机编译,全部交由 Docker 多阶段构建处理
- **Dockerfile 多阶段构建** —— 自动处理 `go.mod` 降级兼容,安装 `sqlite` 辅助工具,便于部署脚本验证数据库状态
- **前端加载状态管理** —— 新增 `authLoading` 状态,首次访问时先完成用户检查再渲染页面,彻底解决刷新后登录/注册页状态错乱的竞态问题
- **`schema_version` 兜底写入** —— `InitDB()` 末尾强制补写 Schema 版本,确保每次启动都能识别已有数据,彻底解决升级后反复跳转注册页的问题
- **`docker-compose.yml` 配套工具** —— 简化开发调试流程,支持快速重建容器
### 🐛 修复
- 修复 `ExportTomlHandler` 模板渲染时缺少 `WireProtocolLine` 字段的问题
- 修复 `deploy.sh` 升级时用空文件覆盖旧数据库的问题
- 修复 Docker 镜像中 `sqlite3` 包名错误导致 `deploy.sh` 无法验证数据库的问题
- 修复首次访问刷新时登录/注册页显示异常的前端竞态问题
### 📦 部署变更
- 挂载方式:`-v ${DEPLOY_DIR}:/app`(整个 `/app` 目录)
- 数据库位置:`/opt/frpc-console/frpc-console.db`
- 备份目录:`/tmp/frpc-console/db-backups`
- 容器内工具:`sqlite` 已预装,便于调试
---
## ✅ 2.0-lts (2026-07-27)
> **首个 LTS 正式版** —— 与 frps-console 2.0-lts 同步发布,共享版本号与 LTS 维护周期。
- 🚀 **frp v2 协议正式启用** —— `wireProtocol = "v2"` 配置项可用,实测稳定
- 🔒 **数据库迁移引擎完整实现** —— 版本驱动的增量迁移 + 迁移前自动全量备份 + 失败可回滚
- 🧩 **frps-console 同步发布** —— 同一套设计哲学,一个管理 frpc,一个管理 frps
---
## 🧪 1.5-release (2026-07-25) (non-LTS)
> 非长期支持版本,建议用于尝鲜测试,生产环境请使用 2.0-lts 及后续 LTS 版本。
- ✨ 全局配置页面卡片式重构(服务器连接 / 传输配置 / 日志配置)
- ✨ 新增运行日志面板(8 秒轮询,最大 200 行)
- ✨ frp v2 配置占位(UI 灰标禁用,为 2.0 铺路)
- 🔩 数据库 Schema 迁移框架(启动时自动补全缺失列)
- 🔐 默认配置脱敏(通用占位符,避免开箱即连他人服务器)
- 🎨 样式拆分与优化(style-3.css / style-4.css
---
## 🎉 1.0-release (2026-07-24) (non-LTS)
> 首次公开发布,核心功能全部就绪。
- 🎉 首次发布
- 📋 隧道全生命周期管理(增删改查 + 启用/禁用)
- 📦 TOML 导入/导出(无缝迁移现有 frpc 配置)
- 🔄 配置热加载(修改即生效,无需重启 frpc)
- 🔐 首次启动 Web 注册(无需命令行交互)
- 🖥️ 多平台支持(Windows / Linux / ARM 全平台)
- 🐳 容器化就绪(Docker 镜像,开箱即用)
- 🎨 深色磨砂玻璃 UI