# 任务日历系统 一个可以给每天打勾/打圈的极简任务日历,支持多服务器、多终端同步,还自带 Docker 部署方案。 ## ✨ 特色功能 - **三态标记**:未标记 / 已完成(✓)/ 部分完成(○),一键轮换 - **多服务器同步**:同一套前端,想连哪台后端就连哪台 - **自动保存**:修改 0.5 秒后自动写入数据库,再也不怕刷新丢数据 - **多端布局**:桌面、平板、手机都能舒舒服服地操作 - **模块化前后端**:逻辑拆分清晰,方便二次开发 ## 🚀 快速开始 ### 方式一:Docker ```bash docker-compose up -d ``` 然后访问 `http://localhost:3000` ### 方式二:本地运行 ```bash npm install npm start ``` 同样访问 `http://localhost:3000` > 如需自定义端口,运行前设定 `PORT=xxxx` 即可。 ## 🚀 Docker Buildx 支持 本项目现在支持使用 Docker Buildx 构建多平台镜像,并可推送至 Docker Hub。 ### 使用 GitHub Actions 自动构建和推送 1. 在 GitHub 仓库中设置以下 secrets: - `DOCKERHUB_USERNAME` - 你的 Docker Hub 用户名 - `DOCKERHUB_TOKEN` - 你的 Docker Hub 访问令牌 2. 推送代码到 main 分支或创建版本标签,GitHub Actions 将自动构建并推送镜像。 ### 手动构建和推送 ```bash # 设置 buildx docker buildx create --name mybuilder --use docker buildx inspect --bootstrap # 构建并推送多平台镜像 docker buildx build --platform linux/amd64,linux/arm64 -t registry.cn-beijing.aliyuncs.com/licsber/timeline:latest --push . ``` ## 🗄️ 数据库持久化 Docker 部署时,用户数据存储在 SQLite 数据库中,默认会持久化到项目根目录的 `data` 文件夹中。 - 数据库文件路径:`./data/data.db` 要备份数据,只需复制整个 `data` 目录。要恢复数据,将备份的 `data` 目录复制回项目根目录即可。 ## 🧭 使用指南 1. **添加服务器**:页面底部输入想连接的后端地址,点击「添加」,并从下拉框选择它 2. **注册 / 登录**:按提示填写信息,完成后即可自动加载个人日历 3. **打勾打圈**:点击某天即可循环切换状态;右上角的 Toast 会给出操作反馈 4. **自动保存**:系统会在短暂延迟后后台保存,提示「数据已保存」即完成 5. **随时切换**:切换到其他服务器/账号时,会自动同步对应数据 ## 🏗 项目结构 ``` timeline/ ├── server.js # 后端入口 ├── server/ │ ├── config.js # 基础配置 │ ├── database.js # SQLite 连接与初始化 │ ├── middleware/ │ │ └── auth.js # JWT 鉴权 │ ├── routes/ │ │ ├── auth.js # 登录 / 注册 / 当前用户 │ │ └── calendar.js # 日历数据读写 │ └── utils/ │ └── shutdown.js # 优雅关闭处理 ├── public/ │ ├── index.html │ ├── style.css │ └── js/ │ ├── main.js # 前端入口 │ ├── auth.js # 登录注册逻辑 │ ├── calendar.js # 日历渲染与交互 │ ├── api.js # 与后端通信 │ ├── storage.js # 本地存储封装 │ ├── state.js # 全局状态 │ └── toast.js # 提示组件 ├── Dockerfile ├── docker-compose.yml ├── package.json └── README.md ``` ## ⚙️ 配置项 - `PORT`:后端监听端口,默认 `3000` - `JWT_SECRET`:JWT 密钥,默认简单字符串,生产环境务必更换 - `DB_PATH`:SQLite 数据库文件路径,默认 `/app/data/data.db` ## 💡 小贴士 - 服务器列表保存在浏览器 LocalStorage,可随时增删 - 支持多个浏览器/设备同时登录同一账号,数据实时同步 - 若要重置数据,直接删除根目录下的 `data` 目录即可(注意备份) ## 🧱 技术栈速览 - **后端**:Node.js、Express 5、SQLite、JWT、bcryptjs - **前端**:原生 HTML/CSS/JS + 模块化组织 - **部署**:Docker / Docker Compose 一键启动 Enjoy hacking! 🎉