SSD Nodes Learn 🎉 VPS $4.99/月起
指南 Matt Connor作者: Matt Connor · 更新于 2026-08-07

自托管 Trello 替代方案对比:Planka、Vikunja 等

对比 Planka、Vikunja、Focalboard、Wekan 和 Kanboard 的最低内存、数据库、SSO、Trello 导入及维护状态,并说明 Wekan 为何会因退出码 137 重启。

应选择哪款自托管 Trello 替代方案?

有 3 款自托管 Trello 替代方案值得考虑:如果您需要与 Trello 完全一致的看板及其导入文件,应选择 Planka;团队需要单点登录和超出看板范围的功能时,应选择 Vikunja;VPS(虚拟专用服务器)配置较低时,应选择 Kanboard。不要在 Focalboard 上启动新项目。其独立服务器已有 783 天未发布新版本,README 现在还在寻求维护者。

Wekan 是这里介绍的 5 款工具中的第 5 款。它可以正常运行,但内存占用是其他工具总和的数倍。下文列出的每个版本、许可证和日期均已于 5 August 2026 核实。

每个看板工具需要多少 RAM?

ChartTypical idle memory per stack in MB, Docker on Ubuntu 24.04
The data behind this chart
[
  {
    "tool": "Planka + Postgres",
    "idle_memory_mb": 280
  },
  {
    "tool": "Vikunja + SQLite",
    "idle_memory_mb": 110
  },
  {
    "tool": "Focalboard + SQLite",
    "idle_memory_mb": 120
  },
  {
    "tool": "Wekan + FerretDB",
    "idle_memory_mb": 750
  },
  {
    "tool": "Kanboard + SQLite",
    "idle_memory_mb": 70
  }
]

这些是全新安装且没有用户使用时的典型空闲值。也就是整个堆栈启动后一分钟,docker stats 报告的数值。可以用它们估算方案所需资源,但仍应测量自己的实际值。内存占用趋势比精确的 MB 数值更重要。

Kanboard 的最低值为 70 MB,因为它使用 PHP 和 SQLite。没有长期运行的应用进程将看板保存在内存中,因此容器在请求之间几乎不占用内存。Vikunja 是一个 Go 二进制程序,占用 110 MB。SQLite 是其默认数据库,因此一个容器就包含整个堆栈。Planka 需要 280 MB,因为它始终包含两个容器:Node 服务器和 PostgreSQL。Planka 不支持 SQLite,因此数据库无法替换。

Wekan 占用 750 MB,因为它是 Meteor 应用。Meteor 会在 Node 内存中维护实时查询层,并通过 WebSocket 将每次看板变更推送给所有打开看板的浏览器。因此,它的内存占用会随连接用户数增加,而不是保持不变。在 1 GB VPS 上,Wekan 可以启动,但几个人打开大型看板后就会退出。其表现是容器消失后重新启动,并返回退出码 137;docker compose ps 会将其显示为重启循环。请在主机上使用 dmesg -T | grep -i "out of memory" 确认,因为内核的 out-of-memory killer 不会向应用报告任何信息。

数据库依赖关系决定了备份工作的一半内容,下面每个工具用一句话说明。Planka 需要 PostgreSQL。Vikunja 默认使用 SQLite,也支持 PostgreSQL 和 MySQL 或 MariaDB。Kanboard 默认使用 SQLite,也支持 MySQL、MariaDB 和 PostgreSQL;其文档推荐使用 PostgreSQL,并警告不要在 NFS(网络文件系统)上使用 SQLite。Focalboard 默认使用 SQLite。Wekan 使用 MongoDB wire protocol;其默认 Compose 文件现在随附使用内置 SQLite 后端的 FerretDB v1,而不是真正的 MongoDB 服务器。如果需要 MongoDB,可使用单独的 MongoDB 7 Compose 文件。

哪些项目仍在维护?

ChartAge of the newest stable release in days, checked 5 August 2026
The data behind this chart
[
  {
    "tool": "Planka 2.1.1",
    "release_age": 109
  },
  {
    "tool": "Vikunja 2.5.0",
    "release_age": 1
  },
  {
    "tool": "Focalboard 8.0.0",
    "release_age": 783
  },
  {
    "tool": "Wekan 10.67",
    "release_age": 1
  },
  {
    "tool": "Kanboard 1.2.53",
    "release_age": 12
  }
]

Focalboard 是其中的例外,距上次发布已有 783 天。它最后一个独立版本 v8.0.0 发布于 2024 年 6 月。Mattermost 已将看板开发迁移到另一个仓库中的插件,独立版本 README 也说明该仓库目前无人维护。这是本次比较中唯一明确的“否”。其他项目各有取舍。

