Files
TaskPool/docs/guide/deployment.md
T
admin e6956aa001 Initial commit: TaskPool React panel
- React frontend with route-level code splitting
- Backend rebranded from Baihu to TaskPool
- DB brand migration script and local compatibility
2026-07-26 08:43:52 +08:00

182 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 快速部署
项目提供多种基础镜像,默认版本基于 Debian 12,集成了 Python 3.13 与 Node.js 23。
## 基础镜像选择
| 标签 (Tag) | 基础镜像 | 说明 |
| :--- | :--- | :--- |
| `latest` | Debian 12 | **默认推荐**:集成 Python 3.13 与 Node.js 23,开箱即用 |
| `latest-debian13` | Debian 13 | 尝鲜版本,基于 Debian Trixie |
| `latest-minimal` | Debian 13 | **最小化版**:不预置任何语言环境,仅内置 Mise,适合追求极致纯净的用户 |
> **提示**:目前默认使用 `latest` 标签。如需切换环境,只需将镜像名后的 `latest` 替换为 `latest-minimal`(极致纯净)或 `latest-debian13` 即可。
## 环境版本重构说明 (2026.02.13+)
> **警告**:架构升级破坏性变更
>
> 本版本(2026.02.13+)对底层运行时环境进行了彻底重构,弃用了原有的静态 Python/Node 环境,转为使用 **Mise** 进行动态版本管理。
>
> 1. **不再提供 Alpine 镜像**:由于 glibc 兼容性问题,Mise 无法在 Alpine 上完美运行,因此暂时取消 Alpine 镜像支持。
> 2. **环境数据不兼容**:如果您是从旧版本升级上来,原有的 Python/Node 环境数据将无法迁移。您需要清空挂载的 `envs/` 目录并让其由新容器自动初始化。
---
## 方式一:Docker 运行 (环境变量配置)
通过环境变量指定配置,简单灵活,适合一般部署。
### 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_ \
--restart unless-stopped \
ghcr.io/engigu/taskpool:latest
```
### 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_ \
--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
- ./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_
# - BH_SERVER_URL_PREFIX=/taskpool # 可选:配置 URL 前缀用于反向代理
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
restart: unless-stopped
```
---
## 方式三:配置文件挂载模式
通过挂载 `/app/configs/config.ini` 来管理详细配置。
### 配置文件挂载示例
```yaml
volumes:
- ./data:/app/data
- ./configs:/app/configs
- ./envs:/app/envs
```
---
## Docker 启动流程
容器启动时 `docker-entrypoint.sh` 会自动执行以下关键步骤:
1. **环境自检**:检查 `/app/data``/app/configs``/app/envs` 挂载点并创建必要子目录。
2. **Mise 同步**:自动将镜像内置的 Mise 核心运行时激活文件同步到持久化挂载目录中,确保容器重启后环境依然可用。
3. **运行时激活**:动态注入环境变量,将 `mise shims` 路径加入系统 `PATH`
4. **包管理预设**:自动为 Python 配置清华源 (PIP) 镜像,配置 Node.js 内存限制。
5. **主进程启动**:运行 `taskpool server` 开启面板。
> **提示**:通过持久化挂载 `./envs` 目录,您安装的所有运行时版本和第三方依赖库均会永久保留。
---
## 自动更新 Docker 镜像
如果您希望taskpool能够自动拉取最新镜像并无感更新,推荐使用 **Watchtower**。Watchtower 会定期检查被监控容器的基础镜像,当发现有新版本推送时,它会自动拉取新镜像、使用与原容器完全相同的配置重启容器。
由于taskpool采用持久化挂载(数据和环境都在外部),因此自动更新不会造成任何数据丢失。
### 方式一:独立一行命令运行 Watchtower(推荐)
执行以下命令,Watchtower 将会自动在每天凌晨 3 点自动检查并更新名为 `taskpool` 的容器:
```bash
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
-e TZ=Asia/Shanghai \
-e WATCHTOWER_SCHEDULE="0 0 3 * * *" \
-e WATCHTOWER_CLEANUP=true \
--restart unless-stopped \
containrrr/watchtower \
taskpool
```
> **参数说明**
> - 结尾处的 `taskpool` 为指定仅监控更新名为 `taskpool` 的容器。若不加此参数,则会自动更新宿主机上所有的 Docker 容器。
> - `WATCHTOWER_CLEANUP=true`:更新成功后自动删除旧版本的废弃镜像,防止存储空间被占满。
> - `WATCHTOWER_SCHEDULE`:设置定时检查的 Cron 表达式(秒 分 时 日 月 周)。
### 方式二:集成到 Docker Compose 中
您可以直接将 Watchtower 作为附加服务加入现有的 `docker-compose.yml` 中:
```yaml
services:
taskpool:
image: ghcr.io/engigu/taskpool:latest
container_name: taskpool
# ... 省略端口、挂载等其他配置 ...
watchtower:
image: containrrr/watchtower
container_name: watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Asia/Shanghai
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_SCHEDULE="0 0 3 * * *"
command: taskpool
restart: unless-stopped
```
修改完成后,执行 `docker compose up -d` 生效即可。