
m0ngr31/dailynotes
本项目谨献给DailyNotes的原始创建者Joe Ipson,他于2025年夏天在与癌症的勇敢抗争后离世。
Joe是一位坚信书写力量的同道中人。他开发DailyNotes是为了将实体 planner 的专注体验带入数字世界。他的愿景是创建一个个人化、可自我托管且简洁美观的工具。
本项目将延续他的遗志。每一次提交、每一个功能、每一次bug修复,都是对这位挚友的小小致敬,他的精神将继续存在于他编写的代码和分享的理念中。
安息吧,Joe。我们会继续前行。
当前版本:1.0.0-beta.22
该应用的灵感来源于每天早上使用Hobonichi Techo手账记录待办事项,并在一天中随时记录随机想法和笔记的习惯。目前最接近的替代应用是Noteplan,但它不支持Mac或iOS以外的设备,且无法自我托管,因此开发了DailyNotes。
由于需要全天跟踪任务,普通Markdown不原生支持任务功能,因此采用了GitHub风格Markdown(GFM)。为提供真实的文本编辑器体验,使用CodeMirror处理输入,搭配Fira Code字体提供连字功能。其他特色功能包括代码高亮、文本/代码折叠,以及任务列表(可切换任何日期或笔记中的任务状态)。
计划添加以下部分功能以实现最终v1.0版本:
GET/POST /api/calendar_token生成或轮换私有只读ICS URL(需认证)。/api/calendar.ics?token=<your_token>订阅。DELETE /api/calendar_token轮换令牌可立即撤销之前的订阅或禁用分享。以下是部分截图展示:
主编辑器:
 | None |
