Meow App 是一个简洁的笔记应用,支持本地存储和云端同步。你可以使用Cloudflare D1作为云端数据库。
含D1数据库:https://memo.oneloved.top/
D1公共实例的登录密钥是:meow。请勿上传不良信息和个人信息。
npm install
npm run dev
npm install -g wrangler
wrangler login
wrangler d1 create meow-app-db
或者使用在线工具生成一个随机字符串。openssl rand -base64 32
PASSWORDwrangler.toml文件,将your-database-id替换为上一步获取的database_idwrangler d1 execute meow-app-db --file=./d1-schema.sql --remote
npm run buildbuildDB自部署版本复用了同一套前端构建产物,并通过自带的 Express + SQLite 后端提供 /api 接口。数据默认持久化在宿主机目录 /data 映射的 SQLite 文件中,与网页版依然兼容。
docker run -d \ --name meownocode \ -p 3000:3000 \ -e APP_PASSWORD=your-strong-password \ -v ./meownocode-data:/data \ docker.cnb.cool/1oved/meownocode
./meownocode-data会在宿主机创建用于持久化的目录,容器中的SQLITE_DB_PATH默认为/data/meownocode.db。
APP_PASSWORD:前端登录所需的口令;留空表示关闭鉴权(不推荐)。PORT:后端监听端口,默认 3000。SQLITE_DB_PATH:SQLite 文件绝对路径,默认 /data/meownocode.db。CORS_ALLOW_ORIGIN:逗号分隔的允许域名,默认 *。INIT_TOKEN:可选的初始化口令,若配置则 /api/init 需要 Authorization: Bearer <token>。SERVE_STATIC:设为 false 时仅提供 API,不托管前端静态资源。npm run build npm run server
构建产物会存放在 dist/ 下,后端同样监听 http://localhost:3000 并使用 data/meownocode.db 作为本地持久化文件。
src/ - 源代码
components/ - React组件context/ - React Contextlib/ - 工具库和数据库服务d1-schema.sql - D1数据库架构worker.js - Cloudflare Worker代码wrangler.toml - Cloudflare Workers配置本项目支持两套后端存储:Cloudflare D1 。以下指引用于「全新初始化」与「更新既有数据库」。
若你已有数据库,但表结构缺少新增字段,可按下面执行简单迁移。
-- 如缺少头像字段
ALTER TABLE user_settings ADD COLUMN avatar_config TEXT DEFAULT '{"imageUrl":""}';
-- 如缺少画布配置字段
ALTER TABLE user_settings ADD COLUMN canvas_config TEXT;
-- 如缺少双链数据
ALTER TABLE memos ADD COLUMN backlinks TEXT DEFAULT '[]';
-- 如需新增录音数据(audio_clips)
ALTER TABLE memos ADD COLUMN audio_clips TEXT DEFAULT '[]';
-- 如缺少 memos.created_at 索引
CREATE INDEX IF NOT EXISTS idx_memos_created_at ON memos(created_at);
-- 如缺少头像字段
ALTER TABLE user_settings ADD COLUMN IF NOT EXISTS avatar_config JSONB DEFAULT '{"imageUrl":""}'::jsonb;
-- 如缺少画布配置字段
ALTER TABLE user_settings ADD COLUMN IF NOT EXISTS canvas_config JSONB;
-- 如缺少双链数据
ALTER TABLE memos ADD COLUMN IF NOT EXISTS backlinks JSONB DEFAULT '[]'::jsonb;
-- 如需新增录音数据(audio_clips)
ALTER TABLE memos ADD COLUMN IF NOT EXISTS audio_clips JSONB DEFAULT '[]'::jsonb;
-- 如缺少 memos.created_at 索引
CREATE INDEX IF NOT EXISTS idx_memos_created_at ON memos(created_at);