白虎面板 (Baihu Panel) 是一款极致轻量、高性能的自动化任务调度平台。采用 Go + Vue3 架构,专注于高性能与低系统开销。通过深度集成 Mise 运行时管理,它原生支持 Python、Node.js、Go、Rust、PHP 等所有主流语言环境的动态安装(几乎所有的版本)与统一依赖管理。支持 Docker/Docker-Compose 一键部署,开箱即用,是您理想的轻量化脚本托管与任务调度解决方案。
演示站点(演示站点的服务器比较烂,见谅) 演示站点
文档说明 文档说明
2026.06.28 - 节点互联大更新与终端UX优化:全面升级节点互联功能体系(支持环境变量全量同步、OpenConnect 协议及全新同步面板);深度优化移动端下 XTerminal 流畅性与原生交互体验,并加入 Worker 数量防 OOM 边界安全检查。
2026.06.12 - 调度器与面板资源监控:新增对面板底层运行资源、调度器并发池(Worker)运行情况以及底层内存堆栈的实时高频监控。
2026.05.29 - 自定义前端框架 (WebUI):新增前端定制管理机制,支持开发和上传第三方前端静态资源包 (.tar.gz / .zip),完全无缝接管并替换内置的系统面板界面,支持实现深度主题化定制。详情请看前端定制说明文档
2026.04.16 - 内建脚本助手库 (Built-in SDK):新增 Python 与 Node.js 的轻量化助手库,实现脚本内 “零代码配置” 通知投递;配套新增 baihu builtininstall 自动化安装命令。
2026.04.14 - PWA 与通知渠道增强:支持 PWA (Progressive Web App) 动态配置,站点标题与图标可由后端实时控制;新增 VoceChat 通知渠道支持;增强 Bark 推送,支持自建服务器配置。
2026.03.27 - 安全机密管理 (GitHub Secrets 风格):新增系统级机密(Secret)管理功能。支持 AES-GCM 工业级加密存储,秘钥内存留存销毁;支持执行日志自动脱敏打码;支持仅在计划任务调度时按需注入,终端与测试运行物理隔离,全面提升敏感配置安全性。
2026.03.19 - 仓库同步增强:新增对青龙仓库格式指令的深度兼容,支持从远程 Git 仓库自动同步脚本并基于注释解析自动创建面板任务,支持白名单、黑名单、依赖保留等高级筛选特性。
2026.03.05 - API 文档重构 重构 OpenAPI 认证体系,支持站点级 Token 配置与 Basic Auth 保护。
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)为例,一个python的requests脚本每隔30s执行一次,有时候cpu执行的时候能跳变到50%以上。可以看看下面gif图片(如果不动,点击图片查看)

我觉得一个内存和性能占用低的面板更合适自己,所以做了这个项目。
如果你和我一样需要一个性能和内存占用低的定时面板,这个项目你可以体验下。
同样的定时场景和代码,这个项目的情况如下(cpu执行定时跳变不超过20%):

如果项目有用,请帮忙点个star。
点击展开查看详细功能
点击展开查看已支持的语言及依赖管理详情
白虎面板原生支持以下脚本的定时执行: - Python3, Node.js, Bash (标准版镜像内置环境) - 通过 Mise 扩展:支持几乎所有主流编程语言的动态安装与切换。 - Minimal 版:不预置 Python/Node,仅内置 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 项目级别或工具安装 |
mise 一键安装所需的语言及版本。mise exec 实现了完善的环境隔离,不同版本的依赖包互不冲突。
项目提供多种基础镜像,可根据具体环境选择:
| 标签 (Tag) | 基础镜像 | 说明 |
|---|---|---|
latest |
Debian 12 | 默认推荐:集成 Python 3.13 与 Node.js 23,开箱即用 |
latest-debian13 |
Debian 13 | 尝鲜版本,基于 Debian Trixie |
latest-minimal |
Debian 13 | 最小化版:不预置语言环境,由用户通过面板自主按需安装 |
提示:下方部署示例默认使用
latest标签,如需换用 Debian 13 版,只需将latest替换为latest-debian13即可。警告:架构升级破坏性变更
本版本(2026.02.13+)对底层运行时环境进行了彻底重构,弃用了原有的静态 Python/Node 环境,转为使用 Mise 进行动态版本管理。
- 不再提供 Alpine 镜像:由于 glibc 兼容性问题,Mise 无法在 Alpine 上完美运行,因此暂时取消 Alpine 镜像支持。
- 环境数据不兼容:如果您是从旧版本升级上来,原有的 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_ \
-e BAIHU_SECRET_KEY=your_secret_key_here \
--restart unless-stopped \
ghcr.io/engigu/baihu:latest
提示:如需通过反向代理部署在子路径(如
/baihu),添加环境变量:bash -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_
- BAIHU_SECRET_KEY=your_secret_key_here
# - 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_ \
-e BAIHU_SECRET_KEY=your_secret_key_here \
--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_
- BAIHU_SECRET_KEY=your_secret_key_here
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 \
-e BAIHU_SECRET_KEY=your_secret_key_here \
--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
- BAIHU_SECRET_KEY=your_secret_key_here
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
restart: unless-stopped
首次使用需要复制 configs/config.example.ini 为 configs/config.ini,然后根据需要修改配置。
配置文件示例(configs/config.ini):
[server]
port = 8052
host = 0.0.0.0
# 可选:配置 URL 前缀用于反向代理,例如 /baihu
url_prefix =
# 全局会话 Cookie 名称
cookie_name = BHToken
[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_
- BAIHU_SECRET_KEY=your_secret_key_here
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_
- BAIHU_SECRET_KEY=your_secret_key_here
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
访问地址: - 白虎面板:http://localhost:8052 - 消息推送服务:http://localhost:8053
注意:使用 MySQL 方式时,请先在 MySQL 中创建
baihu和message_nest两个数据库,并修改配置中的 MySQL 地址和密码。也可以使用同一个数据库。
在任务中使用推送
如今你无需依赖任何外部服务,可以通过面板自身完成: 1. 进入白虎面板「消息推送」模块,新建你需要通知的渠道。 2. 可以在「事件绑定」中直接设定自动化系统通知(如监控任务失败或脚本异常中止时进行自动提醒)。 3. 如需在自己的脚本逻辑内动态推送,可以点击「脚本调用」页面,立刻获取一键调用的 Shell / API 代码,内嵌进你的业务逻辑中即可完成推信!
(如继续使用 Message-Push-Nest,你可以通过其管理界面中「消息模板」的「复制推送代码」提取旧有版集成样例。)

提示:在 Docker Compose 部署的环境中,推送服务地址使用
http://message-nest:8000(容器内部通信)。如果是独立部署,请使用实际的服务地址。环境变量优先级高于配置文件,两种方式可以混合使用。
方式四:Nginx 反向代理部署(HTTPS)
如果需要通过域名和 HTTPS 访问白虎面板,可以使用 Nginx 作为反向代理。
Nginx 配置示例:
```nginx
map $http_upgrade $connection_upgrade { default upgrade; '' close; }
$ claude mcp add baihu-panel \
-- python -m otcore.mcp_server <graph>