Vikunja 部署方案规划
1 📋 Vikunja 部署方案规划
Vikunja 官方提供 Docker 部署方式 。考虑到已经有 Traefik 做反向代理,以及数据自主可控的需求,我使用 SQLite 作为数据库来简化部署,并将配置和存储都通过挂载卷持久化。
2 💾 详细部署步骤
2.1 创建目录结构
在你的 NAS 上(通常为 /docker/),创建 Vikunja 的项目目录:
mkdir -p /docker/vikunja/{files,data}
2.2 准备 docker-compose.yml
在 /docker/vikunja/ 目录下创建 docker-compose.yml 文件,内容如下:
version: '3.8'
services:
vikunja:
image: vikunja/vikunja:latest # 官方镜像
container_name: vikunja
restart: unless-stopped
networks:
- traefik_public # 接入你现有的 traefik 网络
ports:
- "3456:3456" # 将容器端口映射到宿主机,方便调试
volumes:
- /docker/vikunja/files:/app/vikunja/files # 附件存储
- /docker/vikunja/data:/db # SQLite 数据库文件存储
environment:
- TZ=Asia/Shanghai
# 关键配置:Vikunja 的公开访问地址,必须与你的域名一致!
- VIKUNJA_SERVICE_PUBLICURL=https://vikunja.com
# 生成一个足够复杂的随机字符串作为 JWT 密钥
- VIKUNJA_SERVICE_JWTSECRET=
# 使用 SQLite 数据库,无需额外配置
- VIKUNJA_DATABASE_TYPE=sqlite
- VIKUNJA_DATABASE_PATH=/db/vikunja.db
- VIKUNJA_MAILER_ENABLED=true
labels:
- "traefik.enable=true"
- "traefik.http.routers.vikunja.rule=Host(`vikunja.com`)"
- "traefik.http.routers.vikunja.entrypoints=websecure"
- "traefik.http.routers.vikunja.tls=true"
- "traefik.http.routers.vikunja.tls.certresolver=letsencrypt"
- "traefik.http.services.vikunja.loadbalancer.server.port=3456"
networks:
traefik_public:
external: true
配置说明:
-
数据持久化:映射了
/files和/db目录,确保任务附件和数据库文件保存在 NAS 上。 -
环境变量:
VIKUNJA_SERVICE_PUBLICURL必须设置为你将用于访问 Vikunja 的完整 HTTPS 地址。 -
Traefik 集成:参考了之前的配置模板,通过
labels让 Traefik 自动为你的vikunja.com域名代理 HTTPS 流量。
2.3 设置文件权限
Vikunja 容器内的进程以 UID 1000 运行,需要确保它对你刚刚创建的 files 目录有写入权限:
chown -R 1000:1000 /docker/vikunja/files
2.4 启动容器
cd /docker/vikunja
docker-compose up -d
2.5 检查运行状态
docker logs vikunja
如果看到类似 ⇨ http server started on [::]:3456 的日志,说明启动成功。
3 🌐 访问与配置
-
访问 Vikunja:在浏览器中打开
https://vikunja.com。 -
注册管理员账户:首次访问会进入注册页面,创建你的第一个用户。这个用户自动成为管理员。
-
开始使用:登录后,你可以创建项目(类似文件夹)、团队,并在列表、看板、甘特图等不同视图下管理你的任务。
4 🔔 关于提醒功能
你之前关心的提醒问题,Vikunja 通过 Webhook 提供了灵活的解决方案。
-
内置提醒:Vikunja 本身支持在 Web 界面和通过邮件发送任务提醒。
-
Gotify 集成:你之前提到的 Gotify,可以通过配置用户 Webhook 来实现推送。具体操作是在 Vikunja 的用户设置中添加一个 Webhook,目标 URL 指向你的 Gotify 消息发送 API 地址,并选择
task.reminder.fired和task.overdue等事件。 -
ios端的mDone支持提醒及小组件显示
-
循环任务无法记录完成日志的问题可以通过n8n工作流解决