Skip to content

engigu/baihu-panel

Repository files navigation

白虎面板

Hits Latest Version Image Size Image pulls

白虎面板 (Baihu Panel) 是一款极致轻量、高性能的自动化任务调度平台。采用 Go + Vue3 架构,专注于高性能与低系统开销。通过深度集成 Mise 运行时管理,它原生支持 Python、Node.js、Go、Rust、PHP 等所有主流语言环境的动态安装(几乎所有的版本)与统一依赖管理。支持 Docker/Docker-Compose 一键部署,开箱即用,是您理想的轻量化脚本托管与任务调度解决方案。

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

更新日志 ☕

最近更新

2026.03.05 - API 文档重构 重构 OpenAPI 认证体系,支持站点级 Token 配置与 Basic Auth 保护;新增设计感十足的全局 404 页面
2026.03.04 - 新增内置消息推送系统:全新原生支持企业微信、钉钉、飞书、Telegram、Bark、邮件等十余种主流渠道的推送,接入系统级事件通知自动捕获,告别原有必配外部推送服务的繁琐历史
2026.02.13 - 重构任务执行引擎:深度集成 Mise 运行时管理,支持 Python, Node.js, Go, Rust, PHP 等几乎所有主流语言的动态安装与多版本切换,同步上线跨语言统一依赖管理系统
2026.02.11 - 增强安全性:首次启动使用随机密码并打印在日志中,登录接口增加防暴力破解,文件系统操作增加路径穿越锁定
2026.02.10 - 重构任务调度系统,完善并发控制,优化文件树交互体验,支持任务执行实时日志流
2026.02.06 - 整理 Docker 目录结构,增加 Debian 13 (Trixie) 镜像支持

查看完整更新日志

项目来由

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

qinglong.gif

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

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

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

baihu.gif

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

特色

  • 轻量级: docker/compose部署,无需复杂配置,开箱即用
  • 任务调度: 支持标准 Cron 表达式,常用时间规则快捷选择。日志不落文件,没有磁盘频繁io的问题
  • 脚本管理: 在线代码编辑器,支持文件上传、压缩包解压
  • 在线终端: WebSocket 实时终端,命令执行结果实时输出
  • 消息推送: 内置强大消息推送与通知引擎,无缝兼容主流渠道,支持系统级事件告警
  • 环境变量: 安全存储敏感配置,任务执行时自动注入
  • 现代UI: 响应式设计,深色/浅色主题切换
  • 移动端: 适配移动小屏样式
  • 远程执行: 支持远程agent执行任务,展示执行结果
  • 多语言支持: 深度集成 Mise,支持几乎所有主流编程语言的动态安装、多版本切换及依赖管理

功能特性

点击展开查看详细功能

定时任务管理

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

脚本文件管理

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

在线终端

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

执行日志

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

消息推送与系统通知

  • 原生内置各大主流平台渠道(钉钉、企业微信、Telegram、Server酱等)
  • 支持系统级事件条件触发通知(例如任务失败报警、服务下线提醒)
  • 自动生成跨语言调用 API 示例代码供脚本集成

环境变量

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

系统设置

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

支持语言脚本和依赖

点击展开查看已支持的语言及依赖管理详情

脚本运行环境

白虎面板原生支持以下脚本的定时执行:

  • Python3, Node.js, Bash (内置环境)
  • 通过 Mise 扩展:支持几乎所有主流编程语言的动态安装与切换。

依赖管理支持

系统内置了高度集成的跨语言依赖管理器,支持自动化安装和管理以下语言的依赖项,并确保在容器内全局可用:

语言 包管理器 功能说明
Python pip 自动使用内置虚拟环境,支持清华源
Node.js npm 全局安装模式,自动配置 npmmirror 镜像
Go go install 通过 go install 安装二进制工具
Rust cargo 通过 cargo install 安装 Rust 依赖
Ruby gem 支持 gem install 本地安装
Bun bun 支持 bun add -g 全局模式
PHP composer 支持 composer global require
Deno deno 支持 deno install -g
.NET dotnet 支持 dotnet tool install -g
Elixir/Erlang mix 支持 mix archive.install
Lua luarocks 通过 luarocks 管理 Lua 包
Nim nimble 支持 nimble install
Dart/Flutter pub 支持 pub global activate
Perl cpanm 简单的 cpanm 安装支持
Crystal shards shards 项目级别或工具安装

使用方法

  1. 安装环境:进入「编程语言」页面,使用 mise 一键安装所需的语言及版本。
  2. 依赖管理:在已安装列表点击「依赖管理」,输入名称(可选版本)即可自动在对应环境内完成安装。
  3. 隔离机制:系统基于 mise exec 实现了完善的环境隔离,不同版本的依赖包互不冲突。

效果图

baihu-display.gif

快速部署

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

标签 (Tag) 基础镜像 说明
latest Debian 12 默认版本,集成 Python 3.13 与 Node.js 23
latest-debian13 Debian 13 尝鲜版本

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

警告架构升级破坏性变更

