10分钟Docker化SiftlyPrisma迁移时机、数据持久化与Token踩坑完全指南【免费下载链接】SiftlyLocal Twitter/X bookmark organizer with AI categorization and mindmap visualization项目地址: https://gitcode.com/gh_mirrors/si/SiftlySiftly是一个自托管的 Twitter/X 书签管理工具通过 AI 自动分类你的书签并提供思维导图可视化与语义搜索。本文带你用 Docker 在 10 分钟内完成 Siftly 的部署并讲透新手最容易踩的三个坑Prisma 迁移的三个时机、SQLite 数据持久化、AI Token 过期。为什么 Siftly 值得用 Docker 部署Siftly 把散落各处的书签变成一个可搜索、可分类、可视化的本地知识库支持️ 四阶段 AI 流水线实体提取 → 图像视觉分析 → 语义打标 → 自动分类 自然语言 AI 搜索找一张币圈崩盘的搞笑梗图️ 交互式思维导图浏览全部书签 导出 CSV / JSON / ZIP相比npm run dev本地跑Docker 部署的优势是环境零依赖不用装 Node、数据自动持久化到卷、重启一键拉起。10分钟Docker部署Siftly完整步骤步骤 1克隆仓库git clone https://gitcode.com/gh_mirrors/si/Siftly cd Siftly步骤 2复制环境变量模板cd docker cp ../.env.example .env编辑docker/.env至少填一个 AI 密钥二选一详见下文Token 踩坑章节变量必填说明DATABASE_URL保持默认容器内 SQLite 路径保持file:/data/dev.dbANTHROPIC_CLI_KEY二选一Claude CLI OAuth token订阅用户免费额度ANTHROPIC_API_KEY二选一常规 Anthropic API keySIFTLY_USERNAME/SIFTLY_PASSWORD可选同时设置时启用 Basic Auth公网暴露时强烈建议 本地模板参考.env.example步骤 3构建并启动docker compose up --build首次构建需要几分钟多阶段构建依赖安装 Prisma 客户端生成 Next.js 编译。完成后访问http://localhost:3000即可。以后无代码改动时直接docker compose up核心配置文件一览镜像构建docker/Dockerfilebuilder runner 双阶段最终镜像精简服务定义docker/docker-compose.yml端口、卷、环境变量启动脚本docker/docker-entrypoint.sh先跑迁移再起应用完整说明docker/README.mdPrisma 迁移的三个时机新手最容易搞混Siftly 使用Prisma SQLite迁移相关命令分散在三个不同阶段理解时机才能排错阶段命令何时运行作用① 一次性本地prisma migrate dev本地开发、schema 变更时生成 SQL 迁移文件到prisma/migrations/② 构建时prisma generateDocker 镜像构建中生成 TypeScript 客户端代码不碰数据库③ 启动时prisma migrate deploy容器每次启动把待执行的迁移应用到卷上的 SQLite启动流程实际是docker compose up → prisma migrate deploy应用迁移 → next start启动应用这个顺序就写在 docker/docker-entrypoint.sh 里。为什么启动时不写prisma db push这是很多新手第一个疑问。db push是开发期工具它会对比整个数据库状态与 schema对不认识的对象会警告甚至删除——包括 Siftly 用原生 SQL 创建的FTS5 全文搜索虚拟表bookmark_fts。这些表在 lib/fts.ts 中运行时管理不属于 Prisma schema。而migrate deploy只执行prisma/migrations/里的 SQL 文件对 FTS 表完全无感知、零破坏。为什么迁移不在构建时执行因为 SQLite 数据库文件放在Docker 命名卷/data里而卷只在容器启动时才挂载。构建阶段执行迁移操作的只是一个临时的镜像层构建结束就丢了。所以迁移必须放在docker-entrypoint.sh的启动流程里。⚠️ 实践规则本地改 schema → 本地跑migrate dev生成迁移文件 → 提交 →docker compose up --build。容器下次启动会自动应用新迁移不用手动干预。SQLite 数据持久化你的书签存在哪数据库文件通过命名卷挂载容器重建、重启都不丢siftly_data卷 → /data/siftly.db容器内注意 docker/docker-compose.yml 里有一个关键覆盖——DATABASE_URLfile:/data/siftly.db。不加这行的话SQLite 会写到镜像内的/app/prisma/dev.db容器一重建数据全没这是第二个高频踩坑点。备份数据库一条命令docker run --rm \ -v siftly_docker_siftly_data:/data \ -v $(pwd):/backup \ alpine cp /data/dev.db /backup/siftly-backup.db彻底清空重来docker compose down -v # -v 会同时删除卷数据不可恢复 普通docker compose down不带-v只停容器卷和数据都保留。Token 踩坑401 错误的真凶坑 1Docker 读不到 macOS 钥匙串本地运行时Siftly 会自动从 macOS 钥匙串读取 Claude CLI 的 OAuth 会话零配置。但 Docker 是 Linux 容器没有钥匙串可访问——所以必须用ANTHROPIC_CLI_KEY环境变量手动传入本质是同一个 OAuth token只是换了传递方式。提取 tokenmacOS 终端执行security find-generic-password -s Claude Code-credentials -w \ | python3 -c import sys,json; print(json.load(sys.stdin)[claudeAiOauth][accessToken])把输出粘贴到docker/.env的ANTHROPIC_CLI_KEY。没有 CLI 订阅直接用ANTHROPIC_API_KEYconsole.anthropic.com 申请新账户有 $5 免费额度一劳永逸不用管过期问题。坑 2CLI token 几小时就过期CLI OAuth token 有效期通常只有几小时。过期后 AI 功能会报 401。解决办法重新执行上面的security命令拿到新 token更新docker/.envdocker compose up即可——不需要重新构建镜像--build省了 如果你不想频繁换 token推荐ANTHROPIC_API_KEY方案或者用ANTHROPIC_BASE_URL指向本地代理/兼容端点。常用运维命令速查docker compose logs -f # 实时查看日志排错第一站 docker compose down # 停止保留数据 docker compose up --build # 代码变更后重新构建启动 docker compose exec app sh # 进入容器 shell docker compose exec app node_modules/.bin/prisma studio # 可视化查数据库常见问题速答Q构建失败报 better-sqlite3 相关错误Docker/Dockerfile 已在两个阶段安装python3 make g用于编译原生模块。若本地 Docker 资源不足给 Docker Desktop 分配更多内存/CPU 再重试。Q改了prisma/schema.prisma容器不生效schema 变更必须走本地migrate dev生成迁移文件 →up --build流程光改 schema 不生成迁移文件启动时的migrate deploy不会应用任何东西。Q迁移文件提交在哪所有 SQL 迁移文件位于 prisma/migrations/schema 源文件为 prisma/schema.prisma。迁移文件就是数据库结构的唯一事实来源务必提交。总结坑记住这一句迁移时机本地生成迁移文件容器启动时自动migrate deploy绝不用db push数据丢失DATABASE_URL必须指向卷上的/data/siftly.db备份直接拷dev.db401 错误CLI token 几小时过期重新提取后docker compose up或干脆用 API Key部署完成后去Import页面用内置书签工具导入你的书签AI 分类流水线就会自动跑起来——整个 10 分钟部署换来一个完全私有的书签知识库。【免费下载链接】SiftlyLocal Twitter/X bookmark organizer with AI categorization and mindmap visualization项目地址: https://gitcode.com/gh_mirrors/si/Siftly创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考