对于每年发布几个版本的项目来说,Planka 的 109 天处于正常范围。2.1.1 版本发布于 2026 年 4 月。Kanboard 在检查前 12 天发布了 v1.2.53,此前的两个版本分别于 2026 年 3 月和 4 月发布。

Vikunja 和 Wekan 都在检查前 1 天内发布了版本,但应以不同方式解读这两个事实。Vikunja 将 v2.5.0 标记为常规次要版本。Wekan 在同一天标记了 v10.65、v10.66 和 v10.67,这符合其正常发布节奏。频繁发布不代表版本目标稳定。选择 Wekan 就意味着要跟踪快速变化的版本号,因此应固定 tag,并在每次升级前阅读变更说明。

获得的不只是看板?

大多数对比文章只会说“看起来像 Trello”。但对于任何带有截止日期的工作,看板并不是合适的数据形态,因此这一维度比内存更重要。

  • Planka 只是看板工具:项目、看板、列表、卡片、标签、清单、评论和附件。截至 2026 年 8 月,日历视图和地图视图属于 Pro 功能。
  • Vikunja 为同一组任务提供 4 种视图:列表、Kanban、表格和 Gantt。每个任务只存在一次,您可以切换视图,而不必复制任务。
  • Kanboard 提供带有在制品限制的看板,以及子任务、附件、评论、自动操作和用于筛选的小型查询语言。其官网称“功能数量是有意限制的”,这是一个准确的描述。
  • Wekan 提供带泳道的看板,以及清单、自定义字段、REST(表述性状态转移)API 和 Webhook。
  • Focalboard 曾为同一组卡片提供看板、表格和日历视图。这里列出它是为了完整性。

如果您实际需要的是附带一些任务跟踪功能的 Wiki,那么这不是合适的对比。BookStack、Wiki.js 和 Outline介绍了这种形态,自托管的 Notion 替代方案则介绍一体化工作区。

多用户访问和单点登录

Planka 的免费 Community 版本支持 OpenID Connect。官方 Compose 文件中已将相关设置注释掉,其中包括 OIDC_ISSUEROIDC_CLIENT_IDOIDC_CLIENT_SECRET,因此只需取消注释,无需升级。为组织外部人员提供访客角色属于 Pro 功能。

Vikunja 可同时支持多个 OpenID Connect 提供商。设置 VIKUNJA_AUTH_OPENID_ENABLED=true,然后为每个提供商添加一个 VIKUNJA_AUTH_OPENID_PROVIDERS_<ID>_* 变量块。它还支持团队和按项目共享,这正是一个拥有 20 人的组织实际需要的功能。

Wekan 支持 LDAP(轻量级目录访问协议)、OAuth2、OIDC 和 SAML。Kanboard 内置 LDAP 支持,并通过通用 OAuth2 插件支持其他身份提供商;此外,它还支持按项目设置角色和组。Focalboard 的独立服务器完全不支持单点登录,这是不选择它的另一个原因。

这些应用都可以与自行运行的 Authentik 身份提供商配合使用。通常,与其让 20 个人为每个应用分别设置密码,这种方式更合适。

可以导入 Trello 看板吗?

Planka 提供了最简单的迁移路径。先将看板从 Trello 导出为 JSON,然后在 Planka 中创建看板,点击 Import 并选择 Trello。请先阅读限制,因为这些限制确实存在:不会导入用户和附件,每张卡片最多只能导入一个检查清单;此外,Trello 的默认 JSON 导出会在 1,000 个操作处停止,而且不会警告文件已被截断。请自行检查文件,再确认导入结果可信。

Vikunja 通过 Trello 的 OAuth 流程导入,入口位于 Settings,然后选择“从其他服务导入”。每个迁移器都必须先在配置中启用,其图标才会显示;VIKUNJA_SERVICE_PUBLICURL 必须正确,因为 OAuth 重定向发生在您的浏览器中,而不是服务器上。Vikunja 还支持导入 Todoist、Microsoft To Do、TickTick 和 Wekan。

Wekan 可在导入表单中粘贴 Trello 看板 JSON。Kanboard 没有内置的 Trello 导入器。如果您需要迁移多年的 Trello 历史数据,这是跳过 Kanboard 的主要原因。

移动端体验如何?

Vikunja 是这五个项目中唯一提供官方移动应用的项目。Android 和 iOS 版本会随每个版本一同发布,但应用仓库将自身描述为 alpha 版本,因此应将其视为 Web 界面的辅助工具,而不是主要访问方式。Planka 没有项目官方提供的应用,但其 Web 界面支持响应式布局,也有第三方客户端。Wekan 和 Kanboard 仅支持 Web 访问,而 Kanboard 的界面明显是为桌面屏幕设计的。

