最稳省事的方式是docker部署:先建目录并设uid 1000权限,再用docker run -d启动容器,访问http://localhost:3456即可;生产环境须用docker-compose.yml统一管理端口、挂载路径与环境变量,避免sqlite并发问题及配置错误。

直接用 Docker 部署 Vikunja 是最稳、最省事的方式,不用编译、不碰依赖冲突、升级也只改一行 image。其他方式(二进制、源码、包管理)在实际维护中容易卡在权限、路径、systemd 服务配置上,尤其对非 Go 开发者不友好。
docker run 单命令快速启动(适合测试/临时用)
这是验证 Vikunja 能不能跑起来的最快路径,不需要 docker-compose.yml,也不用建目录结构:
-
mkdir -p $PWD/vikunja-files $PWD/vikunja-db—— 必须提前建好两个空目录,且确保当前用户有写权限 -
chown 1000:1000 $PWD/vikunja-files $PWD/vikunja-db—— Vikunja 容器默认以 UID 1000 运行,挂载目录权限不对会报permission denied或静默失败 - 执行启动命令:
docker run -d \ --name vikunja \ -p 3456:3456 \ -v $PWD/vikunja-files:/app/vikunja/files \ -v $PWD/vikunja-db:/app/vikunja/db \ -e VIKUNJA_SERVICE_PUBLICURL=http://localhost:3456 \ -e VIKUNJA_DATABASE_PATH=/app/vikunja/db/vikunja.db \ --restart unless-stopped \ vikunja/vikunja:latest
- 启动后访问
http://localhost:3456,首次打开会自动初始化 SQLite 数据库,无需手动建表
注意:VIKUNJA_SERVICE_PUBLICURL 必须带协议和端口,否则邮件通知、Webhook、OAuth 回调都会出错;如果后续要外网访问,这里得填公网 IP 或域名,不能留 localhost。
docker-compose.yml 生产级配置要点
单命令适合尝鲜,但正式用必须上 docker-compose.yml,否则环境变量难管理、重启策略不统一、日志没落盘。常见坑集中在三处:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
-
ports写成"3456"(只暴露容器端口)是错的,必须写成"3456:3456",否则宿主机无法访问 -
environment中的VIKUNJA_DATABASE_PATH路径要和volumes挂载到容器内的路径严格一致,比如挂载的是./vikunja-db:/app/vikunja/db,那这里就必须是/app/vikunja/db/vikunja.db,少一个/app就会 fallback 到内存数据库,重启即丢数据 - SQLite 不支持并发写入,多人高频使用时建议换 MySQL/MariaDB;若坚持用 SQLite,请确保
vikunja-db目录所在文件系统不是 NFS 或某些云盘(存在锁机制兼容问题)
一个最小可用的 docker-compose.yml 示例(SQLite):
version: '3.8'
services:
vikunja:
image: vikunja/vikunja:latest
container_name: vikunja
ports:
- "3456:3456"
volumes:
- ./vikunja-files:/app/vikunja/files
- ./vikunja-db:/app/vikunja/db
environment:
- VIKUNJA_SERVICE_PUBLICURL=http://your-domain.com:3456
- VIKUNJA_DATABASE_PATH=/app/vikunja/db/vikunja.db
restart: unless-stopped
启动后连不上?先查这三件事
Vikunja 启动成功但浏览器打不开,90% 是以下某个环节断了:
- 执行
docker ps | grep vikunja,确认容器状态是Up,不是Exited;如果是退出状态,立刻执行docker logs vikunja,重点看是否有permission denied、failed to open database或listen tcp :3456: bind: address already in use - 执行
curl -v http://localhost:3456/health,返回200 OK说明服务进程已就绪;如果超时或拒绝连接,检查宿主机防火墙:sudo ufw status(Ubuntu)或sudo firewall-cmd --list-ports(CentOS),确保 3456 端口放行 - 确认
VIKUNJA_SERVICE_PUBLICURL值里没有拼写错误,比如写成htp://、漏掉端口、用了未解析的内网域名(如http://server.local:3456)—— 浏览器打不开,但 API 和邮件功能也会全挂
中文界面与基础配置落地
Vikunja 默认加载浏览器语言,但首次注册账号后,用户个人设置里没有“语言切换”开关。真想强制中文,只能改全局配置:
- 停掉容器:
docker stop vikunja - 编辑
vikunja-files/config.yml(如果不存在就新建),加入:ui: defaultLanguage: zh-CN
- 重启容器:
docker start vikunja - 注意:这个配置只影响新用户,默认语言不会自动同步给已有用户;已有用户需在个人头像 → Settings → Language 手动选一次,之后才固定
另外,上传附件失败、任务无法保存,大概率是 vikunja-files 目录权限没设对 —— 容器内进程 UID 1000 必须对整个目录有读写权,chmod -R 755 不够,得用 chown -R 1000:1000。










