项目管理与问题跟踪看板Scrumboy

简介

什么是 Scrumboy ?

Scrumboy 是一个开源的自托管项目管理与看板解决方案,支持即时分享和可定制的看板、实时协作、自动化、API 访问以及 MCP 兼容的 AI 助手客户端支持。它可以帮助团队和个人通过看板方式管理任务和项目,无需依赖第三方 SaaS 服务,保护数据隐私。

主要特点

  • 看板管理:支持自定义工作流程,每个项目可以创建任意组合的工作列,包括用户定义的「完成」列
  • 实时协作:基于 SSE 的看板支持多用户操作的即时更新
  • API 与 MCP 集成:支持 API 访问令牌和 MCPModel Context ProtocolJSON-RPC 端点,便于 AI 代理和自动化脚本调用
  • Webhooks:支持注册 Webhook URL,当指定事件发生时自动 POST JSON 到目标服务器
  • 标签系统:用户可以继承和自定义标签颜色
  • 高级筛选:支持基于文本或标签搜索待办事项
  • Sprint 支持:可创建、激活、关闭 Sprint,支持看板 Sprint 筛选
  • 认证与 2FA:支持本地密码认证和 TOTP 两步验证(需要设置加密密钥)
  • 审计追踪:记录所有操作到审计日志表
  • 备份导出:支持导出/导入 JSON,可选择合并或替换模式
  • PWA 支持:支持安装为独立 Web 应用,提供更好的移动端体验和后台推送通知
  • 匿名看板:支持创建可分享的匿名看板,无需登录即可访问和编辑
  • 开源免费:基于 AGPL v3 协议开源,可免费使用和修改

应用场景

  • 个人任务管理:个人用户可以使用 Scrumboy 管理日常待办事项和项目进度
  • 小团队协作:小型团队可以通过看板方式分配任务、追踪进度,实现实时协作
  • 隐私敏感场景:对数据隐私有要求的用户可以自托管,确保数据完全可控
  • 开发者集成:开发者可以通过 APIMCP 集成自动化工作流,或接入 AI 助手辅助项目管理

Scrumboy 是一个轻量级但功能强大的自托管项目管理工具,结合了轻量看板的简洁性和结构化系统的功能,适合追求数据隐私和自托管的团队和个人使用。

安装

在群晖上以 Docker 方式安装。

由于镜像托管在 ghcr.io,群晖 Docker 套件无法直接搜索,需要通过 SSH 拉取镜像再进行部署。

镜像拉取

首先通过 SSH 登录群晖,拉取镜像:

1
2
# 登录群晖后,拉取镜像
docker pull ghcr.io/markrai/scrumboy:latest

docker cli 安装

如果你熟悉命令行,可能用 docker cli 更快捷

1
2
3
4
5
6
7
8
9
10
11
12
13
docker run -d \
--name=scrumboy \
--restart=unless-stopped \
-p 8326:8080 \
-v /volume1/docker/scrumboy/data:/data \
-e BIND_ADDR=:8080 \
-e DATA_DIR=/data \
-e SQLITE_PATH=/data/app.db \
-e SQLITE_BUSY_TIMEOUT_MS=5000 \
-e SQLITE_JOURNAL_MODE=WAL \
-e SQLITE_SYNCHRONOUS=FULL \
-e MAX_REQUEST_BODY_BYTES=1048576 \
ghcr.io/markrai/scrumboy:latest

环境变量

完整的环境变量说明可以参考:https://github.com/markrai/scrumboy#config