许可问题,以及 Planka 的不同之处

Planka 不再是开源软件,这是大多数对比文章遗漏的事实。它最初采用 MIT 许可,2023 年改用 AGPL-3.0;从 2.0 系列开始,则采用 PLANKA Software GmbH 持有的 PLANKA Community License,这是一种 fair-code 许可。GitHub 将其许可标记为“Other”,因为该许可未获 OSI 批准。为自己的人员自行托管该软件是免费的,并且明确允许用于个人、内部、非营利和教育用途。向他人转售访问权限,或将其作为服务提供给其他公司,则需要商业许可。

对于两个人的使用场景,这是一项合理的许可安排。但对于公司而言,在让二十个人投入工作之前,应先阅读这项条款。其他四款软件都采用常见的开源许可:Vikunja 采用 AGPL-3.0,Wekan 和 Kanboard 采用 MIT,Focalboard 则同时采用 Apache 2.0 和 AGPL-3.0。

两个候选方案的固定版 Compose 文件

固定镜像标签。latest表示下一次执行 docker compose pull 时可能跨越主版本,而主版本会执行难以回滚的数据库迁移。下面的两个文件均来自上游项目,并已将标签固定到实际发布版本。

使用 SQLite 的 Vikunja,单容器:

services:
  vikunja:
    image: vikunja/vikunja:2.5.0
    restart: unless-stopped
    environment:
      VIKUNJA_SERVICE_PUBLICURL: https://tasks.example.com
      VIKUNJA_SERVICE_SECRET: replace-with-a-long-random-string
      VIKUNJA_SERVICE_TIMEZONE: Europe/Berlin
      VIKUNJA_DATABASE_TYPE: sqlite
      VIKUNJA_DATABASE_PATH: /app/vikunja/files/vikunja.db
    ports:
      - "127.0.0.1:3456:3456"
    volumes:
      - ./files:/app/vikunja/files

先创建数据目录并设置正确的所有者,因为容器以 UID 1000 运行,无法写入 root 所有的目录:

mkdir -p files && sudo chown 1000 files
docker compose up -d
docker compose ps
curl -sf http://127.0.0.1:3456/api/v1/info

正常运行的堆栈会将服务显示为 running,信息端点会返回包含 version 字段的 JSON。这里出现连接被拒绝,表示容器已退出。docker compose logs vikunja 会说明退出原因,数据库文件权限错误是最常见的原因。

使用 PostgreSQL 的 Planka,两个容器:

services:
  planka:
    image: ghcr.io/plankanban/planka:2.1.1
    restart: unless-stopped
    volumes:
      - data:/app/data
    ports:
      - "127.0.0.1:3000:1337"
    environment:
      - BASE_URL=https://boards.example.com
      - DATABASE_URL=postgresql://postgres@postgres/planka
      - SECRET_KEY=replace-with-openssl-rand-hex-64
    depends_on:
      postgres:
        condition: service_healthy

  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    volumes:
      - db-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=planka
      - POSTGRES_HOST_AUTH_METHOD=trust
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres -d planka"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  data:
  db-data:

POSTGRES_HOST_AUTH_METHOD=trust 表示 PostgreSQL 接受任何连接而无需密码。之所以安全,是因为数据库端口从未发布到主机,唯一可以访问它的对象是同一 Compose 网络中的另一个容器。不要向 postgres 服务添加 ports: 条目。

两个堆栈都不应直接暴露在互联网中。它们都绑定到 127.0.0.1,因此应在前面放置反向代理,并在那里终止 TLS(传输层安全)。当您托管多个应用时,通常使用 在多个 Compose 应用前使用 Traefik 实现这一点;Docker Compose 基础指南介绍了本文略过的这些文件相关部分。

您的看板数据存储在数据库中,因此请做好备份

看板工具可能会静默失败。卷丢失后,您才会发现备份缺失;损坏的 SQLite 文件可能仍能正常打开,直到 database disk image is malformed 周后才报告错误。

不要使用 cp 复制正在运行的 SQLite 文件。复制可能会捕获正在进行的写入,因此归档看似完整,但恢复后数据库会缺少部分行。复制期间请停止服务,复制只需几秒:

docker compose stop vikunja
tar czf vikunja-$(date +%F).tgz files
docker compose start vikunja

对于 Planka,请导出 PostgreSQL,而不要复制正在运行的集群数据目录。还要单独备份上传文件卷,因为附件不存储在数据库中:

docker compose exec -T postgres pg_dump -U postgres -Fc planka > planka-db.dump
docker volume ls
docker run --rm -v planka_data:/data -v "$PWD":/backup alpine \
  tar czf /backup/planka-files.tgz -C /data .

