NocoDB SQLite 模式如何用 Litestream 将元数据库备份到 S3 并恢复?

发布时间:2026/9/9 21:10:23
NocoDB SQLite 模式如何用 Litestream 将元数据库备份到 S3 并恢复? NocoDB SQLite 模式如何用 Litestream 将元数据库备份到 S3 并恢复【免费下载链接】nocodb A Free Self-hostable Airtable Alternative项目地址: https://gitcode.com/GitHub_Trending/no/nocodbNocoDB 在 SQLite 模式下把元数据工作区、Base、表结构、权限等 meta 信息存放在本地单个noco.db文件中容器重建或数据卷丢失时这部分数据会随之丢失。NocoDB 镜像在 packages/nocodb/docker 目录下内置了 Litestream 的启动脚本与配置模板容器启动时先从 S3 副本恢复noco.db再在后台运行litestream replicate持续同步从而实现“元数据库持续备份到 S3 重启时自动从 S3 恢复”。本文的操作路径均来自 start-litestream.sh 与 litestream.yml 两个文件的实际内容。模式启用条件纯 SQLite 元数据库 三个必需变量脚本通过use_litestream检查决定是否走 Litestream 流程条件必须同时满足未设置NC_DB、NC_DB_JSON、NC_DB_JSON_FILE、DATABASE_URL、DATABASE_URL_FILE、NC_MINIMAL_DBS中的任何一个即没有外接数据库使用内置 SQLite 元数据库已设置LITESTREAM_S3_BUCKET、LITESTREAM_S3_ACCESS_KEY_ID、LITESTREAM_S3_SECRET_ACCESS_KEY。任一外接数据库变量非空时脚本跳过整个 Litestream 流程直接执行node docker/main.js启动 NocoDB此时不会发生任何 S3 备份。脚本还保留了旧变量名的向后兼容映射仅在对应LITESTREAM_*变量为空时生效AWS_ACCESS_KEY_ID→LITESTREAM_S3_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY→LITESTREAM_S3_SECRET_ACCESS_KEYAWS_BUCKET_PATH→LITESTREAM_S3_PATHAWS_BUCKET→LITESTREAM_S3_BUCKET配置模板 litestream.ymllitestream.yml 是 Litestream 的配置模板文件头部注释指向 Litestream 官方配置参考${...}占位符在运行期由容器环境变量填充dbs: - path: ${NC_TOOL_DIR}noco.db replicas: - type: s3 endpoint: ${LITESTREAM_S3_ENDPOINT} region: ${LITESTREAM_S3_REGION} skip-verify: ${LITESTREAM_S3_SKIP_VERIFY} bucket: ${LITESTREAM_S3_BUCKET} path: ${LITESTREAM_S3_PATH} access-key-id: ${LITESTREAM_S3_ACCESS_KEY_ID} secret-access-key: ${LITESTREAM_S3_SECRET_ACCESS_KEY} retention: ${LITESTREAM_RETENTION} retention-check-interval: ${LITESTREAM_RETENTION_CHECK_INTERVAL} snapshot-interval: ${LITESTREAM_SNAPSHOT_INTERVAL} sync-interval: ${LITESTREAM_SYNC_INTERVAL}模板中只声明了一个库${NC_TOOL_DIR}noco.db即元数据库。NC_TOOL_DIR是元数据库所在目录脚本开头会自动mkdir -p创建它。与 Litestream 配置同名的其余项retention、snapshot-interval、sync-interval等分别由LITESTREAM_RETENTION、LITESTREAM_SNAPSHOT_INTERVAL、LITESTREAM_SYNC_INTERVAL、LITESTREAM_RETENTION_CHECK_INTERVAL控制含义以 Litestream 配置文档为准。脚本中唯一有默认值的是LITESTREAM_S3_PATH未提供时会被设为nocodb。启动容器并传入备份变量README 给出的 SQLite 模式启动命令是docker run -d \ --name noco \ -v $(pwd)/nocodb:/usr/app/data/ \ -p 8080:8080 \ nocodb/nocodb:latest要启用 Litestream需要把脚本读取的环境变量传入容器。下面的命令由 README 示例加上脚本中出现的变量名组合而成尖括号内的值替换为你自己的 S3 端点、桶名与密钥LITESTREAM_S3_PATH可选省略时默认为nocodbdocker run -d \ --name noco \ -v $(pwd)/nocodb:/usr/app/data/ \ -p 8080:8080 \ -e LITESTREAM_S3_ENDPOINTS3 服务端点 \ -e LITESTREAM_S3_BUCKET桶名 \ -e LITESTREAM_S3_ACCESS_KEY_IDAccess Key \ -e LITESTREAM_S3_SECRET_ACCESS_KEYSecret Key \ -e LITESTREAM_S3_PATHnocodb \ nocodb/nocodb:latest启动后的实际流程先恢复再持续备份条件满足后start-litestream.sh 按以下顺序执行不存在${NC_TOOL_DIR}时创建该目录执行旧AWS_*变量到LITESTREAM_*变量的兼容映射删除本地可能残留的noco.db、noco.db-shm、noco.db-wal。注意这是脚本明确声明的行为注释原文为 remove any possible local DB leftovers进入 Litestream 模式后本地元数据库文件在每次启动时先被清除S3 副本是唯一的恢复来源执行litestream restore ${NC_TOOL_DIR}noco.db从 S3 副本恢复本地元数据库如果恢复后${NC_TOOL_DIR}noco.db仍不存在说明 S3 上还没有副本例如首次使用则touch一个空库文件后台启动litestream replicate 开始持续同步执行node docker/main.js启动 NocoDB 主进程。也就是说“备份”由第 6 步的replicate进程在运行期间持续完成“恢复”由第 4 步在每次启动时自动完成两者都由同一次容器启动串起来不需要额外操作。如何判断恢复结果脚本本身给出了两种分支结果可作为启动后的判断依据S3 上已有副本第 4 步恢复后${NC_TOOL_DIR}noco.db由副本还原得到元数据回到副本中保留的状态可保留到哪个时间点由retention、snapshot-interval、sync-interval等配置项决定以 Litestream 的行为为准S3 上尚无副本本地得到的是一个新建的空noco.dblitestream replicate从此开始向 S3 写入副本——这对应全新实例的首次运行。无论哪个分支NocoDB 主进程都是在 restore 步骤之后才启动的。可选分支age 加密副本如果同时设置LITESTREAM_AGE_PUBLIC_KEY与LITESTREAM_AGE_SECRET_KEY脚本会先用dasel检查/etc/litestream.yml中第一个 replica 是否已有age配置没有时写入dasel put --file ${LITESTREAM_CONFIG_PATH} \ --read yaml \ --type json \ --value { identities: [ ${LITESTREAM_AGE_SECRET_KEY} ], recipients: [ ${LITESTREAM_AGE_PUBLIC_KEY} ] } \ --selector dbs.first().replicas.first().agelitestream.yml 中也保留了同结构的注释块供对照。不开启该分支时副本按明文的 S3 对象存储。边界与限制本流程只在纯 SQLite 元数据库模式下生效设置了NC_DB、NC_DB_JSON、NC_DB_JSON_FILE、DATABASE_URL、DATABASE_URL_FILE、NC_MINIMAL_DBS中任何一个脚本都不会执行 Litestream 相关步骤。配置模板只备份${NC_TOOL_DIR}noco.db这一个元数据库文件。每次启动都会删除本地noco.db、noco.db-shm、noco.db-wal后再恢复因此不要在该目录放置依赖本地保留的其他数据。LITESTREAM_*变量必须在容器启动时以环境变量形式提供脚本本身不从其他文件读取这些配置。【免费下载链接】nocodb A Free Self-hostable Airtable Alternative项目地址: https://gitcode.com/GitHub_Trending/no/nocodb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询