耗子
237b1bfcee
feat: 证书支持关联多个网站,close #1587
2026-08-15 20:54:45 +08:00
耗子
dac99e9e00
chore: 清理代码
2026-08-15 07:58:26 +08:00
耗子
255cb98d9d
perf: 优化监控与辅助数据库存储
2026-08-14 18:57:07 +08:00
耗子
d3ea65baf3
fix: 支持面板域名 ACME 证书
2026-08-12 15:57:43 +08:00
耗子
ea22c2f0a7
refactor(di): restore compile-time Wire injection
...
Replace the samber/do runtime container with explicit constructor dependencies and generated Wire graphs for ace and cli. Keep CLI application loading isolated and verify generated files in CI.
2026-07-27 02:54:44 +08:00
耗子
4e28fc60a3
feat: 添加通知与告警模块
...
- 通知渠道支持配置多个 SMTP 账号,配置整体加密落库,删除时清理规则与事件设置中的引用
- 告警规则支持 18 种指标:CPU/内存/Swap/负载/磁盘用量与 inode/磁盘与网卡速率/网站 5xx 与错误率、
服务与项目与容器与应用与数据库运行状态、证书与网站剩余天数,可配连续命中次数与静默期
- 系统事件通知覆盖证书续签失败、备份失败、后台任务失败、计划任务失败、网站到期、防篡改拦截、
面板健康问题、面板登录与爆破、SSH 登录与爆破
- 计划任务统一经 wrapper 执行以捕获退出码,flock 抢锁失败不计为失败
- 监控页改造为系统/告警/设置三 Tab
- 数据库驱动建连打通 context 并补齐连接超时,探测不再阻塞告警评估
close #1041
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-07-25 22:45:51 +08:00
耗子
f0d8acca31
fix: 优化
2026-07-21 18:54:59 +08:00
耗子
038ef2c44f
fix(tamper): 修复重启恢复延迟与统计日志时效
...
定时任务支持启动后立即触发,面板重启即恢复保护不留空窗;
查看拦截日志前先落库缓冲即拦即见;受保护目录改按监控口径
统计,带后缀规则不再恒为零
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-21 00:58:57 +08:00
耗子
8fa5c6d881
feat(file): 文件分享下载支持面板间互传
...
生成免登录的临时下载链接,强制设置有效期并支持下载次数限制,
过期分享由定时任务每小时清理,链接可直接用于其他面板的远程下载。
Closes #1641
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-20 22:47:11 +08:00
耗子
5db94ee61c
fix(tamper): 修复登记表脏映射与新建监控竞态并统一英文日志
...
- Unlock/Relock 同步维护事件回填表与统计,移动/替换文件后不再残留脏路径
- 新建目录补扫竞态窗口内已写入的文件,堵住 mkdir 后立即落文件的漏检
- chattr 整树模式下新建拦截需临时解除父目录 +a 才能删除
- inotify 监控失败聚合告警,便于发现 max_user_watches 耗尽
- 扫描器单网卡挂载失败仅跳过,聚合缓冲加上限防伪造源洪水耗尽内存
- ringbuf 解析改主机字节序,日志与错误串统一英文
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-20 05:53:14 +08:00
耗子
f151e29659
fix(tamper): 修复 eBPF 防护绕过并优化两处 BPF map 资源占用
...
- inode_rename 增查 new_dentry,堵住改名覆盖受保护文件的绕过
- 新增 inode_setattr 拦截点,堵住 truncate/chmod/chown 绕过
- 两处 hash map 加 BPF_F_NO_PREALLOC,消除数十 MB 内核内存预占
- 保护集合改批量更新,大目录树免逐键 syscall
- 扫描检测器 Supported() 在 lo 试挂 TCX,低版本内核不再误报支持
- lsm= 注入正则加词边界,防误改同后缀参数
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-20 05:28:26 +08:00
耗子
a0b5a356a8
feat(tamper): 面板内置网站文件防篡改
...
双模式运行时可选:
- chattr 模式:inode 属性锁定(+i/+a),内核 VFS 层事前强制,全发行版通用
- eBPF-LSM 模式:纯 Go asm 手写 LSM 程序 + 运行时 BTF 查偏移(零编译),
拦截写/删/改名并溯源进程,bpf LSM 未激活时引导改 grub 重启激活
含独立审计库、拦截日志、保护规则、fsnotify 新建监控、面板写入自动解锁恢复,
以及备份修复适配。参考 pkg/firewall/scan 的 eBPF 运行时加载范式
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-20 04:20:37 +08:00
耗子
cbed8e4797
refactor(job): 定时任务改为声明式贡献,测试脱离环境变量
...
- 每个任务合并为单个 NewXxx(i do.Injector) (Job, error) 构造函数,
直接返回声明式 Job{Spec, Task},删除 JobFn 闭包与 Register 包装层
- 调度器改为 registry.Collect[job.Job] 统一装配,与路由贡献模型对称
- InitGlobal 导出并读取 conf.App.Root(默认 /opt/ace),
返回 error 不再 Fatalf,修复原先无视配置 root 字段的硬编码
- 容器装配测试改用内存配置 + do.OverrideValue 注入,
不再依赖磁盘配置与 PANEL_CONFIG 环境变量(原测试实际会失败)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-09 22:31:56 +08:00
耗子
443516a2cf
refactor!: 迁移至 samber/do 依赖注入与三层架构
...
依赖注入:
- 移除 google/wire(含 wire.go/wire_gen.go 与全部 ProviderSet),
改用 samber/do v2 单注入器 + 双入口惰性构建
- 贡献模型替代命令式注册:路由 routes:、命令 commands:、
任务 jobs: 前缀经 internal/registry 收集与校验
- 构造函数统一 func NewXxx(i do.Injector) (T, error)
三层架构:
- 补全用例层:每个 biz.XxxRepo 配 XxxUsecase,
service/command/job 表现层只依赖用例,不再直接引用仓储
路由与文档:
- route/http.go 按域拆为声明式 Endpoint 贡献,
Endpoint 承载登录白名单与端点限流语义
- 调试模式下提供 OpenAPI 3.1 文档:/openapi.json 与 /docs(Scalar),
从 validate 标签生成
目录与依赖:
- internal/http/{middleware,request,rule} 拍平至 internal/*
- CLI 命令拆至 internal/command
- 日志轮转 timberjack 换为 libtnb/logrotate
- 升级 validator/cron/sessions/gormstore/sqlite/securecookie
- 数据库迁移保持 gormigrate 不变
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-09 21:54:22 +08:00
耗子
f024381660
feat(panel): 数据库故障降级、健康告警与检测
...
- 网站统计聚合器 flush 失败也 commit(丢弃已 drain 增量),防止 DB
长期不可写时内存无界累积导致 OOM/CPU 100%
- 势态感知同样在 upsert 失败时上报健康问题
- 新增 internal/app.Health 全局健康状态注册表,通过 /home/health 暴露
- 前端 layout 顶部新增 HealthBanner,DB 故障时红色横幅提醒并给出修复引导
- acepanel fix 检测数据库损坏改用 PRAGMA quick_check,能识别 malformed
等仅在查询时才暴露的静默损坏
- 主库与辅助库 DSN 一律设为 synchronous(FULL),减少宿主 write-back
缓存丢失 fsync 导致的损坏概率
- 移除 debug.SetMemoryLimit(256MB):软上限在活对象超限时会驱动 GC 反复
追赶不可回收对象,反而放大 CPU 打满
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-07-03 04:21:10 +08:00
耗子
00a5acbc45
feat(panel): 重写自升级流程并精简面板备份 ( close #1674 )
...
升级改为覆盖式:只替换程序文件,storage 原地不动,中断安全无需 fix;新增 WS 实时进度,前端等待重启自动刷新。面板备份改为仅打包核心文件(ace/panel.db/config.yml/cert/cli),排除统计/扫描大库,体积大幅下降。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-03 02:12:52 +08:00
耗子
c41dab89f8
refactor: 替换 robfig/cron/v3 为 libtnb/cron
...
robfig/cron 已停止维护,迁移到 libtnb/cron(零三方依赖,API 设计更现代)
主要变更:
- pkg/cron/logger.go 删除,libtnb/cron 直接吃 *slog.Logger
- bootstrap.NewCron 用 wrap.Recover() / wrap.SkipIfRunning() 替代旧 cron.Recover / SkipIfStillRunning
- app.Ace.Run 处理 c.Start() error 返回值;c.Stop(ctx) 接受 context
- 6 个 job (Monitoring/FirewallScan/CertRenew/PanelTask/WebsiteStat/WebsiteExpire) 的 Run 签名从 () 改为 (context.Context) error
- jobs.Register 用 c.Add 替代 c.AddJob
- 重新生成 wire 代码
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-08 18:55:39 +08:00
耗子
c0d8642cb5
fix: 优化代码
2026-04-28 06:05:34 +08:00
Copilot
6a7c856fe8
feat: 网站到期自动关闭 ( #1561 )
...
* Initial plan
* feat: 网站到期自动关闭功能
- biz.Website 新增 ExpireAt 字段(*time.Time,可空,默认不限时)
- 新增数据库迁移自动添加 expire_at 列
- 新增 API 端点 POST /website/{id}/expire_at
- 新增定时任务每分钟检查到期网站并自动关闭
- 前端网站列表新增到期时间列(证书有效期与备注之间)
Agent-Logs-Url: https://github.com/acepanel/panel/sessions/af33abcf-bbcd-4306-a680-76307c699774
Co-authored-by: h2zi <5967335+h2zi@users.noreply.github.com >
* refactor: 优化到期任务查询和数据更新
- 到期检查任务直接查询已到期且运行中的网站,避免加载全量数据
- UpdateExpireAt 使用直接 UPDATE 避免不必要的 SELECT 查询
Agent-Logs-Url: https://github.com/acepanel/panel/sessions/af33abcf-bbcd-4306-a680-76307c699774
Co-authored-by: h2zi <5967335+h2zi@users.noreply.github.com >
* refactor: ExpireAt 改为 time.Time,日志使用英文
- ExpireAt 从 *time.Time 改为 time.Time,零值表示不限时
- 日志消息改为英文,与其他 job 文件风格保持一致
- 前端适配零值时间判断
Agent-Logs-Url: https://github.com/acepanel/panel/sessions/00c49c64-7614-48d1-98bb-0d742d5f10ad
Co-authored-by: h2zi <5967335+h2zi@users.noreply.github.com >
* Revert "refactor: ExpireAt 改为 time.Time,日志使用英文"
This reverts commit ac3dfdb7e4 .
* fix: lint
* fix: lint
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: h2zi <5967335+h2zi@users.noreply.github.com >
Co-authored-by: 耗子 <haozi@loli.email >
2026-04-22 03:06:43 +08:00
耗子
e799cb4031
feat: 重构面板证书逻辑
2026-03-30 20:28:11 +08:00
耗子
d8515f9883
feat: 监控采集间隔支持设置
2026-02-27 00:11:07 +08:00
耗子
44f569b478
feat: 扫描感知支持自动屏蔽IP
2026-02-26 04:04:02 +08:00
耗子
38ec8b63d2
feat: 扫描感知支持自动屏蔽IP
2026-02-26 03:58:06 +08:00
半岛的蒟蒻bddjr
e947259b86
fix: go.mod module github.com/acepanel/panel/v3 ( #1423 )
2026-02-25 18:07:00 +08:00
耗子
7de339b3f7
feat: 统计添加ISP数据
2026-02-22 20:47:37 +08:00
耗子
3445d2396e
feat: 数据库优化
2026-02-22 20:06:11 +08:00
耗子
d216a72ac9
feat: 数据库优化
2026-02-22 19:58:20 +08:00
耗子
1d7f0a2f22
feat: 优化IP解析性能
2026-02-22 07:39:35 +08:00
耗子
6c589d0350
revert: 网站统计默认值调整
2026-02-22 00:35:29 +08:00
耗子
ec1e069b84
feat: 优化网站统计数据压力
2026-02-21 22:12:59 +08:00
耗子
67a4b2f8f1
feat: 网站统计优化
2026-02-20 04:46:58 +08:00
耗子
b39785fc34
feat: 网站统计优化
2026-02-20 04:29:40 +08:00
耗子
6809969b25
feat: 新增IP库保存下载
2026-02-20 03:13:32 +08:00
耗子
c64cf8ac18
feat: 新增IP库可选自动更新
2026-02-20 02:22:47 +08:00
耗子
2d8f014d20
feat: 新增IP地理位置显示
2026-02-20 00:02:26 +08:00
耗子
cc895d4df7
fix: 网站统计的一系列问题
2026-02-19 06:21:53 +08:00
耗子
da70928767
fix: 网站统计的一系列问题
2026-02-19 06:09:19 +08:00
耗子
19a3a92216
fix: 修复网站统计一些逻辑问题
2026-02-19 03:00:19 +08:00
耗子
2b48fd5fe3
feat: 完善网站统计
2026-02-18 19:50:33 +08:00
耗子
7d368536d0
feat: 完善网站统计
2026-02-18 19:18:50 +08:00
耗子
fa30728753
feat: 网站统计
2026-02-18 18:17:16 +08:00
耗子
9a1555c48a
feat: 防火墙扫描感知功能 & 首页容器统计 & lint 修复
...
- 新增 eBPF 扫描感知:TC ingress 检测 SYN/UDP 扫描,端口白名单过滤
- 新增首页容器数量统计卡片,未安装容器环境时自动隐藏
- 扫描概览页:统计卡片、趋势图、Top IP/端口、事件列表
- 扫描设置页:启用开关、保留天数、网卡选择
- 统计对比改为同长度上一周期,替代固定昨日对比
- eBPF ports map MaxEntries 扩展至 65535 覆盖全端口
- 修复 WriteString(fmt.Sprintf()) lint 问题,改用 fmt.Fprintf
- 修复 database_redis.go 非常量格式字符串和 govet 警告
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-18 02:52:32 +08:00
耗子
c56b4e00d9
feat: 监控添加Top进程记录
2026-02-10 21:55:11 +08:00
Copilot
0724a042ef
feat: HTTP/3 (QUIC) 支持 + TLS 证书热重载 ( #1356 )
...
* Initial plan
* feat: 添加 HTTP/3 (QUIC) 协议支持,TLS 启用时自动启用
Co-authored-by: devhaozi <115467771+devhaozi@users.noreply.github.com >
* refactor: 优化证书路径复用,修正注释和依赖标记
Co-authored-by: devhaozi <115467771+devhaozi@users.noreply.github.com >
* feat: 添加证书热重载,TLS 握手时自动检测并加载变更的证书文件
Co-authored-by: devhaozi <115467771+devhaozi@users.noreply.github.com >
* refactor: 使用 fsnotify 替代每次握手 os.Stat 实现证书热重载
Co-authored-by: devhaozi <115467771+devhaozi@users.noreply.github.com >
* fix: lint
* fix: lint
* fix: 使用 wire 工具重新生成 wire_gen.go 替代手动编辑
Co-authored-by: devhaozi <115467771+devhaozi@users.noreply.github.com >
* feat: 通过 Wire 注入 *tlscert.Reloader,优雅关闭时正确释放资源
Co-authored-by: devhaozi <115467771+devhaozi@users.noreply.github.com >
* fix: lint
* fix: lint
* fix: lint
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: devhaozi <115467771+devhaozi@users.noreply.github.com >
Co-authored-by: 耗子 <haozi@loli.email >
2026-02-09 20:10:13 +08:00
耗子
cef8d7caa7
fix: 面板IP证书续签
2026-01-31 18:40:41 +08:00
耗子
5269924ca4
feat: 证书添加超时
2026-01-23 22:45:38 +08:00
耗子
d173755f98
feat: 伪静态配置本地化
2026-01-23 21:57:05 +08:00
耗子
f64b06b774
feat: 备份优化
2026-01-22 03:44:20 +08:00
耗子
72ecb6904d
feat: 备份重构1
2026-01-20 02:18:13 +08:00
Copilot
f2e41a3364
feat: 添加操作日志记录功能和前端日志查看页面 ( #1227 )
...
* Initial plan
* feat: 添加操作日志记录功能和前端日志查看页面
Co-authored-by: devhaozi <115467771+devhaozi@users.noreply.github.com >
* fix: 修复 HttpLog 中 IP 字符串处理的类型安全问题
Co-authored-by: devhaozi <115467771+devhaozi@users.noreply.github.com >
* fix: lint
* feat: 完善面板内日志记录,添加网站/数据库/项目/计划任务/备份CRUD日志
Co-authored-by: devhaozi <115467771+devhaozi@users.noreply.github.com >
* feat: 完善更多模块的日志记录(证书/SSH/Webhook/用户/设置/安全)
Co-authored-by: devhaozi <115467771+devhaozi@users.noreply.github.com >
* fix: 改进cert_dns删除方法,在删除前获取实体信息用于日志记录
Co-authored-by: devhaozi <115467771+devhaozi@users.noreply.github.com >
* fix: lint
* feat: 从session获取操作员ID并在前端显示用户名
Co-authored-by: devhaozi <115467771+devhaozi@users.noreply.github.com >
* fix: lint
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: devhaozi <115467771+devhaozi@users.noreply.github.com >
Co-authored-by: 耗子 <haozi@loli.email >
2026-01-12 23:31:22 +08:00