Files
TaskPool/README.md
T
2026-02-10 13:29:48 +08:00

18 KiB
Raw Blame History

白虎面板

Hits Latest Version Image Size Image pulls

白虎面板是一个轻量级定时任务管理系统,基于Go+Vue3构建,docker或者docker-compose,内置python3nodejsbash环境,开箱即用。

演示站点(演示站点的服务器比较烂,见谅) 演示站点

更新日志

最近更新

2026.02.10 - 重构任务调度系统,完善并发控制,优化文件树交互体验,支持任务执行实时日志流
2026.02.06 - 整理 Docker 目录结构,增加 Alpine 及 Debian 13 (Trixie) 镜像支持

查看完整更新日志

项目来由

多少和青龙面板有点关系,我自己也是青龙面板的使用者,但是现在的青龙面板性能我觉得有点难以接受。以我自己的使用(机器1C2G)为例,一个pythonrequests脚本每隔30s执行一次,有时候cpu执行的时候能跳变到50%以上。可以看看下面gif图片(如果不动,点击图片查看)

qinglong.gif

我觉得一个内存和性能占用低的面板更合适自己,所以做了这个项目。

如果你和我一样需要一个性能和内存占用低的定时面板,这个项目你可以体验下。

同样的定时场景和代码,这个项目的情况如下(cpu执行定时跳变不超过20%):

baihu.gif

如果项目有用,请帮忙点个star。

特色

  • 轻量级: docker/compose部署,无需复杂配置,开箱即用
  • 任务调度: 支持标准 Cron 表达式,常用时间规则快捷选择。日志不落文件,没有磁盘频繁io的问题
  • 脚本管理: 在线代码编辑器,支持文件上传、压缩包解压
  • 在线终端: WebSocket 实时终端,命令执行结果实时输出
  • 环境变量: 安全存储敏感配置,任务执行时自动注入
  • 现代UI 响应式设计,深色/浅色主题切换
  • 移动端: 适配移动小屏样式
  • 远程执行: 支持远程agent执行任务,展示执行结果

功能特性

点击展开查看详细功能

定时任务管理

  • 支持标准 Cron 表达式调度
  • 常用时间规则快捷选择
  • 任务启用/禁用状态切换
  • 手动触发执行
  • 任务超时控制

脚本文件管理

  • 在线代码编辑器
  • 文件树形结构展示
  • 支持创建、重命名、删除文件/文件夹
  • 支持压缩包上传解压
  • 支持多文件批量上传

在线终端

  • WebSocket 实时终端
  • 支持常用 Shell 命令
  • 命令执行结果实时输出

执行日志

  • 任务执行历史记录
  • 执行状态追踪(成功/失败/超时)
  • 执行耗时统计
  • 日志内容压缩存储
  • 日志自动清理

环境变量

  • 安全存储敏感配置
  • 变量值脱敏显示
  • 任务执行时自动注入

系统设置

  • 站点标题、标语、图标自定义
  • 分页大小、Cookie 有效期配置
  • 调度参数热重载
  • 数据备份与恢复

效果图

baihu-display.gif

快速部署

项目提供多种基础镜像,可根据具体环境选择:

标签 (Tag) 基础镜像 说明
latest Debian 12 默认版本,平衡稳定与兼容性
latest-alpine Alpine 极简版本,镜像体积最小
latest-debian13 Debian 13 尝鲜版本,基于 Debian Trixie

提示:下方部署示例默认使用 latest 标签,如需换用 Alpine 或 Debian 13 版,只需将 latest 替换为 latest-alpinelatest-debian13 即可。

方式一:环境变量部署(推荐)

通过环境变量指定配置,简单灵活,适合容器编排场景。

使用 SQLite(默认):

docker run -d \
  --name baihu \
  -p 8052:8052 \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/envs:/app/envs \
  -e TZ=Asia/Shanghai \
  -e BH_SERVER_PORT=8052 \
  -e BH_SERVER_HOST=0.0.0.0 \
  -e BH_DB_TYPE=sqlite \
  -e BH_DB_PATH=/app/data/baihu.db \
  -e BH_DB_TABLE_PREFIX=baihu_ \
  --restart unless-stopped \
  ghcr.io/engigu/baihu:latest