docker volume ls 会输出实际的卷名称。该名称由 Compose 项目名称和 _data 组成。传入不存在的名称会创建一个空卷,并生成一个有效但内容为空的归档,且不会报错。因此,请随后检查文件大小。

然后将其恢复一次,恢复到同一台服务器上的临时堆栈中,并打开一个您记得的卡片。从未恢复过的备份只是猜测。还应将归档发送到服务器之外,因为存储在受保护 VPS 上的副本不能算作备份。VPS 上的 restic 备份介绍了这部分内容。

两项建议

在 2 GB VPS 上供两个人使用:运行 Planka。它在外观和操作方式上最接近 Trello,Trello 导入内容是可直接拖入的文件;280 MB 的空闲内存占用意味着 2 GB 内存中的大部分仍可留给反向代理及其他托管服务。Community License 允许两人内部团队免费使用。如果您不希望依赖 source-available 许可证,Vikunja 在 SQLite 下的空闲内存占用为 110 MB,是同一台服务器上的开源选择。

在组织中供 20 人使用:运行基于 PostgreSQL 的 Vikunja。达到这一规模后,您需要使用 OpenID Connect,而不是维护 20 个本地密码;还需要团队和按项目共享功能。许多工作也不适合放在看板上,因此 List、Table 和 Gantt 视图不再只是可有可无的附加功能。AGPL-3.0 还意味着随着用户数量增加,无需重新讨论许可证。为其使用 PostgreSQL,而不是 SQLite;将其置于反向代理之后;并将每日转储保存到其他服务器。

如果服务器的内存少于 1 GB,则以上两种方案都不适用。选择占用 70 MB 的 Kanboard,接受需要重新录入 Trello 卡片,并将节省下来的内存用于 2026 年自托管候选工具列表中的其他服务。无论您选择哪种工具,详细安装步骤都应放在单独的指南中。本页仅用于做出选择。

FAQ

哪款自托管 Trello 替代方案占用的 RAM 最少?

Kanboard 最少,空闲时约占 70 MB,因为它使用 PHP 和 SQLite,请求处理完后不会在内存中保留数据。Vikunja 位居其次,作为单个 Go 二进制文件,约占 110 MB。Wekan 占用最多,约为 750 MB,因为 Meteor 会为每个连接的浏览器在 Node 内存中维护实时查询层。堆栈进入空闲状态后,使用 docker stats 测量您自己的占用量,因为这些只是典型数值,并非保证值。

我可以将 Trello 看板导入自托管工具吗?

Planka 和 Wekan 都可以直接导入 Trello 的 JSON 看板导出文件。Vikunja 通过 Trello 的 OAuth 流程导入,且必须先在配置中启用迁移器,之后它才会显示在界面中。Kanboard 没有内置导入器。需要提前考虑两个限制:Planka 不会导入用户或附件,并且每张卡片只能处理一个检查清单;Trello 的默认 JSON 导出最多包含 1,000 个操作,而且不会警告您导出内容已被截断。

Focalboard 在 2026 年仍然是不错的选择吗?

不是。最后一个独立版本 v8.0.0 发布于 2024 年 6 月;在 2026 年 8 月 5 日检查本比较时,该版本已发布 783 天。README 表示该仓库目前已停止维护。Mattermost 仅在另一个独立仓库中继续以插件形式开发看板功能,因此您可以自托管的服务端部分已经停止维护。请改用 Planka 或 Vikunja。

Planka 仍然是开源软件吗?

按照 OSI 的定义,不是。Planka 最初采用 MIT 许可证,于 2023 年改为 AGPL-3.0,并从版本 2.0 起采用 PLANKA Community License 发布。个人、内部、非营利和教育用途的自托管免费。转售访问权限或将其作为服务提供给第三方需要商业许可证,日历视图、访客角色和重复卡片则属于 Pro 版本功能。如果必须使用 OSI 批准的许可证,Vikunja 使用 AGPL-3.0,Kanboard 使用 MIT。

我需要 PostgreSQL,还是 SQLite 就够了?

Vikunja、Kanboard 和 Focalboard 默认使用 SQLite;如果一台服务器上只有少量用户,这通常足够。Planka 要求使用 PostgreSQL,不提供 SQLite 选项。当多个用户同时写入时,请切换到 PostgreSQL,因为 SQLite 会串行处理写入,繁忙实例会开始返回 database is locked。也不要将 SQLite 文件放在网络共享上:Kanboard 文档明确警告不要在 NFS 上使用 SQLite,原因正是如此。

#kanban#project-management#planka#vikunja#自托管#Docker