shaw
ba27026399
docs: 调整源码编译步骤的顺序
2025-12-19 09:47:17 +08:00
shaw
c15b419c4c
feat(backend): 添加 event_logging 接口直接返回200
...
将原本在nginx处理的遥测日志请求移至后端,
忽略Claude Code客户端发送的日志数据。
2025-12-19 09:39:57 +08:00
shaw
5bd27a5d17
fix(frontend): 优化分组表单中订阅模式的字段显示逻辑
...
- 订阅模式下隐藏 Exclusive 字段并默认为开启状态
- 编辑分组时禁用计费类型字段,防止修改
- 移除编辑表单中无用的 subscription_type watch
2025-12-19 08:41:30 +08:00
Wesley Liddick
0e7b8aab8c
Merge pull request #4 from NepetaLemon/refactor/backend-wire-provider-sets
...
refactor(backend): 拆分 Wire ProviderSet
2025-12-18 19:27:49 -05:00
Forest
236908c03d
refactor(backend): 拆分 Wire ProviderSet
2025-12-19 00:03:29 +08:00
shaw
67d028cf50
fix: 修复用户修改密码接口404问题
...
将后端路由与前端API调用对齐:
- /user/profile -> /users/me
- PUT /user/password -> POST /users/me/password
2025-12-18 22:59:49 +08:00
shaw
66ba487697
fix: 修复前端github项目地址
2025-12-18 22:47:42 +08:00
Wesley Liddick
8c7875aa4d
Merge pull request #3 from NepetaLemon/refactor/backend-wire-bootstrap
...
refactor(backend): 引入 Wire 重构服务启动与依赖组装
2025-12-18 09:12:15 -05:00
shaw
145171464f
fix: 修复前端多个 bug
...
1. 版本号闪烁问题
- 将版本信息缓存到 Pinia store,避免每次路由切换都重新请求
- 添加加载占位符,版本为空时显示骨架屏
2. 管理员登录跳转问题
- 管理员登录后现在正确跳转到 /admin/dashboard
- 普通用户仍跳转到 /dashboard
3. Dashboard 页面空白报错
- 修复 API 返回 null 时访问 .length 导致的 TypeError
- 为 computed 属性添加可选链操作符保护
- 为数据赋值添加空数组默认值
2025-12-18 22:11:29 +08:00
Forest
e5aa676853
refactor(backend): 引入 Wire 重构服务启动与依赖组装
2025-12-18 22:07:17 +08:00
shaw
9b4fc42457
feat: 实现后台在线更新功能
...
- 前端添加更新和重启按钮,支持一键更新 Release 构建
- 修复条件判断优先级问题,确保错误/成功状态正确显示
- 后端使用原子文件替换模式,确保更新过程安全可靠
- 在可执行文件同目录创建临时文件,保证 rename 原子性
- 删除未使用的 copyFile 函数,保持代码整洁
2025-12-18 21:15:10 +08:00
shaw
caae7e4603
feat: 改进安装脚本的交互体验和自动化流程
...
- 修复 curl | bash 管道模式下无法交互式输入的问题
- 使用 /dev/tty 检测终端可用性替代 stdin 检测
- 所有 read 命令从 /dev/tty 读取用户输入
- 安装完成后自动启动服务和启用开机自启
- 使用 ipinfo.io API 获取公网 IP 用于显示访问地址
- 简化安装完成后的输出信息
2025-12-18 20:53:29 +08:00
shaw
a26db8b3e2
fix: 修复前端页面刷新时偶发空白渲染的竞态条件问题
...
使用 router.isReady() 等待路由器完成初始导航后再挂载应用,
避免 RouterView 在路由未就绪时渲染空的 Comment 节点。
2025-12-18 20:45:56 +08:00
shaw
8e81e395b3
refactor: 使用行业标准方案重构服务重启逻辑
...
重构内容:
- 移除复杂的 sudo systemctl restart 方案
- 改用 os.Exit(0) + systemd Restart=always 的标准做法
- 删除 sudoers 配置及相关代码
- 删除 sub2api-sudoers 文件
优势:
- 代码从 85+ 行简化到 47 行
- 无需 sudo 权限配置
- 无需特殊用户 shell 配置
- 更简单、更可靠
- 符合行业最佳实践(Docker/K8s 等均采用此方案)
工作原理:
- 服务调用 os.Exit(0) 优雅退出
- systemd 检测到退出后自动重启(Restart=always)
2025-12-18 20:32:24 +08:00
shaw
f0e89992f7
fix: 使用 setsid 确保重启命令独立于父进程执行
...
问题原因:
- cmd.Start() 启动的子进程与父进程在同一会话中
- 当 systemctl restart 发送 SIGTERM 给父进程时
- 子进程可能也会被终止,导致重启命令无法完成
修复内容:
- 使用 setsid 创建新会话,子进程完全独立于父进程
- 分离标准输入/输出/错误流
- 确保即使父进程被 kill,重启命令仍能执行完成
2025-12-18 20:00:53 +08:00
shaw
4eaa0cf14a
fix: 使用完整路径执行 sudo 和 systemctl 命令
...
问题原因:
- systemd 服务的 PATH 环境变量可能受限
- 直接使用 "sudo" 可能找不到可执行文件
修复内容:
- 添加 findExecutable 函数动态查找可执行文件路径
- 先尝试 exec.LookPath,再检查常见系统路径
- 添加日志显示实际使用的路径,方便调试
- 兼容不同 Linux 发行版的路径差异
2025-12-18 19:58:25 +08:00
shaw
e9ec2280ec
fix: 修复 sudo 在非交互模式下无法执行的问题
...
问题原因:
- sudo 命令没有 -n 选项
- 在后台服务中,sudo 会尝试从终端读取密码
- 由于没有终端,命令静默失败
修复内容:
- 添加 sudo -n 选项强制非交互模式
- 如果需要密码会立即失败并返回错误,而不是挂起
2025-12-18 19:37:41 +08:00
Wesley Liddick
bb7bfb6980
Merge pull request #1 from 7836246/fix/concurrent-proxy-race-condition
...
fix: 修复并发请求时共享httpClient.Transport导致的竞态条件
2025-12-18 06:37:22 -05:00
shaw
b66f97c100
fix: 修复 install.sh 优先使用旧 sudoers 文件的问题
...
问题原因:
- install.sh 优先从 tar.gz 复制 sudoers 文件
- 旧版 Release 中的 sudoers 文件没有 /usr/bin/systemctl 路径
- 即使脚本更新了,仍然会使用旧的配置
修复内容:
- 移除对 tar.gz 中 sudoers 文件的依赖
- 总是使用脚本中内嵌的最新配置
- 确保新版脚本立即生效,无需等待新 Release
2025-12-18 19:27:47 +08:00
shaw
b51ad0d893
fix: 修复 sudoers 中 systemctl 路径不兼容的问题
...
问题原因:
- sudoers 只配置了 /bin/systemctl 路径
- 部分系统(如 Ubuntu 22.04+)的 systemctl 位于 /usr/bin/systemctl
- 路径不匹配导致 sudo 仍然需要密码
修复内容:
- 同时支持 /bin/systemctl 和 /usr/bin/systemctl 两个路径
- 兼容 Debian/Ubuntu 和 RHEL/CentOS 等不同发行版
2025-12-18 19:17:05 +08:00
shaw
4eb22d8ee9
fix: 修复服务用户 shell 导致无法执行 sudo 重启的问题
...
问题原因:
- 服务用户 sub2api 的 shell 被设置为 /bin/false
- 导致无法执行 sudo systemctl restart 命令
- 安装/升级后服务无法自动重启
修复内容:
- 新安装时使用 /bin/sh 替代 /bin/false
- 升级时自动检测并修复旧版本用户的 shell 配置
- 修复失败时给出警告和手动修复命令,不中断安装流程
2025-12-18 19:07:33 +08:00
江西小徐
2392e7cf99
fix: 修复并发请求时共享httpClient.Transport导致的竞态条件
...
问题描述:
当多个请求并发执行且使用不同代理配置时,它们会同时修改共享的
s.httpClient.Transport,导致请求可能使用错误的代理(数据泄露风险)
或意外失败。
修复方案:
为需要代理的请求创建独立的http.Client,而不是修改共享的httpClient.Transport。
改动内容:
- 新增 buildUpstreamRequestResult 结构体,返回请求和可选的独立client
- 修改 buildUpstreamRequest 方法,配置代理时创建独立client
- 更新 Forward 方法,根据是否有代理选择合适的client
2025-12-18 18:14:48 +08:00
shaw
8e4bd42e8c
fix: 修复安装/升级无法重启服务的问题
2025-12-18 17:44:49 +08:00
shaw
ef3199f0ca
fix: 修复脚本的一些参数问题
2025-12-18 17:25:26 +08:00
shaw
e440530acc
fix: release error
2025-12-18 17:12:57 +08:00
shaw
e2ae9fe50b
fix: release error
2025-12-18 17:02:21 +08:00
shaw
20aee89dcc
fix: Fixed installation issues with the install.sh script.
2025-12-18 16:00:57 +08:00
shaw
6cf60176c3
fix: release error
2025-12-18 15:56:13 +08:00
shaw
268f4d28fb
fix: add missing deploy/DOCKER.md for Docker workflow
...
The release workflow references ./deploy/DOCKER.md to update DockerHub
description, but the file was missing causing ENOENT error.
2025-12-18 15:46:43 +08:00
shaw
882c2e1eef
fix: use environment variable to pass full tag message to GoReleaser
...
- Extract complete tag message body in workflow using git format
- Pass tag message via TAG_MESSAGE environment variable
- Update goreleaser config to use .Env.TAG_MESSAGE instead of .TagBody
- Fix release notes being truncated to first paragraph only
2025-12-18 15:30:35 +08:00
shaw
e63d95122a
fix: release error
2025-12-18 15:08:50 +08:00
shaw
3d05e50335
fix: frontend build error
2025-12-18 14:26:55 +08:00
shaw
642842c29e
First commit
2025-12-18 13:50:39 +08:00
Wesley Liddick
569f4882e5
Initial commit
2025-12-18 10:26:18 +08:00