提示:如需通过反向代理部署在子路径(如 /baihu),添加环境变量:

-e BH_SERVER_URL_PREFIX=/baihu

配置后访问地址为 http://your-domain.com/baihu/,详见下方「URL 前缀配置」说明。

Docker ComposeSQLite):

services:
  baihu:
    image: ghcr.io/engigu/baihu:latest
    container_name: baihu
    ports:
      - "8052:8052"
    volumes:
      - ./data:/app/data
      - ./envs:/app/envs
    environment:
      - TZ=Asia/Shanghai
      - BH_SERVER_PORT=8052
      - BH_SERVER_HOST=0.0.0.0
      - BH_DB_TYPE=sqlite
      - BH_DB_PATH=/app/data/baihu.db
      - BH_DB_TABLE_PREFIX=baihu_
      # - BH_SERVER_URL_PREFIX=/baihu  # 可选:配置 URL 前缀用于反向代理
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
    restart: unless-stopped

使用 MySQL

docker run -d \
  --name baihu \
  -p 8052:8052 \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/envs:/app/envs \
  -e TZ=Asia/Shanghai \
  -e BH_SERVER_PORT=8052 \
  -e BH_SERVER_HOST=0.0.0.0 \
  -e BH_DB_TYPE=mysql \
  -e BH_DB_HOST=mysql-server \
  -e BH_DB_PORT=3306 \
  -e BH_DB_USER=root \
  -e BH_DB_PASSWORD=your_password \
  -e BH_DB_NAME=baihu \
  -e BH_DB_TABLE_PREFIX=baihu_ \
  --restart unless-stopped \
  ghcr.io/engigu/baihu:latest

提示:如需配置 URL 前缀,添加 -e BH_SERVER_URL_PREFIX=/baihu

Docker ComposeMySQL):

services:
  baihu:
    image: ghcr.io/engigu/baihu:latest
    container_name: baihu
    ports:
      - "8052:8052"
    volumes:
      - ./data:/app/data
      - ./envs:/app/envs
    environment:
      - TZ=Asia/Shanghai
      - BH_SERVER_PORT=8052
      - BH_SERVER_HOST=0.0.0.0
      # - BH_SERVER_URL_PREFIX=/baihu  # 可选:配置 URL 前缀
      - BH_DB_TYPE=mysql
      - BH_DB_HOST=mysql-server
      - BH_DB_PORT=3306
      - BH_DB_USER=root
      - BH_DB_PASSWORD=your_password
      - BH_DB_NAME=baihu
      - BH_DB_TABLE_PREFIX=baihu_
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
    restart: unless-stopped
方式二:配置文件部署

通过挂载 config.ini 配置文件来管理配置,适合需要持久化配置的场景。

Docker 命令:

docker run -d \
  --name baihu \
  -p 8052:8052 \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/configs:/app/configs \
  -v $(pwd)/envs:/app/envs \
  -e TZ=Asia/Shanghai \
  --restart unless-stopped \
  ghcr.io/engigu/baihu:latest

Docker Compose

services:
  baihu:
    image: ghcr.io/engigu/baihu:latest
    container_name: baihu
    ports:
      - "8052:8052"
    volumes:
      - ./data:/app/data
      - ./configs:/app/configs
      - ./envs:/app/envs
    environment:
      - TZ=Asia/Shanghai
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
    restart: unless-stopped

首次使用需要复制 configs/config.example.iniconfigs/config.ini,然后根据需要修改配置。

配置文件示例(configs/config.ini):

[server]
port = 8052
host = 0.0.0.0
# 可选:配置 URL 前缀用于反向代理,例如 /baihu
url_prefix = 