| PGID | 组ID(用于文件夹权限) | None |
| DEFAULT_TIMEZONE | 外部ICS事件的可选时区名称(如America/Denver);默认使用服务器本地时间 | None |
| 卷名称 | 描述 |
|---|---|
| /app/config | 用于存储数据库和环境变量。若已传入所有上述环境变量,则无需此卷 |
最简单的默认运行方式:
bashdocker run -p 8000:8000 -v /config_dir:/app/config xhenxhe/dailynotes
或使用原始镜像:
bashdocker run -p 8000:8000 -v /config_dir:/app/config m0ngr31/dailynotes
以下是包含所有配置选项的完整docker-compose示例:
yamlservices: dailynotes: image: xhenxhe/dailynotes:latest container_name: DailyNotes ports: - '8000:8000' volumes: # 数据库和配置的持久化存储 - ./dailynotes-data:/app/config environment: # 必需:用于签名JWT令牌的密钥 # 生成方法:openssl rand -hex 32 API_SECRET_KEY: 'your-secure-api-secret-key-here' # 必需:数据加密密钥(必须为16的倍数) # 生成方法:openssl rand -hex 32 # 警告:更改此密钥将导致现有数据无法读取! DB_ENCRYPTION_KEY: 'your-secure-db-encryption-key-here' # 可选:数据库连接字符串 # 默认:/app/config/app.db中的SQLite数据库 # 示例: # PostgreSQL: postgresql://user:password@localhost:5432/dailynotes # MySQL: mysql://user:password@localhost:3306/dailynotes # DATABASE_URI: "sqlite:////app/config/app.db" # 可选:禁止新用户注册(设置任何值即可禁用) # PREVENT_SIGNUPS: "true" # 可选:使用反向代理子文件夹时的基础URL # 示例:若通过[***]"/notes" # BASE_URL: "" # 可选:文件权限的用户/组ID # 用于匹配主机用户权限 # PUID: "1000" # PGID: "1000" restart: unless-stopped # 可选:健康检查 healthcheck: test: ['CMD', 'curl', '-f', 'http://localhost:8000/'] interval: 30s timeout: 10s retries: 3 start_period: 40s # 可选:搭配PostgreSQL使用 # postgres: # image: postgres:15-alpine # container_name: dailynotes-db # environment: # POSTGRES_DB: dailynotes # POSTGRES_USER: dailynotes # POSTGRES_PASSWORD: your-secure-db-password # volumes: # - ./postgres-data:/var/lib/postgresql/data # restart: unless-stopped
Docker Compose快速启动:
将上述内容保存为docker-compose.yml
生成安全密钥:
bash# 生成API密钥 openssl rand -hex 32 # 生成数据库加密密钥 openssl rand -hex 32
更新API_SECRET_KEY和DB_ENCRYPTION_KEY的值
启动应用:
bashdocker-compose up -d
通过http://localhost:8000访问
重要注意事项:
DB_ENCRYPTION_KEY用于加密所有笔记。初始设置后切勿更改,否则数据将无法读取!./dailynotes-data目录将存储数据库和配置8000以提高兼容性最简单的开发入门方式是使用Docker。此方式提供:
快速启动:
bash# 启动开发环境(构建、启动并打开浏览器) ./dev
脚本将自动:
开发工作流:
所有代码更改会自动检测:
./config/app.db中常用命令:
bash# 查看两个服务器的实时日志 docker compose -f docker-compose.dev.yml logs -f # 停止开发环境 docker compose -f docker-compose.dev.yml down # 重启服务 docker compose -f docker-compose.dev.yml restart # 进入容器shell(调试用) docker exec -it dailynotes-dev bash # 依赖变更后重建 docker compose -f docker-compose.dev.yml build
文件结构:
Dockerfile.dev - 包含Python和Node.js的开发Docker镜像docker-compose.dev.yml - 带卷挂载的开发compose配置docker-entrypoint-dev.sh - 启动脚本,运行两个服务器dev-docker - 启动所有服务并打开浏览器的便捷脚本挂载内容:
以下目录从主机挂载以支持热重载:
./app/ - Python后端代码./client/src/ - Vue.js源代码./client/public/ - 静态资源./config/ - 数据库和环境变量(持久化)./migrations/ - 数据库迁移环境变量:
默认情况下,开发环境会在./config/.env中自动生成安全密钥。如需自定义:
yaml# 编辑docker-compose.dev.yml environment: API_SECRET_KEY: 'your-dev-key' DB_ENCRYPTION_KEY: 'your-16-char-multiple-key' PREVENT_SIGNUPS: 'true' # 可选:禁用注册
如偏好直接在主机运行服务:
最简单的开发环境设置方式是使用自动设置脚本:
bash./dev-setup.sh
脚本将:
设置完成后,运行开发服务器:
bash# 后端(一个终端) source venv/bin/activate ./run.sh # 前端(另一个终端) cd client npm run dev # 通过nvm自动使用Node 16
注意: 项目包含.nvmrc文件,指定Node.js 16版本。如安装了nvm,会自动使用正确版本。
如使用Windows或偏好手动设置:
需安装Python(支持2和3)和Node.js 16。
推荐: 使用nvm(macOS/Linux)或nvm-windows管理Node.js版本。项目包含指定Node.js 16的.nvmrc文件。
bash# 如使用nvm(推荐) nvm install 16 nvm use 16 # 创建并激活虚拟环境(推荐) python -m venv venv source venv/bin/activate # Windows:venv\Scripts\activate # 安装依赖 pip install -r requirements.txt cd client npm ci
可使用上述环境变量,或运行以下命令生成新变量:
bash./verify_env.py
注意:由于数据已加密,修改DB_ENCRYPTION_KEY变量会导致数据无法访问。
开发期间需同时运行客户端和服务器:
bash# 先激活虚拟环境 source venv/bin/activate # Windows:venv\Scripts\activate # 运行后端 ./run.sh
bash# 在另一个终端 cd client # 如使用nvm,先切换到Node 16(或直接运行npm run dev) nvm use # 从.nvmrc文件读取版本 # 启动前端开发服务器 npm run serve # 或使用自动使用Node 16的dev脚本: npm run dev
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务