Repository navigation
Releases: mrlee233/havline
Releases · mrlee233/havline
Release list
v2.0.0
新增
- 内置 SSH 终端(
/terminal):在浏览器里直接连到「公网服务端」已配置的 VPS,复用已保存的 SSH 密码 / 私钥与每台机器独立的 known_hosts 校验,凭据不下发到浏览器;总开关默认关闭,会话空闲 10 分钟自动断开、单实例最多 5 个并发会话、单会话最长 12 小时,页面按需懒加载 xterm - 终端二次认证:进入终端前需要用管理员密码再确认一次,通过后签发 10 分钟解锁票据并绑定当前登录会话,期间新建会话不再重复输入;改密、登出、关闭开关都会立即失效,同一 IP 连续失败 5 次锁定 5 分钟;终端相关接口一律不接受 API Token,避免绕过二次认证
- 终端会话审计:每次会话结束落库「谁、何时、连了哪台、多久、为什么断开」以及收发字节数,新增独立审计页
/terminal/audits;记录保留 90 天,由每日任务清理 - 会话录制开关:设置 → 安全新增「录制会话内容」(默认关闭,并提示录像包含屏幕上的全部内容,包括在远端提示符下输入的口令)。开启后按 asciinema v2 把输出写入
logs/terminal/<会话ID>.cast,单文件上限 32 MB、保留 90 天,可在「录像审计」里直接回放 - 终端常用命令:右侧面板保存常用命令(落库,换浏览器仍在),一键发送到当前会话
- 终端页右侧面板:服务器列表 / 录像审计 / 常用命令三个标签页;服务器列表可直接连接服务端,也可跳转「公网服务端」维护 SSH 配置
- DDNS 服务商名称与自定义 IP:同一服务商可建多条配置并用名称区分(如「家庭」「公司」);新增「自定义 IP」入口,保存后 DDNS 更新直接使用指定 IP,不再探测本机出口 IP
变更
- 终端体验:多标签会话、断线一键重连、复制粘贴(Ctrl/⌘+Shift+C/V)、字号记忆、清屏,以及输出里的 URL 可直接点击;终端高度可拖动(默认跟随视口,双击恢复自适应),鼠标向下滚动能把最后一行推到视口顶部
- 移动端只读:窄屏默认只读(可滚动、可复制),需要输入时显式点「允许输入」,减少手机上的误触
- 终端开关按布尔语义解析:
1/true/on都视为开启,避免开关显示已打开、接口却按未启用拒绝
测试
- 新增终端会话回放缓冲、并发上限、空闲回收、resize 转发用例
- 新增二次认证解锁票据、错误密码限流与锁定、API Token 拦截用例
- 新增终端审计写入、远端断开回收、保留期清理用例
- 新增会话录制(cast 头与帧格式、非法会话 ID 拦截、过期清理、输出接入录制器)与常用命令校验用例
go test ./...、npm run typecheck、npm run build通过
v1.9.3
新增
- frps vhost 回源端口支持 80/443(需二次确认):服务端表单不再硬性拒绝
vhostHTTPPort = 80/vhostHTTPSPort = 443,改为保存时弹窗二次确认,提示「80/443 通常已被 VPS 上的 Nginx 占用,需先停止占用该端口的服务,否则 frps 会因端口冲突启动失败」;确认后请求携带allow_privileged_vhost_ports提交并由后端校验放行,未携带标记的请求(包括直接调 API)仍被拒绝。生成的frps.toml会写入一行风险注释,各规则的公网反代回源地址(HTTP →127.0.0.1:80、HTTPS →127.0.0.1:443)随回源端口自动跟随
变更
- 80/443 回源端口下公网反代不适用,也不再自动部署:frps 直接占用 80/443 意味着 VPS 上不再有 Nginx 的位置,「公网反代」页检测到该配置后显示说明卡片,隐藏统计、Nginx、规则台账与部署漂移区块,并跳过 agent 的路由 / 漂移 / 健康请求;后端
DeployAgentRoute与RedeployAllRoutes(含漂移一键修复)一律拒绝下发,自动下发路径syncAgentRoute直接跳过。历史遗留的 Nginx 路由需把回源端口改回 8080/8443 后才能在本页移除
测试
- 新增
internal/frp/vhost_port_test.go:80/443 未二次确认被拒、已确认可保存、生成的frps.toml含风险注释、公网反代回源地址跟随 80/443 - 新增回源端口特权判定边界用例(默认 8080/8443、显式 0、自定义高位端口)与「默认端口不受 80/443 规则影响」对照测试
go test ./...、npm run typecheck通过
v1.9.2
新增
- updater Token 零配置且无额外容器:主程序首次启动时在共享卷中自动生成
/run/havline-updater/updater.token,sidecar 等待并读取同一文件;主服务与 sidecar 支持HAVLINE_UPDATER_TOKEN_FILE,旧部署仍可用HAVLINE_UPDATER_TOKEN覆盖 - Nginx 启停控制:「公网服务端」页的 Nginx 卡片新增启动 / 停止按钮,停止前有二次确认并提示影响范围;Agent 提升到
0.15.2,新增POST /api/v1/nginx/action端点(start / stop / restart),走 nginx 自身信号而非 systemctl,兼容宝塔、源码编译等没有 systemd unit 的安装方式;两个内嵌 Agent 二进制已重编
修复
- frps 启动失败不再误报成功:主程序现在保留 Agent 返回的
ok=false与错误内容,systemctl start后 frps 未进入运行状态时会如实返回失败,不再固定提示「启动成功」 - frps 启动诊断增强:Agent 版本提升到
0.15.1,启动失败时汇总 systemd 状态、systemctl status、journal、/var/log/frps-systemd.log,并在 journald 不可用时直接运行frps -c /etc/frp/frps.toml2 秒捕获真实错误;两个内嵌 Agent 二进制已重编 - frps 与 Nginx 端口冲突防呆:frps
vhostHTTPPort/vhostHTTPSPort禁止使用80/443,服务端保存和frps.toml生成阶段都会提示改用8080/8443,避免 VPS 上 Nginx 已占用 80/443 时 frps 启动即退出 - frps 启动前清理旧进程:systemd 服务未运行但检测到 systemd 之外的手工
frps进程时,启动/重启前先停止旧进程,避免端口占用导致 systemd 反复 auto-restart - 公网反代隧道提示修正:frps 管理接口可访问但没有任何注册代理时,不再显示
frps 已注册代理: ;,改为提示 frpc 未登录或尚未注册该域名 - 旧服务端配置的布尔默认值补齐:
config_json缺少tcp_mux/login_fail_exit键时(016 迁移给已有服务端补的默认值是{})按表单默认值补成true,不再静默生成transport.tcpMux = false(每条新连接都要重建 TCP+TLS,首次建连明显变慢)与loginFailExit = false;显式配置为false的仍然保留
测试
- 新增 Agent 操作结果解析、Agent 版本解析、frps vhost 端口冲突校验和隧道提示文案测试
- 新增 updater Token 环境变量优先级、共享文件生成与解析、等待超时、缺失文件和空文件测试
- 新增服务端选项缺省
tcp_mux/login_fail_exit键时的默认值兜底测试 go test ./...、npm run typecheck通过
变更
- 品牌全量切换为 Havline:项目显示名、Go module、命令目录、二进制、环境变量、数据库、Cookie、Docker/Compose、Agent、Updater、脚本和当前文档统一切换到
Havline / havline / HAVLINE_ - AgentVersion 提升到 0.15.0:Agent 安装路径、配置目录、数据目录、systemd unit、Nginx 托管标记和 API 服务标识全部切换到
havline-agent - 历史文档保留原品牌名:
CHANGELOG.md历史版本、旧品牌评估文档和带日期的历史分析报告保留原始名称,作为项目沿革和 GPL 来源记录