So sánh alternative Trello self-hosted: RAM, SSO, import
So sánh Planka, Vikunja, Focalboard, Wekan và Kanboard theo RAM idle, database, SSO, import Trello và tình trạng maintenance, gồm số liệu VPS thực tế.
Nên chọn alternative nào thay thế Trello self-hosted?
Ba alternative Trello self-hosted đáng cân nhắc là: Planka nếu bạn muốn board giống Trello và file import của Trello; Vikunja khi team cần single sign-on và nhiều tính năng hơn một board; và Kanboard khi VPS (virtual private server) có cấu hình nhỏ. Không nên bắt đầu project mới với Focalboard. Standalone server của nó đã không có bản release nào trong 783 ngày, và README hiện yêu cầu maintainer.
Wekan là công cụ thứ năm trong số 5 công cụ ở đây. Nó hoạt động, nhưng dùng nhiều memory gấp vài lần mọi công cụ khác. Mọi version, licence và ngày tháng dưới đây đã được kiểm tra vào ngày 5 August 2026.
Mỗi công cụ quản lý board cần bao nhiêu RAM?
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
}
]Đó là mức sử dụng khi idle điển hình của một bản cài đặt mới, khi chưa có ai sử dụng. Đây là loại số liệu mà docker stats báo cáo một phút sau khi stack khởi động. Dùng các số liệu này để chọn plan, sau đó đo trên hệ thống của bạn. Xu hướng sử dụng quan trọng hơn số megabyte chính xác. Nếu VPS đó cũng dùng để lưu thư viện ảnh, hãy tính dung lượng cho phần đó trước, vì mức tối thiểu trong so sánh PhotoPrism và Immich khác nhau một bậc độ lớn. Khi đó, công cụ quản lý board sẽ dùng phần RAM còn lại.
Kanboard có mức tối thiểu là 70 MB vì nó dùng PHP với SQLite. Không có tiến trình ứng dụng chạy lâu giữ các board trong memory, nên container gần như không dùng RAM giữa các request. Vikunja là một Go binary duy nhất, dùng 110 MB. SQLite là database mặc định, nên một container là đủ cho toàn bộ stack. Planka cần 280 MB vì luôn chạy 2 container: một Node server và PostgreSQL. Planka không hỗ trợ SQLite, nên không thể bỏ database này.
Wekan dùng 750 MB vì đây là ứng dụng Meteor. Meteor giữ một lớp live query trong memory của Node và gửi mọi thay đổi của board đến mọi trình duyệt đang mở qua WebSocket. Vì vậy, mức dùng memory tăng theo số người kết nối thay vì giữ ổn định. Trên VPS 1 GB, Wekan có thể khởi động, rồi chết ngay khi vài người mở một board lớn. Dấu hiệu là container biến mất rồi khởi động lại với exit code 137. docker compose ps hiển thị việc này dưới dạng restart loop. Xác nhận trên host bằng dmesg -T | grep -i "out of memory", vì kernel out-of-memory killer không thông báo gì cho ứng dụng.
Dependency của database quyết định một nửa công việc backup, nên tóm tắt như sau. Planka yêu cầu PostgreSQL. Vikunja mặc định dùng SQLite và cũng hỗ trợ PostgreSQL cùng MySQL hoặc MariaDB. Kanboard mặc định dùng SQLite và cũng hỗ trợ MySQL, MariaDB và PostgreSQL. Tài liệu của Kanboard khuyến nghị PostgreSQL và cảnh báo không dùng SQLite trên NFS (network file system). Focalboard mặc định dùng SQLite. Wekan hỗ trợ MongoDB wire protocol. File Compose mặc định hiện cung cấp FerretDB v1 với SQLite backend nhúng thay cho MongoDB server thật. Nếu cần MongoDB, có một file Compose riêng cho MongoDB 7.
Những project nào trong số này vẫn được duy trì?
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 là trường hợp khác biệt, với 783 ngày. Bản release độc lập gần nhất của nó, v8.0.0, được phát hành vào tháng 6 năm 2024. Mattermost đã chuyển việc phát triển board sang một plugin trong repository riêng, còn README của bản độc lập cho biết repository hiện không được duy trì. Đây là trường hợp "không" rõ ràng duy nhất trong so sánh này. Các project còn lại đều có những đánh đổi riêng.
Planka có 109 ngày, đây là mức ổn đối với một project phát hành vài bản mỗi năm. Version 2.1.1 được phát hành vào tháng 4 năm 2026. Kanboard phát hành v1.2.53 trước thời điểm kiểm tra 12 ngày, còn 2 bản release trước đó được phát hành vào tháng 3 và tháng 4 năm 2026.
Vikunja và Wekan đều phát hành trong vòng 1 ngày trước thời điểm kiểm tra, nhưng bạn nên hiểu 2 dữ kiện này theo cách khác nhau. Vikunja gắn tag v2.5.0 như một bản minor release thông thường. Wekan gắn tag v10.65, v10.66 và v10.67 trong cùng một ngày; đó là cadence thông thường của project này. Phát hành thường xuyên không có nghĩa là target ổn định. Khi dùng Wekan, bạn chọn theo dõi một version number thay đổi nhanh, vì vậy hãy pin tag và đọc release notes trước mỗi lần bump version.
Bạn có nhận được nhiều hơn một board không?
Hầu hết bài so sánh chỉ dừng ở câu “trông giống Trello”. Tiêu chí này quyết định nhiều hơn cả RAM, vì board không phù hợp với mọi thứ có deadline.
- Planka chỉ là công cụ board, không có gì khác: project, board, list, card, label, checklist, comment và attachment. Tính đến August 2026, các chế độ xem calendar và map là tính năng Pro.
- Vikunja cung cấp 4 chế độ xem cho cùng một tập task: List, Kanban, Table và Gantt. Một task chỉ tồn tại một lần; bạn chuyển chế độ xem thay vì tạo bản sao.
- Kanboard cung cấp board với giới hạn work-in-progress, subtask, attachment, comment, action tự động và một query language nhỏ để filter. Trang chủ của dự án ghi rằng “Số lượng tính năng được giới hạn có chủ đích”, đây là mô tả khá chính xác.
- Wekan cung cấp board với swimlane, cùng checklist, custom field, REST (representational state transfer) API và webhook.
- Focalboard cung cấp các chế độ xem board, table và calendar trên cùng các card. Sản phẩm này được liệt kê để đầy đủ thông tin.
Nếu nhu cầu thực tế của bạn là một wiki có gắn thêm tính năng theo dõi task, đây là phép so sánh không phù hợp. BookStack, Wiki.js và Outline đề cập đến mô hình đó, còn các lựa chọn Notion tự host đề cập đến workspace all-in-one.
Truy cập nhiều người dùng và single sign-on
Planka hỗ trợ OpenID Connect trong bản Community miễn phí. File Compose chính thức để sẵn các thiết lập dưới dạng comment, trong đó có OIDC_ISSUER, OIDC_CLIENT_ID và OIDC_CLIENT_SECRET, vì vậy bạn chỉ cần bỏ comment thay vì nâng cấp. Guest role dành cho người bên ngoài tổ chức là tính năng Pro.
Vikunja hỗ trợ OpenID Connect với nhiều provider cùng lúc. Đặt VIKUNJA_AUTH_OPENID_ENABLED=true, sau đó thêm một block biến VIKUNJA_AUTH_OPENID_PROVIDERS_<ID>_* cho mỗi provider. Vikunja cũng có team và tính năng chia sẻ theo từng project. Đây mới là những gì một tổ chức 20 người thực sự cần.
Wekan hỗ trợ LDAP (lightweight directory access protocol), OAuth2, OIDC và SAML. Kanboard tích hợp sẵn LDAP và có plugin OAuth2 generic cho các trường hợp khác, cùng role và group theo từng project. Standalone server của Focalboard hoàn toàn không có single sign-on. Đây là lý do thứ hai để không chọn nó.
Bạn có thể kết hợp bất kỳ ứng dụng nào trong số này với một identity provider Authentik tự vận hành, thường phù hợp hơn việc cấp cho 20 người một password riêng cho từng app.
Bạn có thể import board Trello không?
Planka có quy trình đơn giản nhất. Export board từ Trello dưới dạng JSON, tạo một board trong Planka, nhấp vào Import rồi chọn Trello. Hãy đọc kỹ các giới hạn trước, vì đây là những giới hạn thực tế: user và attachment không được import, mỗi card chỉ import được một checklist, và JSON export mặc định của Trello dừng ở 1,000 action nhưng không cảnh báo rằng dữ liệu đã bị cắt bớt. Tự kiểm tra file trước khi tin vào kết quả.
Vikunja import thông qua OAuth flow của Trello, trong Settings rồi đến "Import from other services". Phải bật từng migrator trong config trước khi icon của nó xuất hiện, và VIKUNJA_SERVICE_PUBLICURL phải chính xác, vì OAuth redirect diễn ra trong browser của bạn chứ không phải từ server. Vikunja cũng import được Todoist, Microsoft To Do, TickTick và Wekan.
Wekan chấp nhận Trello board JSON được dán vào form import. Kanboard không có Trello importer tích hợp sẵn. Đây là lý do chính để bỏ qua Kanboard nếu bạn cần chuyển nhiều năm lịch sử Trello.
Trải nghiệm trên thiết bị di động như thế nào?
Vikunja là sản phẩm duy nhất trong 5 sản phẩm này có mobile app chính thức. Bản build cho Android và iOS được phát hành cùng mỗi phiên bản, nhưng repository của app tự mô tả là alpha. Vì vậy, hãy xem app như một công cụ đi kèm cho web interface thay vì cách truy cập chính. Planka không có app chính thức do project phát hành, nhưng web interface của nó responsive và có các client bên thứ ba. Wekan và Kanboard chỉ có web interface, còn interface của Kanboard rõ ràng được thiết kế cho màn hình desktop.
Câu hỏi về license và lý do Planka khác biệt
Planka không còn là open source, và đây là thông tin mà phần lớn các bài so sánh bỏ qua. Dự án bắt đầu với license MIT, chuyển sang AGPL-3.0 vào năm 2023, rồi từ dòng 2.0 được phát hành theo PLANKA Community License, một license fair-code do PLANKA Software GmbH nắm giữ. GitHub hiển thị license là "Other" vì license này chưa được OSI phê duyệt. Bạn được phép self-host Planka miễn phí để sử dụng cho người của mình, bao gồm mục đích cá nhân, nội bộ, phi lợi nhuận và giáo dục. Việc bán lại quyền truy cập hoặc chạy Planka như một dịch vụ cho các công ty khác cần có commercial license.
Với hai người, đây là điều khoản hợp lý. Với một công ty, bạn nên đọc điều khoản này trước khi công việc của 20 người được đưa vào hệ thống. 4 sản phẩm còn lại đều là open source thông thường: Vikunja dùng AGPL-3.0, Wekan và Kanboard dùng MIT, còn Focalboard kết hợp Apache 2.0 và AGPL-3.0.
Các file Compose đã cố định phiên bản cho 2 lựa chọn
Cố định tag của image. latest nghĩa là lần chạy docker compose pull tiếp theo có thể đưa bạn lên một major version khác, và các major version sẽ chạy database migration mà bạn không dễ hoàn tác. 2 file bên dưới là file upstream đã cố định tag vào một release thực tế.
Vikunja dùng SQLite, 1 container:
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/filesTrước tiên, hãy tạo data directory với owner phù hợp, vì container chạy bằng UID 1000 và không thể ghi vào directory thuộc 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/infoMột stack hoạt động bình thường sẽ hiển thị service ở trạng thái running, còn info endpoint trả về JSON có trường version. Nếu bị connection refused tại đây, nghĩa là container đã thoát. docker compose logs vikunja cho biết lý do; lỗi permission trên database file là nguyên nhân thường gặp.
Planka dùng PostgreSQL, 2 container:
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 nghĩa là PostgreSQL chấp nhận mọi connection mà không cần password. Cấu hình này chỉ an toàn vì database port không được publish ra host, nên thành phần duy nhất có thể truy cập nó là container còn lại trên cùng Compose network. Không thêm mục ports: vào postgres service.
Không stack nào nên public trực tiếp ra Internet. Cả 2 đều bind vào 127.0.0.1, vì vậy hãy đặt reverse proxy phía trước và terminate TLS (transport layer security) tại đó. Traefik phía trước nhiều Compose app là cách thường dùng khi bạn host nhiều hơn 1 ứng dụng, còn hướng dẫn cơ bản về Docker Compose giải thích các phần trong những file này mà trang này không đề cập.
Board là một database, vì vậy hãy backup
Một board tool có thể fail mà không báo lỗi rõ ràng. Không ai nhận ra backup bị thiếu cho đến khi một volume biến mất; file SQLite bị hỏng vẫn có thể mở bình thường rồi mới báo lỗi database disk image is malformed tuần sau.
Không bao giờ copy file SQLite đang được sử dụng bằng cp. Bản copy có thể bắt đúng lúc một thao tác ghi đang diễn ra. Khi đó archive trông có vẻ đầy đủ nhưng khi restore sẽ thành database bị thiếu row. Hãy stop service trong vài giây cần để copy:
docker compose stop vikunja
tar czf vikunja-$(date +%F).tgz files
docker compose start vikunjaVới Planka, hãy dump PostgreSQL thay vì copy data directory của một cluster đang chạy. Đồng thời backup volume chứa uploads riêng, vì attachment không nằm trong database:
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 in ra tên volume thực tế. Tên này là tên Compose project của bạn theo sau bởi _data. Nếu truyền một tên không tồn tại, lệnh sẽ tạo một volume rỗng và tạo ra archive hợp lệ nhưng không có dữ liệu mà không báo lỗi. Vì vậy, hãy kiểm tra size của file sau đó.
Tiếp theo, hãy restore một lần vào một scratch stack trên chính máy đó rồi mở một card mà bạn còn nhớ. Một backup chưa từng được restore chỉ là phỏng đoán. Hãy gửi archive ra khỏi server nữa, vì bản copy được lưu trên VPS mà bạn đang bảo vệ không phải là backup. backup restic từ VPS trình bày phần đó.
Hai khuyến nghị
Hai người dùng trên một VPS 2 GB: chạy Planka. Giao diện và cách hoạt động của Planka gần Trello nhất, file import từ Trello có thể kéo thả vào, và 280 MB memory khi idle giúp giữ lại phần lớn dung lượng 2 GB cho reverse proxy và các dịch vụ khác bạn host. Community License cho phép một team nội bộ gồm hai người sử dụng miễn phí. Nếu bạn không muốn phụ thuộc vào source-available licence, Vikunja chạy trên SQLite ở mức 110 MB là lựa chọn open-source cho cùng máy đó.
Hai mươi người trong một tổ chức: chạy Vikunja trên PostgreSQL. Ở quy mô này, bạn cần OpenID Connect thay vì 20 password local, cần team và tính năng chia sẻ theo từng project. Nhiều công việc cũng không phù hợp để quản lý trên board, nên các view List, Table và Gantt không còn là tính năng bổ sung đơn thuần. AGPL-3.0 cũng có nghĩa là bạn không phải trao đổi về licence khi số người dùng tăng. Dùng PostgreSQL thay vì SQLite, đặt Vikunja phía sau reverse proxy và lưu daily dump ở một nơi khác với server đó.
Nếu máy có dưới 1 GB RAM thì không lựa chọn nào ở trên phù hợp. Hãy chọn Kanboard ở mức 70 MB, chấp nhận phải nhập lại các card Trello, rồi dùng phần bộ nhớ tiết kiệm được cho một dịch vụ khác trong danh sách self-hosting nên dùng trong 2026. Nếu máy đó đã chạy Jellyfin, Halcyon dựng lại thư viện thành một cửa hàng video thập niên 90 mà bạn có thể đi dạo, phù hợp hơn làm dịch vụ thứ hai so với một công cụ bảng khác. Hướng dẫn cài đặt chi tiết cho công cụ bạn chọn sẽ nằm trong một bài riêng. Trang này chỉ giúp bạn đưa ra lựa chọn.
FAQ
Bản thay thế Trello self-host nào dùng ít RAM nhất?
Kanboard dùng khoảng 70 MB khi idle, vì đây là ứng dụng PHP dùng SQLite và không giữ dữ liệu trong memory giữa các request. Vikunja đứng tiếp theo với khoảng 110 MB dưới dạng một Go binary duy nhất. Wekan là ứng dụng nặng nhất với khoảng 750 MB, vì Meteor giữ một lớp live query trong memory của Node cho mỗi browser đang kết nối. Hãy tự đo bằng docker stats sau khi stack đã idle, vì đây chỉ là số liệu điển hình và không phải mức được đảm bảo.
Tôi có thể import board Trello vào một công cụ self-host không?
Planka và Wekan đều nhận trực tiếp file JSON export board của Trello. Vikunja import thông qua OAuth flow của Trello, và phải bật migrator trong config trước khi tùy chọn này xuất hiện trong interface. Kanboard không có importer tích hợp sẵn. Có 2 giới hạn cần tính đến: Planka không import user hoặc attachment và chỉ xử lý 1 checklist cho mỗi card; JSON export mặc định của Trello dừng ở 1,000 action mà không cảnh báo rằng dữ liệu đã bị cắt bớt.
Focalboard còn là lựa chọn tốt trong 2026 không?
Không. Bản release độc lập cuối cùng, v8.0.0, được phát hành vào tháng 6 năm 2024. Bản này cách thời điểm kiểm tra so sánh vào ngày 5 tháng 8 năm 2026 là 783 ngày. README cho biết repository hiện không còn được maintain. Mattermost chỉ tiếp tục phát triển board dưới dạng plugin trong một repository riêng, nên phần server mà bạn self-host mới là phần đã dừng phát triển. Thay vào đó, hãy chọn Planka hoặc Vikunja.
Planka còn là phần mềm open source không?
Không theo định nghĩa của OSI. Planka từng dùng MIT, chuyển sang AGPL-3.0 vào năm 2023 và được phát hành theo PLANKA Community License từ version 2.0 trở đi. Self-host miễn phí cho mục đích cá nhân, nội bộ, phi lợi nhuận và giáo dục. Việc bán lại quyền truy cập hoặc vận hành Planka như một dịch vụ cho bên thứ ba cần commercial licence. Calendar view, guest role và recurring card nằm trong Pro tier. Nếu bắt buộc phải dùng licence được OSI phê duyệt, Vikunja dùng AGPL-3.0 và Kanboard dùng MIT.
Tôi có cần PostgreSQL không, hay SQLite là đủ?
Vikunja, Kanboard và Focalboard mặc định dùng SQLite. Cấu hình này phù hợp với một nhóm nhỏ người dùng trên cùng một server. Planka yêu cầu PostgreSQL và không hỗ trợ SQLite. Hãy chuyển sang PostgreSQL khi có nhiều người ghi dữ liệu cùng lúc, vì SQLite tuần tự hóa các thao tác ghi và instance bận sẽ bắt đầu trả về database is locked. Không đặt file SQLite trên network share. Tài liệu của Kanboard cũng cảnh báo không dùng SQLite trên NFS vì đúng lý do này.