本版本(2026.02.13+)对底层运行时环境进行了彻底重构,弃用了原有的静态 Python/Node 环境,转为使用 Mise 进行动态版本管理。

  1. 不再提供 Alpine 镜像:由于 glibc 兼容性问题,Mise 无法在 Alpine 上完美运行,因此暂时取消 Alpine 镜像支持。
  2. 环境数据不兼容:如果您是从旧版本升级上来,原有的 Python/Node 环境数据将无法迁移。升级后您需要:
    • 清空或备份原有的 envs/ 挂载目录
    • 启动新容器,让系统自动初始化新的 Mise 环境
    • 在面板中重新安装所需的语言和依赖
方式一:环境变量部署(推荐)

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

使用 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 Compose(SQLite):

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 Compose(MySQL):

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 部署方式已不再是使用面板的基础要求。您可随时直接使用上方的第一种简单命令开箱即用体验。

以下「白虎 + 消息聚合服务」的联合部署内容被予以保留,专为仍然需要「中心化通知网关」的重度企业解耦用户作为参考:

白虎面板通过系统集成也可轻松连接独立的消息聚合服务。这里推荐使用 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 地址和密码。也可以使用同一个数据库。

在任务中使用推送

如今你无需依赖任何外部服务,可以通过面板自身完成:

  1. 进入白虎面板「消息推送」模块,新建你需要通知的渠道。
  2. 可以在「事件绑定」中直接设定自动化系统通知(如监控任务失败或脚本异常中止时进行自动提醒)。
  3. 如需在自己的脚本逻辑内动态推送,可以点击「脚本调用」页面,立刻获取一键调用的 Shell / API 代码,内嵌进你的业务逻辑中即可完成推信!

(如继续使用 Message-Push-Nest,你可以通过其管理界面中「消息模板」的「复制推送代码」提取旧有版集成样例。)

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,密码见启动日志(首次启动会自动生成 12 位随机密码并打印在日志中)

注意:出于安全性考虑,系统不再使用固定默认密码。请在容器启动日志中搜索 管理员账号创建成功 找到您的随机密码,并登录后及时修改。

命令行工具 (CLI)

白虎面板在环境内内置了同名的 baihu 命令行工具。如果您在终端内需要执行系统级别的操作,可以使用以下命令:

baihu server             # 以前台方式启动面板的后台进程服务(面板启动指令)
baihu reposync           # 供定时任务调用,将远程 Git 仓库的高级特性同步到本地目录中
baihu resetpwd           # 交互式重置系统 admin 账号密码(密码丢失时可通过进入终端重置)
baihu restore <file>     # 使用本地的 .zip 备份压缩包文件,一条命令直接全量恢复系统数据

终端执行 baihu 会直接打印内置支持的高级命令帮助列表。

数据目录

./
├── baihu                 # 可执行文件
├── data/                 # 数据目录(自动创建)
│   ├── baihu.db          # SQLite 数据库
│   └── scripts/          # 脚本文件存储
├── configs/
│   └── config.ini        # 配置文件(自动创建)
└── envs/                 # 运行环境挂载目录(自动创建)
    └── mise/             # Mise 运行时核心目录 (包含所有语言环境及依赖)

Docker 启动流程

容器启动时 docker-entrypoint.sh 会执行以下操作:

  1. 目录就绪:检查并创建 /app/data/app/configs/app/envs 等核心目录。
  2. Mise 环境同步:自动从镜像内置基础环境同步初始化文件至 /app/envs/mise,确保持久化挂载后运行时依然可用。
  3. 运行时激活
    • 自动注入 MISE_DATA_DIR 等环境变量,确保运行时数据指向持久化目录。
    • mise shims 路径加入系统 PATH,实现 Python、Node.js 等多版本环境的全局无感调用。
  4. 依赖管理预设:默认配置 Python 清华源(PIP)镜像,优化 Node.js 默认内存上限。
  5. 启动应用:运行 baihu 面板主进程。

提示:通过挂载 ./envs:/app/envs,您通过面板安装的所有编程语言运行时以及通过「依赖管理」安装的所有第三方库都会永久保留,容器升级或重启后无需重新安装。

配置说明

点击展开查看配置详情

配置文件

配置文件路径: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_

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

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

免责声明 ⚠️

白虎面板(Baihu Panel)仅作为一个轻量级的任务托管与调度平台,本项目及相关代码不提供、不内置任何具有实际业务逻辑的第三方脚本

在使用本项目时,请您务必知悉并同意以下条款:

  1. 脚本来源审核:请勿轻易执行任何来源不明或不可信的外部脚本。所有在平台上运行的脚本及代码均需由用户自行添加或配置,用户必须在执行前仔细阅读并审核其源代码,确保其安全性。
  2. 安全责任自负:本项目作为基础调度工具,无法且不保证任何被执行任务的安全性。因运行不安全、违规脚本带来的一切数据泄露、系统损坏、财产损失及法律责任等后果,均由使用者自行承担,与本项目及开发者无关。
  3. 软件按“原样”提供:本项目为业余开源开发,按“原样”提供,不保证不存在 Bug 或漏洞。开发者不对因使用本项目而引起的任何直接或间接损失负责。

贡献

欢迎提交 Issue 和 Pull Request!

许可证

MIT License

About

🐯轻量级定时任务管理系统,支持 Python, Node.js, Go, Rust, PHP 等所有主流语言的动态安装与多版本切换,,Docker/Compose 即用。A lightweight, high-performance cron panel built with Go & Vue 3.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors