2026 实测:Vikunja 自建任务/待办,1GB 小机替代 Todoist(避坑)
2026-08-16 · DevCraft Studio
不想再给 Todoist 交月费、又怕数据被锁在别人服务器里?这篇手把手教你用一台 1GB 的便宜 VPS 把 Vikunja 跑起来:单容器部署、默认 SQLite、多视图、CalDAV 同步、从 Todoist/Trello 一键导入,外加团队场景换 Postgres 和双备份的避坑清单。
延伸阅读
更多相关攻略推荐:【支付宝微信 01】国内用户怎么用支付宝/微信买国外 VPS:支付方、【知识库自托管 02】2026 实测:VPS 自托管 Anythin、【知识库自托管 03】2026 实测:搬瓦工/RackNerd 上自、2026 VPS 选购决策树与白皮书:一张图看懂怎么买、如何给 VPS 厂商做"信用评估":跑路、超售与售后风险排查手册。
为什么要把待办从 Todoist 搬回自己手里
先说句大实话:Todoist 用着确实顺手,但它本质上是「别人的数据库里存着你的待办」。免费版限 5 个项目、提醒要开 Pro、甘特图根本不给,越用越像被按着缴费。Vikunja 的爽点就在于——它是开源(AGPLv3)、能自托管、没有人工限制的完整版。列表、看板、甘特、表格四种视图全开,提醒、重复、标签、附件、CalDAV 同步一个不少,而这些在商业 SaaS 上大多要付费。
衡量一下成本:一台月付几美元的 1GB VPS,一年也就一杯咖啡钱,换来的是< b>数据完全归你。你随时能导出、随时能迁移、随时能关掉它。这也是为什么 2026 年 Vikunja 1.0 稳定版出来之后,越来越多人把它当 Todoist 平替来折腾。
Vikunja 到底是什么:Go + Vue 的单容器应用
技术架构上 Vikunja 很克制:后端是 Go 写的,前端是 Vue,从 0.23 版本起官方把 API 和前端合并进< b>同一个镜像 vikunja/vikunja,所以你现在只需要跑一个应用容器,不再需要分 api 和 frontend 两个容器(老教程里的双容器写法已经过时了,照抄会踩坑)。
数据库方面它默认走 SQLite——单机、个人、轻量场景直接一个文件搞定,零额外维护。等你真到了团队多人、并发高的阶段,再切到 Postgres/ MySQL 也不迟。换句话说:先 SQLite 跑起来,再谈升级,这是最省心的路线。
资源规划:1GB 小机真的带得动吗
带得动。Vikunja 本体空闲时只占大概 40–50MB 内存,SQLite 模式下整台机器 512MB 都能起来,1GB 是相当宽裕的舒适线。CPU 基本没要求,哪怕是最便宜的 ARM 或低主频 x86 都行。硬盘的话,任务数据是文本,真正占空间的是附件,给个 10–20GB 起步就绰绰有余。
选机器我一般看三家的便宜线:RackNerd 常年有年付十来美元的 1GB 套餐,性价比标杆;Bandwagon(搬瓦工) 的 CN2 GIA 线路对国内访问友好,就是稍贵一点;LisaHost 的香港/海外小机延迟低,适合人在亚洲、想手机随时秒开待办的场景。三家任选其一,装好 Docker 就能开干。记住一点:Vikunja 不吃配置,便宜优先,别为它专门上高配。
单容器 + SQLite 部署:十分钟上线
先装好 Docker 和 Compose(Ubuntu 举例):sudo apt update && sudo apt install -y docker.io docker-compose-plugin。然后新建目录并写一份最简 docker-compose.yml:
mkdir -p /opt/vikunja/{files,db} && cd /opt/vikunja
services: vikunja: image: vikunja/vikunja:latest container_name: vikunja environment: VIKUNJA_SERVICE_PUBLICURL: "http://你的IP:3456/" VIKUNJA_SERVICE_JWTSECRET: "换成openssl rand -hex 32生成的随机串" VIKUNJA_DATABASE_TYPE: "sqlite" VIKUNJA_DATABASE_PATH: "/db/vikunja.db" ports: - "3456:3456" volumes: - ./files:/app/vikunja/files - ./db:/db restart: unless-stopped
启动:docker compose up -d。浏览器打开 http://你的IP:3456,注册的第一个账号自动成为管理员。这里第一个坑:VIKUNJA_SERVICE_JWTSECRET 千万别用我示例里的占位符,务必用随机串,而且一旦设置好就别随便改——改了全员登录态作废、全部被迫重新登录。第二个坑:PUBLICURL 必须带协议和结尾斜杠,写错前端能加载但所有 API 调用都会失败,报 CORS 或连不上后端。第三个坑:files 目录要能给容器 UID 1000 写,提前 chown 1000:1000 files,否则附件上传会悄悄失败。
四种视图:列表 / 看板 / 甘特 / 表格
Vikunja 的核心卖点就是四种视图自由切换,一套数据四种看法:
- 列表视图:最像 Todoist,标题、描述、截止日、负责人、标签、子任务清单一应俱全,日常收件箱就用它。
- 看板视图:拖拽卡片在「待办/进行中/完成」之间移动,做项目推进、Sprint 很顺手,心理成就感比打勾强多了。
- 甘特图:带截止日期的任务自动排成时间线,适合回答「这项目到底啥时候能完」,商业 SaaS 通常要付费才给。
- 表格视图:像电子表格一样批量看/改字段,适合一次梳理几十上百条任务的优先级和负责人。
同一个项目切视图不会丢数据,你脑子怎么转就怎么看,这也是它比纯看板工具(如 Planka、WeKan)更「全能」的地方。
CalDAV 同步:让任务出现在系统日历里
这是我认为 Vikunja 最香的隐藏功能。它原生暴露 CalDAV 端点,地址一般是 https://你的域名/dav/principals/用户名/。配好之后,iOS 的「提醒事项」、macOS 日历、Android 上的 DAVx⁵、Thunderbird 都能双向同步——手机日历里加一条,Vikunja 里立刻出现,反过来也一样。
避坑:CalDAV 地址结尾的斜杠很关键,有的客户端认 /dav/ 有的要 /dav/principals/用户名/,建议两种都试;另外你的实例必须能从外网访问到(走 HTTPS 最稳),纯内网 IP 的手机客户端是同步不上的。iPhone 路径:设置 → 日历 → 账户 → 添加账户 → 其他 → CalDAV,填 Vikunja 的 URL、用户名、密码即可。
从 Todoist / Trello 一键导入,别从头手敲
迁移成本往往是劝退点,但 Vikunja 内置迁移器,支持 Todoist、Trello、Microsoft To-Do、TickTick 等。从 Todoist 导出的步骤:
- 在 Todoist 的 Settings → Integrations → Developer 里拿到 API Token;
- 进 Vikunja 的 设置 → 迁移/导入 → Todoist,粘贴 Token;
- 等几分钟,项目、任务、标签、优先级、重复规则、截止日基本都保住。
Trello 则是导出 JSON 后同样在导入界面选 Trello 上传即可。实测几十个项目三分钟内搬完,比想象中省事。迁移完记得核对一遍带附件的任务,少量富格式内容可能要手动补。
团队场景:换 Postgres + 权限设置
个人玩 SQLite 够了,但只要上了团队——多人同时写、任务上千、还要附件——就建议切 Postgres。原因很简单:SQLite 是单文件锁,并发写入会卡;Postgres 才是正经的生产级后端。compose 里加一个 db 服务(postgres:16-alpine),把 Vikunja 的 VIKUNJA_DATABASE_TYPE 改成 postgres 并填好 host/user/password 即可,应用容器加 depends_on: db: condition: service_healthy 等数据库就绪再起。
权限方面,Vikunja 的模型是「用户 + 团队(team)+ 项目(project)」,可以:
- 把项目共享给指定用户或整个团队,分别给「只读 / 可写 / admin」角色;
- 用团队来分组部门,比如「运维组」「编辑组」,再给各组授权不同项目;
- 任务上指派负责人(assignee),配合看板做责任到人。
团队避坑:部署完第一件事是把 VIKUNJA_SERVICE_ENABLEREGISTRATION 设成 false 关掉公开注册,否则你的待办站会变成 bots 的游乐场。需要拉人时由管理员手动开账号或临时开注册。
备份避坑:数据库和附件要双备份
自托管最怕「数据在自己手里」变成「数据在自己手里弄丢了」。Vikunja 的数据分布在< b>两处:数据库(SQLite 文件或 Postgres)和附件目录(files 卷)。只备份一个等于没备份。
- SQLite:直接
cp /opt/vikunja/db/vikunja.db /backups/vikunja-$(date +%F).db即可,写进 crontab 每天凌晨跑; - Postgres:用
docker exec vikunja-db pg_dump -U vikunja vikunja > /backups/vikunja-$(date +%F).sql; - 附件:把
files目录整个打包或 rsync 到另一台机器/对象存储; - JWT 密钥和数据库密码也一并存好,丢了密钥只是全员重登,丢了数据库才是真没了。
最关键的坑:备份完一定要做一次恢复演练。很多人第一次恢复才发现文件权限不对或路径错位。建议每月挑一次备份真恢复到临时容器里验证能打开。
手机和桌面客户端:离开网页也能用
别以为自托管就得天天开浏览器。Vikunja 有官方 iOS / Android App,直接填你自建的地址和账号就能连,离线也能用、回到网络自动同步,体验不输 Todoist。Android 还能走 F-Droid 装,避免商店跟踪。桌面端除了网页,也可以把链接钉成 PWA 当本地应用用。
避坑:手机 App 连的是 PUBLICURL 那个地址,所以正式用一定要把它设成公网可达的域名而不是内网 IP,否则换网络就断连。另外 App 首次登录如果报证书错,多半是你用了自签证书或 PUBLICURL 和实际访问地址不一致,照着这两条排查基本都能解决。
反代与 HTTPS:从 IP 访问升级到域名
纯 IP:3456 适合本机试玩,但真要给家人同事用、还要 CalDAV,就建议挂域名走反代。Caddy 是最省心的选择:写一条 tasks.example.com { reverse_proxy 127.0.0.1:3456 } 就能自动申请并续期 Let's Encrypt 证书,连 80/443 端口都不用手动配。Nginx 用户则在 location / 里 proxy_pass http://localhost:3456,记得加上 client_max_body_size 20M 否则大附件上传会被拒。
避坑:Vikunja 容器本身只监听 3456,反代那层才是公网入口,数据库和 App 都不要直接 publish 到 0.0.0.0;同时反向代理下务必把 PUBLICURL 改成 https://你的域名/(带 s 和斜杠),否则前端能开、接口全挂。换域名或换协议后顺手把 JWT 密钥也重置一次,强制大家重新登录,能顺手清掉旧的错配会话。