[database]
type = sqlite
path = ./data/baihu.db
table_prefix = baihu_
方式三:一键部署(白虎 + 消息推送)(推荐)

白虎面板本身不内置推送功能,但可以与消息聚合服务配合使用。推荐使用 Message-Push-Nest 作为统一的消息推送中心。

使用 SQLite

创建 docker-compose.yml 文件:

services:
  # 白虎面板
  baihu:
    image: ghcr.io/engigu/baihu:latest
    container_name: baihu
    ports:
      - "8052:8052"
    volumes:
      - ./data:/app/data
      - ./envs:/app/envs
    environment:
      - TZ=Asia/Shanghai
      - BH_SERVER_PORT=8052
      - BH_SERVER_HOST=0.0.0.0
      - BH_DB_TYPE=sqlite
      - BH_DB_PATH=/app/data/baihu.db
      - BH_DB_TABLE_PREFIX=baihu_
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
    restart: unless-stopped
    depends_on:
      - message-nest

  # 消息推送服务
  message-nest:
    image: ghcr.io/engigu/message-nest:latest
    # 或使用 Docker Hub 镜像
    # image: engigu/message-nest:latest
    container_name: message-nest
    ports:
      - "8053:8000"
    environment:
      - TZ=Asia/Shanghai
      - DB_TYPE=sqlite
    volumes:
      - ./message-nest-data:/app/data
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
    restart: unless-stopped

使用 MySQL(适合生产环境,需要已有 MySQL 服务)

创建 docker-compose.yml 文件:

services:
  # 白虎面板
  baihu:
    image: ghcr.io/engigu/baihu:latest
    container_name: baihu
    ports:
      - "8052:8052"
    volumes:
      - ./data:/app/data
      - ./envs:/app/envs
    environment:
      - TZ=Asia/Shanghai
      - BH_SERVER_PORT=8052
      - BH_SERVER_HOST=0.0.0.0
      - BH_DB_TYPE=mysql
      - BH_DB_HOST=192.168.1.100  # 修改为你的 MySQL 地址
      - BH_DB_PORT=3306
      - BH_DB_USER=root
      - BH_DB_PASSWORD=your_password  # 修改为你的 MySQL 密码
      - BH_DB_NAME=baihu
      - BH_DB_TABLE_PREFIX=baihu_
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
    restart: unless-stopped
    depends_on:
      - message-nest

  # 消息推送服务
  message-nest:
    image: ghcr.io/engigu/message-nest:latest
    # 或使用 Docker Hub 镜像
    # image: engigu/message-nest:latest
    container_name: message-nest
    ports:
      - "8053:8000"
    environment:
      - TZ=Asia/Shanghai
      - DB_TYPE=mysql
      - MYSQL_HOST=192.168.1.100  # 修改为你的 MySQL 地址
      - MYSQL_PORT=3306
      - MYSQL_USER=root
      - MYSQL_PASSWORD=your_password  # 修改为你的 MySQL 密码
      - MYSQL_DB=message_nest
      - MYSQL_TABLE_PREFIX=message_
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
    restart: unless-stopped

启动服务:

docker-compose up -d

访问地址:

注意:使用 MySQL 方式时,请先在 MySQL 中创建 baihumessage_nest 两个数据库,并修改配置中的 MySQL 地址和密码。也可以使用同一个数据库。

在任务中使用推送

Message-Push-Nest 提供了便捷的推送代码生成功能:

  1. 在 Message-Push-Nest 管理界面中配置推送渠道(如企业微信、钉钉、邮件等)
  2. 在「消息模板」或「任务」页面,点击「复制推送代码」按钮
  3. 选择对应的编程语言(Python、Bash、Node.js 等)
  4. 将生成的代码粘贴到白虎面板的任务脚本中需要推送的位置

1768143124572.png

提示:在 Docker Compose 部署的环境中,推送服务地址使用 http://message-nest:8000(容器内部通信)。如果是独立部署,请使用实际的服务地址。

环境变量优先级高于配置文件,两种方式可以混合使用。

