下面我给你一套真实可用、一步一步落地的方案:
👉 使用 Docker 部署 Todo 任务管理器(以开源项目 Vikunja 为例)

之所以选 Vikunja
✅ 开源
✅ Web UI + API
✅ Docker 官方支持
✅ 个人 / 团队 Todo 管理都合适
✅ 常被当作 Todoist 的自建替代方案


一、Todo 任务管理器选型说明

为什么选 Vikunja?

项目说明
项目地址https://vikunja.io
类型Todo / 任务管理
架构前端 + 后端 API
支持多用户 / 项目 / 标签 / 截止日期
部署方式Docker / Docker Compose

二、部署前准备

1️⃣ 环境要求

  • Linux / macOS / Windows
  • Docker ≥ 20.x
  • Docker Compose ≥ v2

检查:

docker -v
docker compose version


2️⃣ 端口规划(默认)

服务端口
Web UI3456
API3456(前后端已整合)

三、方式一:最快体验(单容器,测试用)

⚠️ 不推荐生产,只适合快速体验

docker run -d \
  --name vikunja \
  -p 3456:3456 \
  vikunja/vikunja

访问:

http://服务器IP:3456

默认账号(首次进入可创建管理员)


四、方式二:Docker Compose(强烈推荐 ⭐⭐⭐⭐⭐)

这是标准 & 生产可用方案。


1️⃣ 创建目录结构

mkdir -p vikunja/{db,files}
cd vikunja


2️⃣ 编写 docker-compose.yml

version: "3.9"

services:
  vikunja:
    image: vikunja/vikunja
    container_name: vikunja
    restart: unless-stopped
    ports:
      - "3456:3456"
    environment:
      VIKUNJA_DATABASE_TYPE: sqlite
      VIKUNJA_DATABASE_PATH: /db/vikunja.db
      VIKUNJA_SERVICE_JWTSECRET: supersecretkey
      VIKUNJA_SERVICE_FRONTENDURL: http://localhost:3456
    volumes:
      - ./db:/db
      - ./files:/files

📌 说明:

  • 使用 SQLite(简单可靠)
  • 数据持久化到宿主机
  • 单容器即可运行

3️⃣ 启动服务

docker compose up -d


4️⃣ 查看状态

docker compose ps


5️⃣ 浏览器访问

http://服务器IP:3456

首次进入:

  • 创建管理员账号
  • 开始添加 Todo 任务

五、使用 MySQL / PostgreSQL(进阶)

适合:多用户 / 团队使用


示例:MySQL 版本(常用)

version: "3.9"

services:
  db:
    image: mysql:8
    container_name: vikunja-db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: vikunja
      MYSQL_USER: vikunja
      MYSQL_PASSWORD: vikunja
    volumes:
      - ./mysql:/var/lib/mysql

  vikunja:
    image: vikunja/vikunja
    container_name: vikunja
    depends_on:
      - db
    ports:
      - "3456:3456"
    environment:
      VIKUNJA_DATABASE_TYPE: mysql
      VIKUNJA_DATABASE_HOST: db
      VIKUNJA_DATABASE_USER: vikunja
      VIKUNJA_DATABASE_PASSWORD: vikunja
      VIKUNJA_DATABASE_DATABASE: vikunja
      VIKUNJA_SERVICE_JWTSECRET: supersecretkey
    volumes:
      - ./files:/files

启动:

docker compose up -d


六、Todo 管理功能一览(部署后可用)

✔ 创建任务
✔ 截止日期 / 优先级
✔ 标签(Tag)
✔ 项目 / 清单(List)
✔ 已完成 / 未完成
✔ 多用户协作


七、常见问题排查


❌ 页面打不开

docker logs vikunja

检查:

  • 端口是否放行
  • Docker 是否正常运行

❌ 数据丢失?

⚠️ 必须使用 volume:

volumes:
  - ./db:/db


❌ 外网访问地址不正确

VIKUNJA_SERVICE_FRONTENDURL: http://你的域名


八、安全与生产建议(重要)


1️⃣ 使用反向代理(Nginx)

server {
    listen 80;
    server_name todo.example.com;

    location / {
        proxy_pass http://127.0.0.1:3456;
        proxy_set_header Host $host;
    }
}


2️⃣ 强烈建议启用 HTTPS

  • Nginx + Let’s Encrypt
  • 或 Traefik / Caddy

九、升级方式(不会丢数据)

docker compose pull
docker compose down
docker compose up -d


十、是否还有更轻量的 Todo 方案?

项目适合场景
Vikunja完整任务管理 ⭐⭐⭐⭐⭐
TodoMVC学习前端
Kanboard看板型任务
Taiga项目管理

十一、一句话总结(必记)

使用 Docker 部署 Todo 任务管理器,
Docker Compose 是最佳方式,
SQLite 适合个人,MySQL 适合团队,
数据一定要做 volume 持久化。