feat: adjust readme.md

This commit is contained in:
engigu
2025-12-24 08:28:44 +08:00
parent 6c5326dc04
commit 0f5b7666cc
+95 -274
View File
@@ -1,82 +1,27 @@
# 白虎面板 (Baihu Panel) # 白虎面板 🐯
<p align="center"> 白虎面板是一个轻量级定时任务管理系统,基于 Go + Vue 3 构建,单文件部署,开箱即用。
<strong>轻量级定时任务管理系统</strong>
</p>
<p align="center"> 项目名叫白虎,取自中国传统四象之一,寓意守护和力量。
基于 Go + Vue 3 构建,单文件部署,开箱即用
</p>
<p align="center"> 如果你需要管理多个定时任务、脚本文件,并希望有一个简洁的 Web 界面来操作,这个项目可以帮你轻松实现。支持 Cron 表达式调度、在线终端、脚本编辑、环境变量管理等功能。
<a href="#功能特性">功能特性</a> •
<a href="#快速开始">快速开始</a> •
<a href="#配置说明">配置说明</a> •
<a href="#开发指南">开发指南</a>
</p>
--- ## 特色 ✨
## ✨ 功能特性 - 🔄 **轻量级:** 单文件部署,无需复杂配置,开箱即用
- 📋 **任务调度:** 支持标准 Cron 表达式,常用时间规则快捷选择
- 📝 **脚本管理:** 在线代码编辑器,支持文件上传、压缩包解压
- 🖥️ **在线终端:** WebSocket 实时终端,命令执行结果实时输出
- 🔐 **环境变量:** 安全存储敏感配置,任务执行时自动注入
- 🎨 **现代 UI** 响应式设计,深色/浅色主题切换
### 📋 定时任务管理 ## 效果图 📺
- 支持标准 Cron 表达式调度
- 常用时间规则快捷选择
- 任务启用/禁用状态切换
- 手动触发执行
- 任务超时控制
### 📝 脚本文件管理 <!-- TODO: 添加效果图 -->
- 在线代码编辑器
- 文件树形结构展示
- 支持创建、重命名、删除文件/文件夹
- 支持压缩包上传解压
- 支持多文件批量上传
### 🖥️ 在线终端 ## 快速开始 🚀
- WebSocket 实时终端
- 支持常用 Shell 命令
- 命令执行结果实时输出
### 📊 执行日志 ### Docker 部署(推荐)
- 任务执行历史记录
- 执行状态追踪(成功/失败/超时)
- 执行耗时统计
- 日志内容压缩存储
- 支持按任务名称搜索
- 日志自动清理
### 🔐 环境变量
- 安全存储敏感配置
- 变量值脱敏显示
- 任务执行时自动注入
### ⚙️ 系统设置
- 站点标题、标语自定义
- 站点图标自定义(SVG
- 分页大小配置
- Cookie 有效期配置
- 密码修改
- 系统信息查看
### 🎨 界面特性
- 响应式设计
- 深色/浅色主题切换
- 现代化 UI 组件
### 🔒 安全特性
- JWT Token 认证
- 密码加盐哈希存储
- 启动时自动生成随机密钥
- Cookie HttpOnly 保护
---
## 🚀 快速开始
### 方式一:Docker 部署(推荐)
**使用预构建镜像:**
```bash ```bash
docker run -d \ docker run -d \
@@ -84,14 +29,13 @@ docker run -d \
-p 8052:8052 \ -p 8052:8052 \
-v $(pwd)/data:/app/data \ -v $(pwd)/data:/app/data \
-v $(pwd)/configs:/app/configs \ -v $(pwd)/configs:/app/configs \
-v $(pwd)/envs:/app/envs \
-e TZ=Asia/Shanghai \ -e TZ=Asia/Shanghai \
--restart unless-stopped \ --restart unless-stopped \
ghcr.io/engigu/baihu:main ghcr.io/engigu/baihu:main
``` ```
**使用 Docker Compose** ### Docker Compose
创建 `docker-compose.yml`
```yaml ```yaml
version: '3.8' version: '3.8'
@@ -105,55 +49,64 @@ services:
volumes: volumes:
- ./data:/app/data - ./data:/app/data
- ./configs:/app/configs - ./configs:/app/configs
- ./envs:/app/envs
environment: environment:
- TZ=Asia/Shanghai - TZ=Asia/Shanghai
restart: unless-stopped restart: unless-stopped
``` ```
启动服务:
```bash ```bash
docker-compose up -d docker-compose up -d
``` ```
### 方式二:本地构建运行
**环境要求:**
- Go 1.21+
- Node.js 18+
- Make
**构建步骤:**
```bash
# 克隆项目
git clone https://github.com/engigu/baihu.git
cd baihu
# 安装依赖
make deps
cd web && npm install && cd ..
# 构建前端 + 后端
make build-all
# 运行
./baihu
```
### 访问面板 ### 访问面板
启动后访问:http://localhost:8052 启动后访问:http://localhost:8052
**默认账号:** **默认账号:** `admin` / `123456`
- 用户名:`admin`
- 密码:`123456`
> ⚠️ **安全提示**首次登录后请立即修改默认密码 > ⚠️ 首次登录后请立即修改默认密码
--- ## 功能特性 📋
## 📁 目录结构 ### 定时任务管理
- 支持标准 Cron 表达式调度
- 常用时间规则快捷选择
- 任务启用/禁用状态切换
- 手动触发执行
- 任务超时控制
### 脚本文件管理
- 在线代码编辑器
- 文件树形结构展示
- 支持创建、重命名、删除文件/文件夹
- 支持压缩包上传解压
- 支持多文件批量上传
### 在线终端
- WebSocket 实时终端
- 支持常用 Shell 命令
- 命令执行结果实时输出
### 执行日志
- 任务执行历史记录
- 执行状态追踪(成功/失败/超时)
- 执行耗时统计
- 日志内容压缩存储
- 日志自动清理
### 环境变量
- 安全存储敏感配置
- 变量值脱敏显示
- 任务执行时自动注入
### 系统设置
- 站点标题、标语、图标自定义
- 分页大小、Cookie 有效期配置
- 调度参数热重载
- 数据备份与恢复
## 目录结构 📁
``` ```
./ ./
@@ -161,13 +114,26 @@ make build-all
├── data/ # 数据目录(自动创建) ├── data/ # 数据目录(自动创建)
│ ├── ql.db # SQLite 数据库 │ ├── ql.db # SQLite 数据库
│ └── scripts/ # 脚本文件存储 │ └── scripts/ # 脚本文件存储
── configs/ ── configs/
└── config.ini # 配置文件(自动创建) └── config.ini # 配置文件(自动创建)
└── envs/ # 运行环境目录(自动创建)
├── python/ # Python 虚拟环境
└── node/ # Node.js npm 全局安装目录
``` ```
--- ### Docker 启动流程
## ⚙️ 配置说明 容器启动时 `docker-entrypoint.sh` 会执行以下操作:
1. **创建必要目录**`/app/data``/app/data/scripts``/app/configs``/app/envs`
2. **初始化 Python 虚拟环境**:如果 `/app/envs/python` 不存在,自动创建并配置清华 pip 镜像源
3. **配置 Node.js 环境**:设置 npm prefix 到 `/app/envs/node`,配置 npmmirror 镜像源
4. **激活环境**:将 `/app/envs/python/bin``/app/envs/node/bin` 加入 PATH
5. **启动应用**
> 💡 通过挂载 `./envs:/app/envs` 可以持久化 Python 和 Node.js 环境,避免每次重启容器都重新安装依赖。
## 配置说明 ⚙️
配置文件路径:`configs/config.ini` 配置文件路径:`configs/config.ini`
@@ -186,8 +152,6 @@ dbname = ql_panel
table_prefix = baihu_ table_prefix = baihu_
``` ```
### 配置项说明
| 配置项 | 说明 | 默认值 | | 配置项 | 说明 | 默认值 |
|--------|------|--------| |--------|------|--------|
| `server.port` | 服务端口 | 8052 | | `server.port` | 服务端口 | 8052 |
@@ -195,191 +159,48 @@ table_prefix = baihu_
| `database.type` | 数据库类型 | sqlite | | `database.type` | 数据库类型 | sqlite |
| `database.table_prefix` | 表前缀 | baihu_ | | `database.table_prefix` | 表前缀 | baihu_ |
### 站点设置
以下设置可在管理面板「系统设置 > 站点设置」中配置:
| 设置项 | 说明 | 默认值 |
|--------|------|--------|
| 站点标题 | 显示在浏览器标签和侧边栏 | 白虎面板 |
| 站点标语 | 显示在登录页 | 轻量级定时任务管理系统 |
| 站点图标 | SVG 格式,用于 favicon 和登录页 | 内置图标 |
| 分页大小 | 列表每页显示条数 | 10 |
| Cookie 有效期 | 登录状态保持天数 | 7 |
### 调度设置 ### 调度设置
以下设置可在管理面板「系统设置 > 调度设置」中配置,用于优化任务执行性能 系统采用 Worker Pool + 任务队列的架构来控制任务执行,可在「系统设置 > 调度设置」中配置:
| 设置项 | 说明 | 默认值 | | 设置项 | 说明 | 默认值 |
|--------|------|--------| |--------|------|--------|
| Worker 数量 | 并发执行任务的 worker 数量 | 4 | | Worker 数量 | 并发执行任务的 worker 数量 | 4 |
| 队列大小 | 任务队列缓冲区大小 | 100 | | 队列大小 | 任务队列缓冲区大小 | 100 |
| 速率间隔 | 任务启动间隔(毫秒)200ms = 每秒最多 5 个任务 | 200 | | 速率间隔 | 任务启动间隔(毫秒) | 200 |
**调度机制说明:** 修改调度设置后立即生效,无需重启服务。
系统采用 Worker Pool + 任务队列的架构来控制任务执行: ## 技术栈 🛠️
1. **Worker Pool**:固定数量的 worker 从队列中取任务执行,避免 cron 触发时无限并发 **后端:** Go 1.21+ / Gin / GORM / SQLite / JWT / Cron / WebSocket
2. **任务队列**:cron 调度器触发的任务先入队,由 worker 按顺序执行
3. **速率限制**:控制任务启动频率,防止秒级 cron 同时触发多个进程导致 CPU 峰值
4. **热重载**:修改调度设置后立即生效,无需重启服务
--- **前端:** Vue 3 / TypeScript / Vite / Tailwind CSS / Shadcn/ui / Xterm.js
## 🛠️ 技术栈 **部署:** Docker / GitHub Actions / Multi-arch (amd64/arm64)
### 后端 ## 本地开发 📖
- **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
```
### 开发命令
```bash ```bash
# 安装 Go 依赖 # 克隆项目
git clone https://github.com/engigu/baihu.git
cd baihu
# 安装依赖
make deps make deps
cd web && npm install && cd ..
# 安装前端依赖 # 构建前端 + 后端
cd web && npm install
# 前端开发模式(热重载)
cd web && npm run dev
# 构建前端
make build-web
# 构建后端
make build
# 构建全部(前端 + 后端)
make build-all make build-all
# 清理构建产物 # 运行
make clean ./baihu
# 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 欢迎提交 Issue 和 Pull Request
--- ## 许可证 📄
## 📄 License
[MIT License](LICENSE) [MIT License](LICENSE)