变量 默认值(来自代码)
BIND_ADDR :8080
DATA_DIR ./data
SQLITE_PATH (空;随后使用 $DATA_DIR/app.db
SQLITE_BUSY_TIMEOUT_MS 30000
SQLITE_JOURNAL_MODE WAL
SQLITE_SYNCHRONOUS FULL
MAX_REQUEST_BODY_BYTES 1048576 (1 MiB)
SCRUMBOY_MODE full(或 anonymous)
SCRUMBOY_ENCRYPTION_KEY (空)—— 2FA 必需。Base64 编码的 32 字节密钥。可使用 openssl rand -base64 32 生成。若未设置,2FA 配置将返回 503。
SCRUMBOY_TLS_CERT ./cert.pem —— HTTPS 使用的 TLS 证书
SCRUMBOY_TLS_KEY ./key.pem —— HTTPS 使用的 TLS 私钥
SCRUMBOY_INTRANET_IP 192.168.1.250 —— 用于记录内网访问的 LAN IP
SCRUMBOY_VAPID_PUBLIC_KEY (空)—— Web Push。VAPID 公钥(URL-safe base64)。需与私钥同时设置,用于 PWA 后台任务通知以及 SPA 登录后自动订阅。
SCRUMBOY_VAPID_PRIVATE_KEY (空)—— VAPID 私钥(URL-safe base64)。
SCRUMBOY_VAPID_SUBSCRIBER (空)—— VAPID JWT sub 的联系方式(不绑定 IdP)。请使用纯邮箱(例如 ops@example.com),服务器会自动加上 mailto: 前缀。也可显式设置完整的 mailto:...https://... URL。若未设置,将使用内置默认值。
SCRUMBOY_DEBUG_PUSH (空)—— 设置为 1 可在服务器端记录推送发送/清理日志。
  1. Full 模式(默认):第一个访问的用户会自动成为管理员(Bootstrap 用户),系统会提示设置密码
  2. Anonymous 模式:如果设置 SCRUMBOY_MODE=anonymous,则无需登录,面向公共分享场景
  3. 可选配置:如需使用 2FA 功能,需要设置 SCRUMBOY_ENCRYPTION_KEY 环境变量,可使用 openssl rand -base64 32 生成

docker-compose 安装

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
version: '3'

services:
scrumboy:
image: ghcr.io/markrai/scrumboy:latest
container_name: scrumboy
restart: unless-stopped
ports:
- "8326:8080"
volumes:
- ./data:/data
environment:
- BIND_ADDR=:8080
- DATA_DIR=/data
- SQLITE_PATH=/data/app.db
- SQLITE_BUSY_TIMEOUT_MS=5000
- SQLITE_JOURNAL_MODE=WAL
- SQLITE_SYNCHRONOUS=FULL
- MAX_REQUEST_BODY_BYTES=1048576

执行以下命令启动:

1
2
3
4
5
6
7
8
9
10
# 新建文件夹 scrumboy 和子目录
mkdir -p /volume1/docker/scrumboy/data

# 进入 scrumboy 目录
cd /volume1/docker/scrumboy

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中访问 http://<群晖IP>:8326 即可进入注册界面

  • Name:姓名,例如:laosu
  • Email:邮件,例如:wbsu2003@gmail.com
  • Password:密码,例如:123456

自动进入主界面

待办事项

填入项目名称,点 Create,在创建项目之前,还需要先配置泳道

  • Backlog:待办事项
  • Not Started:未开始
  • In Progress:进行中
  • Testing:测试
  • Done:完成

老苏没有增加,使用的是默认的泳道

点右上角的 New Todo 可以开始添加待办事项

【注意】: Tags 不能使用中文,保存时会报错

添加成功之后

最后上一张官方的效果图

MCP

第一步、获取 scrumboy_session

在浏览器登录后,可以从浏览器开发者工具(Application 面板)复制 scrumboy_session 的值

或者 (Network 面板)复制 Cookiescrumboy_session

第二步、获取 Token

1
2
3
4
5
6
7
8
9
10
11
12
13
# 生成 TOKEN
curl -X POST http://<群晖IP>:8326/api/me/tokens \
-H "Content-Type: application/json" \
-H "Cookie: scrumboy_session=这里填你的真实session值" \
-H "X-Scrumboy: 1" \
-d '{"name": "synology-cli"}'

# 示例
curl -X POST http://192.168.0.197:8326/api/me/tokens \
-H "Content-Type: application/json" \
-H "Cookie: scrumboy_session=4yesp5qQDRtJn2cujK6GNRHIDEiGOwgQ69mLFDNfOW0" \
-H "X-Scrumboy: 1" \
-d '{"name": "synology-cli"}'

第三步、调用 MCP 接口,例如获取项目列表

1
2
3
4
5
6
7
8
9
10
11
# 获取项目
curl -X POST http://<群晖IP>:8326/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sb_YOUR_TOKEN" \
-d '{"tool":"projects.list","input":{}}'

# 示例
curl -X POST http://192.168.0.197:8326/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sb_pklA4kYjdx711kQKxe0dOGSen2PP8mUuTymiqFlUX9Y" \
-d '{"tool":"projects.list","input":{}}'

更多使用方法,请参考官方文档: https://github.com/markrai/scrumboy/blob/main/docs/mcp.md

注意事项

  1. 首次用户权限Full 模式下,第一个访问并创建账号的用户自动成为 Owner 角色,拥有最高权限
  2. 数据持久化:数据存储在 ./data 目录下的 app.db 文件中,升级容器前建议备份数据
  3. 端口冲突:如果 8326 端口已被占用,请修改 docker-compose.yml 中的本地端口
  4. 安全建议:在生产环境建议配置 HTTPS(需要设置 SCRUMBOY_TLS_CERTSCRUMBOY_TLS_KEY),或通过反向代理提供 HTTPS 访问
  5. 加密密钥:如果已有数据库包含启用 2FA 的用户,启动时不设置 SCRUMBOY_ENCRYPTION_KEY 会导致启动失败
  6. 匿名模式:如果使用匿名模式创建的分享链接,任何知道链接的人都可以查看和编辑看板内容

参考文档

Scrumboy: Self-hosted project management & Kanban solution
地址:https://github.com/markrai/scrumboy

Scrumboy 官方演示网站
地址:https://scrumboy.com

Scrumboy Docker 镜像
地址:https://ghcr.io/markrai/scrumboy