96f23bfcba5ce3b3e3e72e7cfb5b47f17c99ba8c
白虎面板 (Baihu Panel)
轻量级定时任务管理系统
基于 Go + Vue 3 构建,单文件部署,开箱即用
✨ 功能特性
📋 定时任务管理
- 支持标准 Cron 表达式调度
- 常用时间规则快捷选择
- 任务启用/禁用状态切换
- 手动触发执行
- 任务超时控制
📝 脚本文件管理
- 在线代码编辑器
- 文件树形结构展示
- 支持创建、重命名、删除文件/文件夹
- 支持压缩包上传解压
- 支持多文件批量上传
🖥️ 在线终端
- WebSocket 实时终端
- 支持常用 Shell 命令
- 命令执行结果实时输出
📊 执行日志
- 任务执行历史记录
- 执行状态追踪(成功/失败/超时)
- 执行耗时统计
- 日志内容压缩存储
- 支持按任务名称搜索
- 日志自动清理
🔐 环境变量
- 安全存储敏感配置
- 变量值脱敏显示
- 任务执行时自动注入
⚙️ 系统设置
- 站点标题、标语自定义
- 站点图标自定义(SVG)
- 分页大小配置
- Cookie 有效期配置
- 密码修改
- 系统信息查看
🎨 界面特性
- 响应式设计
- 深色/浅色主题切换
- 现代化 UI 组件
🔒 安全特性
- JWT Token 认证
- 密码加盐哈希存储
- 启动时自动生成随机密钥
- Cookie HttpOnly 保护
🚀 快速开始
方式一:Docker 部署(推荐)
使用预构建镜像:
docker run -d \
--name baihu \
-p 8052:8052 \
-v $(pwd)/data:/app/data \
-v $(pwd)/configs:/app/configs \
-e TZ=Asia/Shanghai \
--restart unless-stopped \
ghcr.io/engigu/baihu:main
使用 Docker Compose:
创建 docker-compose.yml:
version: '3.8'
services:
baihu:
image: ghcr.io/engigu/baihu:main
container_name: baihu
ports:
- "8052:8052"
volumes:
- ./data:/app/data
- ./configs:/app/configs
environment:
- TZ=Asia/Shanghai
restart: unless-stopped
启动服务:
docker-compose up -d
方式二:本地构建运行
环境要求:
- Go 1.21+
- Node.js 18+
- Make
构建步骤:
# 克隆项目
git clone https://github.com/engigu/baihu.git
cd baihu
# 安装依赖
make deps
cd web && npm install && cd ..
# 构建前端 + 后端
make build-all
# 运行
./baihu
访问面板
启动后访问:http://localhost:8052
默认账号:
- 用户名:
admin - 密码:
123456
⚠️ 安全提示:首次登录后请立即修改默认密码
📁 目录结构
./
├── baihu # 可执行文件
├── data/ # 数据目录(自动创建)
│ ├── ql.db # SQLite 数据库
│ └── scripts/ # 脚本文件存储
└── configs/
└── config.ini # 配置文件(自动创建)
⚙️ 配置说明
配置文件路径:configs/config.ini
[server]
port = 8052
host = 0.0.0.0
[database]
type = sqlite
host = localhost
port = 3306
user = root
password =
dbname = ql_panel
table_prefix = baihu_
配置项说明
| 配置项 | 说明 | 默认值 |
|---|---|---|
server.port |
服务端口 | 8052 |
server.host |
监听地址 | 0.0.0.0 |
database.type |
数据库类型 | sqlite |
database.table_prefix |
表前缀 | baihu_ |
站点设置
以下设置可在管理面板「系统设置 > 站点设置」中配置:
| 设置项 | 说明 | 默认值 |
|---|---|---|
| 站点标题 | 显示在浏览器标签和侧边栏 | 白虎面板 |
| 站点标语 | 显示在登录页 | 轻量级定时任务管理系统 |
| 站点图标 | SVG 格式,用于 favicon 和登录页 | 内置图标 |
| 分页大小 | 列表每页显示条数 | 10 |
| Cookie 有效期 | 登录状态保持天数 | 7 |
调度设置
以下设置可在管理面板「系统设置 > 调度设置」中配置,用于优化任务执行性能:
| 设置项 | 说明 | 默认值 |
|---|---|---|
| Worker 数量 | 并发执行任务的 worker 数量 | 4 |
| 队列大小 | 任务队列缓冲区大小 | 100 |
| 速率间隔 | 任务启动间隔(毫秒),200ms = 每秒最多 5 个任务 | 200 |
调度机制说明:
系统采用 Worker Pool + 任务队列的架构来控制任务执行:
- Worker Pool:固定数量的 worker 从队列中取任务执行,避免 cron 触发时无限并发
- 任务队列:cron 调度器触发的任务先入队,由 worker 按顺序执行
- 速率限制:控制任务启动频率,防止秒级 cron 同时触发多个进程导致 CPU 峰值
- 热重载:修改调度设置后立即生效,无需重启服务
🛠️ 技术栈
后端
- Go 1.21+ - 编程语言
- Gin - Web 框架
- GORM - ORM 框架
- SQLite - 嵌入式数据库
- JWT - 身份认证
- Cron - 定时任务调度
- WebSocket - 实时通信
前端
- Vue 3 - 前端框架
- TypeScript - 类型安全
- Vite - 构建工具
- Tailwind CSS - 样式框架
- Shadcn/ui - UI 组件库
- Xterm.js - 终端模拟器
部署
- Docker - 容器化部署
- GitHub Actions - CI/CD
- Multi-arch - 支持 amd64/arm64
📖 开发指南
项目结构
├── main.go # 入口文件
├── internal/
│ ├── bootstrap/ # 应用启动
│ ├── constant/ # 常量定义
│ ├── controllers/ # 控制器层
│ ├── database/ # 数据库初始化
│ ├── middleware/ # 中间件
│ ├── models/ # 数据模型
│ ├── router/ # 路由注册
│ ├── services/ # 业务逻辑层
│ ├── static/ # 静态文件嵌入
│ └── utils/ # 工具函数
├── web/ # 前端项目
│ ├── src/
│ │ ├── api/ # API 接口
│ │ ├── components/ # 公共组件
│ │ ├── composables/ # 组合式函数
│ │ ├── layouts/ # 布局组件
│ │ ├── router/ # 路由配置
│ │ └── views/ # 页面视图
│ └── ...
├── configs/ # 配置文件
├── data/ # 数据目录
├── Dockerfile # Docker 构建
├── Makefile # 构建脚本
└── README.md
开发命令
# 安装 Go 依赖
make deps
# 安装前端依赖
cd web && npm install
# 前端开发模式(热重载)
cd web && npm run dev
# 构建前端
make build-web
# 构建后端
make build
# 构建全部(前端 + 后端)
make build-all
# 清理构建产物
make clean
# Docker 构建
make docker-build
# Docker Compose 启动
make docker-up
# Docker Compose 停止
make docker-down
API 接口
认证相关
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/auth/login |
用户登录 |
| POST | /api/auth/logout |
用户登出 |
| GET | /api/auth/me |
获取当前用户 |
任务管理
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/tasks |
获取任务列表 |
| POST | /api/tasks |
创建任务 |
| GET | /api/tasks/:id |
获取任务详情 |
| PUT | /api/tasks/:id |
更新任务 |
| DELETE | /api/tasks/:id |
删除任务 |
| POST | /api/execute/task/:id |
执行任务 |
环境变量
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/env |
获取变量列表 |
| POST | /api/env |
创建变量 |
| PUT | /api/env/:id |
更新变量 |
| DELETE | /api/env/:id |
删除变量 |
脚本文件
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/files/tree |
获取文件树 |
| GET | /api/files/content |
获取文件内容 |
| POST | /api/files/content |
保存文件内容 |
| POST | /api/files/create |
创建文件/文件夹 |
| POST | /api/files/delete |
删除文件/文件夹 |
| POST | /api/files/upload |
上传压缩包 |
执行日志
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/logs |
获取日志列表 |
| GET | /api/logs/:id |
获取日志详情 |
系统设置
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/settings/site |
获取站点设置 |
| PUT | /api/settings/site |
更新站点设置 |
| POST | /api/settings/password |
修改密码 |
| GET | /api/settings/about |
获取系统信息 |
🤝 贡献
欢迎提交 Issue 和 Pull Request!
📄 License
Description
Languages
Go
62.8%
TypeScript
30.6%
JavaScript
2.1%
Python
1.9%
Shell
0.8%
Other
1.7%