SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor · 更新于 2026-08-26

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

对比 Planka、Vikunja、Focalboard、Wekan 和 Kanboard 的最低 RAM、数据库、SSO、Trello 导入及维护状态,并指出 Wekan 的退出代码 137 和 Focalboard 的维护风险。

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

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

Wekan 是此处介绍的第 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
  }
]

这些是全新安装、无人使用时的典型空闲值,也就是整个堆栈启动后 1 分钟,docker stats 通常报告的数值。可以用它们估算方案所需资源,但最终应测量自己的环境。趋势比精确的 MB 数值更重要。如果同一台 VPS 还要存放照片库,应先按照片库需求规划资源,因为PhotoPrism 和 Immich 的比较中给出的最低需求高出一个数量级;看板工具只能使用剩余资源。

Kanboard 的最低值为 70 MB,因为它使用 PHP 和 SQLite。没有请求时,不会有长期运行的应用进程将看板保留在内存中,因此容器的空闲内存几乎为零。Vikunja 是一个 110 MB 的 Go 单二进制程序,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" 确认这一点,因为内核的内存不足终止程序不会向应用报告任何信息。

数据库依赖关系决定了备份工作的一半,下面逐项说明。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 都在检查前一天内发布了版本,但这两个事实应区别看待。Vikunja 将 v2.5.0 标记为普通次版本发布。Wekan 在同一天标记了 v10.65、v10.66 和 v10.67,这符合其正常发布节奏。频繁发布不代表目标版本稳定。选择 Wekan 就意味着要跟踪快速变化的版本号,因此应固定 tag,并在每次升级前阅读变更说明。

获得的不只是一个看板吗?

大多数比较文章只会停留在“看起来像 Trello”。但这一维度比 RAM 更重要,因为对于任何有截止日期的事项,看板都不是合适的组织方式。

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

如果您实际需要的是附带一些任务跟踪功能的 Wiki,那么这不是正确的比较方向。BookStack、Wiki.js 和 Outline介绍了这类产品,自托管的 Notion 替代方案则介绍了一体化工作区。

多用户访问和单点登录

Planka 的免费 Community 版本支持 OpenID Connect。官方 Compose 文件已将相关设置注释掉,其中包括 OIDC_ISSUER、OIDC_CLIENT_ID 和 OIDC_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”,然后选择“Import from other services”。每个迁移器都必须先在配置中启用,其图标才会显示;VIKUNJA_SERVICE_PUBLICURL 必须正确,因为 OAuth 重定向发生在浏览器中,而不是服务器上。Vikunja 还支持导入 Todoist、Microsoft To Do、TickTick 和 Wekan。

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

移动端体验如何?

Vikunja 是这 5 个项目中唯一提供官方移动应用的项目。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,而不要复制正在运行的集群的数据目录。还要单独备份 uploads 卷,因为附件不存储在数据库中:

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 备份介绍了这一部分。

两个建议

两个人使用 2 GB VPS:运行 Planka。它的外观和操作方式与 Trello 最接近;Trello 导入功能只需拖入文件即可;280 MB 的空闲内存占用可以让 2 GB 内存中的大部分空间留给反向代理和托管的其他服务。Community License 对两人内部团队免费。如果您不想依赖 source-available 许可证,那么在同一台服务器上使用 SQLite 运行 Vikunja,空闲内存占用为 110 MB,是开源方案。

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

如果服务器内存少于 1 GB,以下两种方案都不适用。选择占用 70 MB 内存的 Kanboard,并接受需要重新录入 Trello 卡片这一事实;将节省的内存用于2026 年自托管服务候选清单中的其他项目。如果该服务器已经运行 Jellyfin,Halcyon 会将媒体库重建为可浏览的 90 年代录像店,它比再运行一个看板工具更有趣。无论选择哪种工具,详细安装步骤都应放在单独的指南中。本页面仅用于做出选择。

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