# 任务池 [![Hits](https://hits.sh/github.com/engigu/taskpool.svg?view=today-total)](https://hits.sh/github.com/engigu/taskpool/) ![Version](https://img.shields.io/github/v/tag/engigu/taskpool?color=44cc11&label=docker%20version&sort=semver) ![Image Size](https://ghcr-badge.egpl.dev/engigu/taskpool/size?color=%2344cc11&tag=latest&label=docker+image&trim=) ![Image pulls](https://img.shields.io/badge/dynamic/json?url=https://ghcr-badge.elias.eu.org/api/engigu/taskpool/taskpool&query=downloadCount&style=flat&label=docker%20pulls&color=44cc11) 任务池 (TaskPool) 是一款极致轻量、高性能的自动化任务调度平台。采用 Go + Vue3 架构,专注于高性能与低系统开销。通过深度集成 Mise 运行时管理,它原生支持 Python、Node.js、Go、Rust、PHP 等所有主流语言环境的动态安装(几乎所有的版本)与统一依赖管理。支持 Docker/Docker-Compose 一键部署,开箱即用,是您理想的轻量化脚本托管与任务调度解决方案。 演示站点(演示站点的服务器比较烂,见谅) [演示站点](https://taskpool-demo-site.qwapi.eu.org/) 文档说明 [文档说明](https://engigu.github.io/taskpool/) ## 更新日志 ☕ ### 最近更新 **2026.07.13** - **ZSTD 日志与任务排序**:流式日志升级至 ZSTD 压缩,支持 Zlib 兼容;上线依赖自动补全交互式终端;支持任务列表及移动端、视图联动排序;全局 ESC 非侵入式退出弹窗。 **2026.06.28** - **节点互联与终端 UX**:全面升级节点互联架构(支持变量同步、OpenConnect 协议及同步大屏);优化移动端终端交互,引入 Worker 边界防护防 OOM。 **2026.06.12** - **调度器与资源实时监控**:新增对面板运行资源、并发调度池(Worker)及内存堆栈的实时高频监控指标展示。 **2026.05.29** - **自定义前端 (WebUI)**:新增 WebUI 插件化管理机制,支持上传管理第三方前端包 (`.tar.gz`) 接管内置界面,支持深度主题化定制。详情请看[前端定制说明文档](docs/guide/webui.md) **2026.04.16** - **内建脚本助手库 (Built-in SDK)**:新增 Python 与 Node.js 的轻量化助手库,实现脚本内 “零代码配置” 通知投递;配套新增 `taskpool 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) 镜像支持 [查看完整更新日志](./CHANGELOG.md) ## 项目来由 多少和青龙面板有点关系,我自己也是青龙面板的使用者,但是现在的青龙面板性能我觉得有点难以接受。以我自己的使用(`机器1C2G`)为例,一个`python`的`requests`脚本每隔`30s`执行一次,有时候cpu执行的时候能跳变到`50%`以上。可以看看下面gif图片(如果不动,点击图片查看) ![qinglong.gif](https://f.pz.al/pzal/2025/12/24/2d245b0a77f26.gif) 我觉得一个内存和性能占用低的面板更合适自己,所以做了这个项目。 如果你和我一样需要一个性能和内存占用低的定时面板,这个项目你可以体验下。 同样的定时场景和代码,这个项目的情况如下(cpu执行定时跳变不超过`20%`): ![taskpool.gif](https://f.pz.al/pzal/2025/12/24/f0d171f9a686d.gif) 如果项目有用,请帮忙点个star。 ## 特色 - **轻量级:** docker/compose部署,无需复杂配置,开箱即用 - **任务调度:** 支持标准 Cron 表达式,常用时间规则快捷选择。日志不落文件,没有磁盘频繁io的问题 - **脚本管理:** 在线代码编辑器,支持文件上传、压缩包解压 - **在线终端:** WebSocket 实时终端,命令执行结果实时输出 - **消息推送:** 内置强大消息推送与通知引擎,无缝兼容主流渠道,支持系统级事件告警 - **机密管理:** **(New)** 类似 GitHub Secrets 的安全存储,支持 AES-GCM 加密,日志自动打码,仅在调度时注入 - **环境变量:** 存储普通配置,任务执行时自动注入 - **现代UI:** 响应式设计,深色/浅色主题切换 - **移动端:** 适配移动小屏样式 - **远程执行:** 支持远程agent执行任务,展示执行结果 - **多语言支持:** 深度集成 Mise,支持几乎所有主流编程语言的动态安装、多版本切换及依赖管理 - **内建助手库:** **(New)** 为 Python/Node.js 提供零配置助手库,简单 import 即可实现一键推信,无需手动管理 API Token 和 URL ## 功能特性
点击展开查看详细功能 ### 定时任务管理 - 支持标准 Cron 表达式调度 - 常用时间规则快捷选择 - 任务启用/禁用状态切换 - 手动触发执行 - 任务超时控制 ### 脚本文件管理 - 在线代码编辑器 - 文件树形结构展示 - 支持创建、重命名、删除文件/文件夹 - 支持压缩包上传解压 - 支持多文件批量上传 ### 在线终端 - WebSocket 实时终端 - 支持常用 Shell 命令 - 命令执行结果实时输出 ### 执行日志 - 任务执行历史记录 - 执行状态追踪(成功/失败/超时) - 执行耗时统计 - 日志内容压缩存储 - 日志自动清理 ### 消息推送与系统通知 - 原生内置各大主流平台渠道(钉钉、企业微信、Telegram、Server酱等) - 支持系统级事件条件触发通知(例如任务失败报警、服务下线提醒) - 自动生成跨语言调用 API 示例代码供脚本集成 ### 变量与机密 - 支持普通环境变量与安全机密(Secret)分类管理 - 机密使用 **AES-GCM** 加密存储,数据库不存明文 - 秘钥仅在内存中留存,启动读取后立即销毁(Unset) - 执行日志自动搜索并**屏蔽(********)**敏感机密内容 - 严格权限隔离:机密仅在定时任务调度时注入,终端/测试环境不可见 ### 节点互联体系 (New) - 支持 OpenConnect 协议,轻松实现多台任务池之间的互联互通 - 支持节点间的环境变量无缝同步(保留原有结构与 ID) - 集成同步管理控制台,统一查看与控制各节点状态与负载指标 - 底层路由深度适配穿透隧道,完美支持分布式前端代理访问 ### 仓库任务同步 (New) - 支持 青龙 仓库命令格式快捷导入 - 自动解析脚本注释中的 Cron 表达式和环境变量名 - 支持基于正则表达式的白名单、黑名单文件筛选 - 支持脚本依赖文件的识别与保留 - 自动同步远程 Git 仓库变更,增量更新面板任务 ### 系统设置 - 站点标题、标语、图标自定义 - 分页大小、Cookie 有效期配置 - 调度参数热重载 - 数据备份与恢复
## 支持语言脚本和依赖
点击展开查看已支持的语言及依赖管理详情 ### 脚本运行环境 任务池原生支持以下脚本的定时执行: - **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` 项目级别或工具安装 | ### 使用方法 1. **安装环境**:进入「编程语言」页面,使用 `mise` 一键安装所需的语言及版本。 2. **依赖管理**:在已安装列表点击「依赖管理」,输入名称(可选版本)即可自动在对应环境内完成安装。 3. **隔离机制**:系统基于 `mise exec` 实现了完善的环境隔离,不同版本的依赖包互不冲突。
## 效果图 ![taskpool-display.gif](https://raw.githubusercontent.com/engigu/resources/refs/heads/images/taskpool-display.gif) ## 快速部署 项目提供多种基础镜像,可根据具体环境选择: | 标签 (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** 进行动态版本管理。 > > 1. **不再提供 Alpine 镜像**:由于 glibc 兼容性问题,Mise 无法在 Alpine 上完美运行,因此暂时取消 Alpine 镜像支持。 > 2. **环境数据不兼容**:如果您是从旧版本升级上来,原有的 Python/Node 环境数据将无法迁移。升级后您需要: > - 清空或备份原有的 `envs/` 挂载目录 > - 启动新容器,让系统自动初始化新的 Mise 环境 > - 在面板中重新安装所需的语言和依赖
方式一:环境变量部署(推荐) 通过环境变量指定配置,简单灵活,适合容器编排场景。 **使用 SQLite(默认):** ```bash docker run -d \ --name taskpool \ -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/taskpool.db \ -e BH_DB_TABLE_PREFIX=taskpool_ \ -e TASKPOOL_SECRET_KEY=your_secret_key_here \ --restart unless-stopped \ ghcr.io/engigu/taskpool:latest ``` > **提示**:如需通过反向代理部署在子路径(如 `/taskpool`),添加环境变量: > ```bash > -e BH_SERVER_URL_PREFIX=/taskpool > ``` > 配置后访问地址为 `http://your-domain.com/taskpool/`,详见下方「URL 前缀配置」说明。 **Docker Compose(SQLite):** ```yaml services: taskpool: image: ghcr.io/engigu/taskpool:latest container_name: taskpool 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/taskpool.db - BH_DB_TABLE_PREFIX=taskpool_ - TASKPOOL_SECRET_KEY=your_secret_key_here # - BH_SERVER_URL_PREFIX=/taskpool # 可选:配置 URL 前缀用于反向代理 logging: driver: json-file options: max-size: "10m" max-file: "3" restart: unless-stopped ``` **使用 MySQL:** ```bash docker run -d \ --name taskpool \ -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=taskpool \ -e BH_DB_TABLE_PREFIX=taskpool_ \ -e TASKPOOL_SECRET_KEY=your_secret_key_here \ --restart unless-stopped \ ghcr.io/engigu/taskpool:latest ``` > **提示**:如需配置 URL 前缀,添加 `-e BH_SERVER_URL_PREFIX=/taskpool` **Docker Compose(MySQL):** ```yaml services: taskpool: image: ghcr.io/engigu/taskpool:latest container_name: taskpool 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=/taskpool # 可选:配置 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=taskpool - BH_DB_TABLE_PREFIX=taskpool_ - TASKPOOL_SECRET_KEY=your_secret_key_here logging: driver: json-file options: max-size: "10m" max-file: "3" restart: unless-stopped ```
方式二:配置文件部署 通过挂载 `config.ini` 配置文件来管理配置,适合需要持久化配置的场景。 **Docker 命令:** ```bash docker run -d \ --name taskpool \ -p 8052:8052 \ -v $(pwd)/data:/app/data \ -v $(pwd)/configs:/app/configs \ -v $(pwd)/envs:/app/envs \ -e TZ=Asia/Shanghai \ -e TASKPOOL_SECRET_KEY=your_secret_key_here \ --restart unless-stopped \ ghcr.io/engigu/taskpool:latest ``` **Docker Compose:** ```yaml services: taskpool: image: ghcr.io/engigu/taskpool:latest container_name: taskpool ports: - "8052:8052" volumes: - ./data:/app/data - ./configs:/app/configs - ./envs:/app/envs environment: - TZ=Asia/Shanghai - TASKPOOL_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`):** ```ini [server] port = 8052 host = 0.0.0.0 # 可选:配置 URL 前缀用于反向代理,例如 /taskpool url_prefix = # 全局会话 Cookie 名称 cookie_name = BHToken [database] type = sqlite path = ./data/taskpool.db table_prefix = taskpool_ ```
方式三:配合独立中心化消息服务部署(非必需/仅供参考) > 🎉 **好消息**:自任务池最新版本起,系统已**原生内置**了完整强大的消息推送功能!您可直接在面板「消息推送」菜单内绑定十余种主流渠道和系统通知事件,原配合外置的 `Message-Push-Nest` 部署方式已不再是使用面板的基础要求。您可随时直接使用上方的第一种简单命令开箱即用体验。 > > 以下「任务池 + 消息聚合服务」的联合部署内容被予以保留,专为仍然需要「中心化通知网关」的重度企业解耦用户作为参考: 任务池通过系统集成也可轻松连接独立的消息聚合服务。这里推荐使用 [Message-Push-Nest](https://github.com/engigu/Message-Push-Nest) 作为分布式的统一消息推送中心。 **使用 SQLite** 创建 `docker-compose.yml` 文件: ```yaml services: # 任务池 taskpool: image: ghcr.io/engigu/taskpool:latest container_name: taskpool 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/taskpool.db - BH_DB_TABLE_PREFIX=taskpool_ - TASKPOOL_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` 文件: ```yaml services: # 任务池 taskpool: image: ghcr.io/engigu/taskpool:latest container_name: taskpool 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=taskpool - BH_DB_TABLE_PREFIX=taskpool_ - TASKPOOL_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 ``` 启动服务: ```bash docker-compose up -d ``` **访问地址:** - 任务池:http://localhost:8052 - 消息推送服务:http://localhost:8053 > 注意:使用 MySQL 方式时,请先在 MySQL 中创建 `taskpool` 和 `message_nest` 两个数据库,并修改配置中的 MySQL 地址和密码。也可以使用同一个数据库。 **在任务中使用推送** 如今你无需依赖任何外部服务,可以通过面板自身完成: 1. 进入任务池「消息推送」模块,新建你需要通知的渠道。 2. 可以在「事件绑定」中直接设定**自动化系统通知**(如监控任务失败或脚本异常中止时进行自动提醒)。 3. 如需在自己的脚本逻辑内动态推送,可以点击「脚本调用」页面,立刻获取一键调用的 Shell / API 代码,内嵌进你的业务逻辑中即可完成推信! *(如继续使用 `Message-Push-Nest`,你可以通过其管理界面中「消息模板」的「复制推送代码」提取旧有版集成样例。)* ![1768143124572.png](https://f.pz.al/pzal/2026/01/11/1360cd334ff20.png) > 提示:在 Docker Compose 部署的环境中,推送服务地址使用 `http://message-nest:8000`(容器内部通信)。如果是独立部署,请使用实际的服务地址。
> 环境变量优先级高于配置文件,两种方式可以混合使用。
方式四:Nginx 反向代理部署(HTTPS) 如果需要通过域名和 HTTPS 访问任务池,可以使用 Nginx 作为反向代理。 **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 $http_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 配置:** ```bash nginx -t && nginx -s reload ```
### 访问面板 启动后访问:http://localhost:8052 **默认账号:** 用户名 `admin`,密码见启动日志(首次启动会自动生成 12 位随机密码并打印在日志中) > **注意**:出于安全性考虑,系统不再使用固定默认密码。请在容器启动日志中搜索 `管理员账号创建成功` 找到您的随机密码,并登录后及时修改。
命令行工具 (CLI) 任务池在环境内内置了同名的 `taskpool` 命令行工具。如果您在终端内需要执行系统级别的操作,可以使用以下命令: ```bash taskpool server # 以前台方式启动面板的后台进程服务(面板启动指令) taskpool reposync # 供定时任务调用,将远程 Git 仓库的高级特性同步到本地目录中 taskpool resetpwd # 交互式重置系统 admin 账号密码(密码丢失时可通过进入终端重置) taskpool restore # 使用本地的 .zip 备份压缩包文件,一条命令直接全量恢复系统数据 ``` 终端执行 `taskpool` 会直接打印内置支持的高级命令帮助列表。
### 数据目录 ``` ./ ├── taskpool # 可执行文件 ├── data/ # 数据目录(自动创建) │ ├── taskpool.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. **启动应用**:运行 `taskpool` 面板主进程。 > **提示**:通过挂载 `./envs:/app/envs`,您通过面板安装的所有编程语言运行时以及通过「依赖管理」安装的所有第三方库都会永久保留,容器升级或重启后无需重新安装。 ## 配置说明
点击展开查看配置详情 ### 配置文件 配置文件路径:`configs/config.ini` ```ini [server] port = 8052 host = 0.0.0.0 url_prefix = [database] type = sqlite host = localhost port = 3306 user = root password = dbname = bh_panel table_prefix = taskpool_ ``` ### 环境变量 所有配置项都支持通过环境变量覆盖,环境变量优先级高于配置文件: | 环境变量 | 对应配置 | 说明 | 默认值 | |----------|----------|------|--------| | `BH_SERVER_PORT` | server.port | 服务端口 | 8052 | | `BH_SERVER_HOST` | server.host | 监听地址 | 0.0.0.0 | | `BH_SERVER_URL_PREFIX` | server.url_prefix | URL 前缀,用于反向代理子路径部署 | - | | `BH_COOKIE_NAME` | server.cookie_name | 全局会话 Cookie 名称 | BHToken | | `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 | 数据库名称 | bh_panel | | `BH_DB_PATH` | database.path | SQLite 文件路径 | ./data/taskpool.db | | `BH_DB_TABLE_PREFIX` | database.table_prefix | 表前缀 | taskpool_ | | `TASKPOOL_SECRET_KEY` | - | 系统加密秘钥,用于机密功能(**注:仅支持环境变量设置,不支持配置文件**) | - | ### URL 前缀配置 如果需要通过反向代理(如 Nginx)将任务池部署在子路径下,可以配置 URL 前缀。 **配置方式:** ```bash # 方式一:配置文件 [server] url_prefix = /taskpool # 方式二:环境变量 -e BH_SERVER_URL_PREFIX=/taskpool ``` **配置效果:** 配置 `url_prefix = /taskpool` 后,访问路径变为: | 类型 | 路径示例 | |------|---------| | 前端页面 | `http://your-domain.com/taskpool/` | | 登录页面 | `http://your-domain.com/taskpool/login` | | 任务管理 | `http://your-domain.com/taskpool/tasks` | | API 接口 | `http://your-domain.com/taskpool/api/v1/*` | | WebSocket | `ws://your-domain.com/taskpool/api/v1/terminal/ws` | **Nginx 反向代理配置示例:** ```nginx location /taskpool/ { proxy_pass http://localhost:8052/taskpool/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_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 | 修改调度设置后立即生效,无需重启服务。
## 免责声明 ⚠️ 任务池(TaskPool)仅作为一个轻量级的任务托管与调度平台,本项目及相关代码**不提供、不内置任何具有实际业务逻辑的第三方脚本**。 在使用本项目时,请您务必知悉并同意以下条款: 1. **脚本来源审核**:请勿轻易执行任何来源不明或不可信的外部脚本。所有在平台上运行的脚本及代码均需由用户自行添加或配置,用户必须在执行前仔细阅读并审核其源代码,确保其安全性。 2. **安全责任自负**:本项目作为基础调度工具,**无法且不保证任何被执行任务的安全性**。因运行不安全、违规脚本带来的一切数据泄露、系统损坏、财产损失及法律责任等后果,均由使用者自行承担,与本项目及开发者无关。 3. **软件按“原样”提供**:本项目为业余开源开发,按“原样”提供,**不保证不存在 Bug 或漏洞**。开发者不对因使用本项目而引起的任何直接或间接损失负责。 ## 贡献 欢迎提交 Issue 和 Pull Request!如果觉得本项目对你有帮助,不求大富大贵,只求顺手点个 Star,大家的 Star 是我持续更新的动力! ## 许可证 本项目采用 [Apache License 2.0](LICENSE) 协议发布,并包含额外的 [NOTICE](NOTICE) 说明。 **强制要求:** 在任何分发、修改或二次开发中,**必须完整保留原作者署名及项目名称**(详见 NOTICE 文件)。