方式四:Nginx 反向代理部署(HTTPS)

如果需要通过域名和 HTTPS 访问白虎面板,可以使用 Nginx 作为反向代理。

Nginx 配置示例:

# 在 http 块中添加 WebSocket 升级配置
map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

server {
    listen 443 ssl http2;
    server_name example.com;
    
    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers off;
    
    access_log /var/log/nginx/example.access.log;
    error_log  /var/log/nginx/example.error.log warn;
    
    location / {
        proxy_pass http://172.17.0.1:8052;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        
        # WebSocket 支持(终端功能需要)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        
        proxy_buffering off;
        proxy_read_timeout 60s;
    }
}

# HTTP 自动跳转 HTTPS(可选)
server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}

配置说明:

  1. example.com 替换为你的域名
  2. 修改 SSL 证书路径为你的实际路径
  3. 172.17.0.1:8052 是 Docker 容器的宿主机地址和端口,根据实际情况修改
  4. WebSocket 配置是必需的,否则在线终端功能无法使用

重载 Nginx 配置:

nginx -t && nginx -s reload

访问面板

启动后访问:http://localhost:8052

默认账号: admin / 123456

首次登录后请立即修改默认密码

数据目录

./
├── baihu                 # 可执行文件
├── data/                 # 数据目录(自动创建)
│   ├── baihu.db             # SQLite 数据库
│   └── scripts/          # 脚本文件存储
├── configs/
│   └── 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

[server]
port = 8052
host = 0.0.0.0
url_prefix =

[database]
type = sqlite
host = localhost
port = 3306
user = root
password = 
dbname = ql_panel
table_prefix = baihu_

环境变量

所有配置项都支持通过环境变量覆盖,环境变量优先级高于配置文件:

环境变量 对应配置 说明 默认值
BH_SERVER_PORT server.port 服务端口 8052
BH_SERVER_HOST server.host 监听地址 0.0.0.0
BH_SERVER_URL_PREFIX server.url_prefix URL 前缀,用于反向代理子路径部署 -
BH_DB_TYPE database.type 数据库类型 (sqlite/mysql) sqlite
BH_DB_HOST database.host 数据库地址 localhost
BH_DB_PORT database.port 数据库端口 3306
BH_DB_USER database.user 数据库用户 root
BH_DB_PASSWORD database.password 数据库密码 -
BH_DB_NAME database.dbname 数据库名称 ql_panel
BH_DB_PATH database.path SQLite 文件路径 ./data/baihu.db
BH_DB_TABLE_PREFIX database.table_prefix 表前缀 baihu_
BH_SECRET security.secret JWT 密钥 手动指定

URL 前缀配置

如果需要通过反向代理(如 Nginx)将白虎面板部署在子路径下,可以配置 URL 前缀。

配置方式:

# 方式一:配置文件
[server]
url_prefix = /baihu

# 方式二:环境变量
-e BH_SERVER_URL_PREFIX=/baihu

配置效果:

配置 url_prefix = /baihu 后,访问路径变为:

类型 路径示例
前端页面 http://your-domain.com/baihu/
登录页面 http://your-domain.com/baihu/login
任务管理 http://your-domain.com/baihu/tasks
API 接口 http://your-domain.com/baihu/api/v1/*
WebSocket ws://your-domain.com/baihu/api/v1/terminal/ws

Nginx 反向代理配置示例:

location /baihu/ {
    proxy_pass http://localhost:8052/baihu/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

MySQL 示例:

参考上方「方式一:环境变量部署」中的 MySQL 配置示例。

调度设置

系统采用 Worker Pool + 任务队列的架构来控制任务执行,可在「系统设置 > 调度设置」中配置:

设置项 说明 默认值
Worker 数量 并发执行任务的 worker 数量 4
队列大小 任务队列缓冲区大小 100
速率间隔 任务启动间隔(毫秒) 200

修改调度设置后立即生效,无需重启服务。

贡献

欢迎提交 Issue 和 Pull Request

许可证

MIT License