首页
/ NocoDB 自托管部署实践:从 SQLite 快速起步到 PostgreSQL 生产环境的完整指南

NocoDB 自托管部署实践:从 SQLite 快速起步到 PostgreSQL 生产环境的完整指南

2026-09-04 13:43:25作者:郦嵘贵Just

本文以 NocoDB 仓库内的官方法语版说明文档 markdown/readme/languages/french.md 为主体骨架,完整覆盖其中“快速体验 → 生产配置 → 特性与编程访问”的技术主线,并结合仓库源码(nc-secret-mgrinit-meta-service.provider.ts、Docker Compose 示例等)逐层展开配置解析与初始化原理。读完后,你可以独立完成 NocoDB 的本地 Docker 部署、PostgreSQL 生产部署,并理解 NC_DBNC_AUTH_JWT_SECRET 等关键环境变量在底层代码中是如何被解析与生效的。

一、NocoDB 是什么:把现有数据库变成智能表格

NocoDB 的定位可以概括为一句话:将任意 MySQL、PostgreSQL、SQL Server、SQLite、MariaDB 变成一个智能表格(Spreadsheet)界面(这是法语 README 首屏的原话)。它不是一套需要额外维护的存储层,而是直接建立在你已有数据库之上的无代码界面层,提供表格、视图、角色权限、工作流集成与 REST API 访问能力。

主仓库的 README.md 中声明了各语言的本地化文档入口,本文参照的法语版即位于 markdown/readme/languages/french.md,它与英文主 README 保持同一技术结构:快速体验(Essayer rapidement)、生产配置(Configuration de la production)、特性(Caractéristiques)、社区与使命。

从主 README 的徽章信息看,项目要求 Node.js >= 14.18.0,采用 Conventional Commits 规范提交——这是理解其构建与发布流程的前提。

二、快速体验:三种本地运行方式

2.1 方式一:Docker 直接运行(默认 SQLite)

法语 README 给出的最简命令如下:

docker run -d \
  --name noco \
  -v "$(pwd)"/nocodb:/usr/app/data/ \
  -p 8080:8080 \
  nocodb/nocodb:latest

两个关键点的源码级解释:

  1. 为什么必须挂载 /usr/app/data/:文档明确说明 NocoDB 需要一套“元数据库”(meta database)来存储视图、表、列等元数据;如果未提供外部数据库,它会回退到 SQLite。从源码 packages/nc-secret-mgr/src/core/NcConfig.ts 可以看到,NcConfig 类的默认元库配置就是 SQLite:

    meta: {
      db: {
        client: DriverClient.SQLITE,
        connection: {
          filename: 'noco.db',   // 默认 SQLite 文件名
        },
      },
    } = {...};
    

    并且 filename 会被拼接到工具目录(toolDir)下——在 Docker 容器里,这个工具目录即 /usr/app/data。因此把宿主机目录挂载到 /usr/app/data/ 后,SQLite 文件(noco.db)才会持久化,这也是文档中“Si cette entrée est absente, nous utiliserons SQLite”的底层原因。

  2. 端口与访问入口-p 8080:8080 暴露 HTTP 服务,运行后访问 http://localhost:8080/dashboard 进入仪表盘(法语文档“GUI”一节与主 README 均给出同一地址)。

2.2 方式二:Docker 运行并指定外部 PostgreSQL

生产就绪的最小命令(法语 README 原文示例):

docker run -d \
  --name noco \
  -v "$(pwd)"/nocodb:/usr/app/data/ \
  -p 8080:8080 \
  -e NC_DB="pg://host.docker.internal:5432?u=root&p=password&d=d1" \
  -e NC_AUTH_JWT_SECRET="569a1821-0a93-45e8-87ab-eb857f20a010" \
  nocodb/nocodb:latest

这里新增的两个环境变量是生产部署的核心:

  • NC_DB:元数据库连接串。pg://host.docker.internal:5432?u=root&p=password&d=d1 的含义是协议 pg、主机 host.docker.internal(Docker 内访问宿主机的特殊域名)、端口 5432,查询参数 u(用户)、p(密码)、d(数据库名)。
  • NC_AUTH_JWT_SECRET:JWT 签名密钥。从初始化代码 packages/nocodb/src/providers/init-meta-service.provider.ts 可以看到,应用启动流程中有一步明确的 await Noco.initJwt()(“init jwt”),会话令牌即依赖该密钥签名。文档建议提供一个 UUID 形式的随机值。

NC_DB 是如何被解析的?调用链如下:

  1. packages/nocodb/src/providers/init-meta-service.provider.ts 启动时先调用 prepareEnv()(将 NC_DATABASE_URL_FILEDATABASE_URL_FILEDATABASE_URLNC_DATABASE_URL 等旧变量归一到 NC_DB),再执行 NcConfig.createByEnv()
  2. packages/nc-secret-mgr/src/core/NcConfig.tscreateByEnv 读取三个候选项:NC_DB(URL 形式)、NC_DB_JSON(内联 JSON)、NC_DB_JSON_FILE(JSON 文件路径),并将 NC_AUTH_JWT_SECRET 作为 secret 一并传入;
  3. URL 形式最终由 metaUrlToDbConfig() 转换为 knex 风格的驱动配置(driver + connection)。

也就是说,只要给出 NC_DB 一个 URL,NocoDB 就切换到该外部元数据库;不给,则使用挂载卷中的 SQLite noco.db。两种模式的切换完全由这一个环境变量的有无决定。

2.3 方式三:git clone 种子仓库

法语 README 提供的第三种方式:

git clone https://github.com/nocodb/nocodb-seed
cd nocodb-seed
npm install
npm start

该方式用于快速体验预置示例数据,本质上仍是本地跑一个 SQLite 版 NocoDB。

注意区分:上面克隆的是 nocodb-seed(种子数据仓库,用于体验);主仓库 README.md 中“Docker Compose”一节克隆的才是 nocodb 主仓库本身,用于部署完整栈。

三、生产环境配置详解

法语 README 的“Configuration de la production”一节指出:NocoDB 需要一套数据库来存储工作表视图与外部数据源的元数据,连接参数通过环境变量 NC_DB 指定。下面结合当前仓库给出各部署形态。

3.1 Docker + Postgres(最简生产形态)

法语文档示例(占位符请自行替换):

docker run -d -p 8080:8080 \
    -e NC_DB="pg://host:port?u=user&p=password&d=database" \
    -e NC_AUTH_JWT_SECRET="569a1821-0a93-45e8-87ab-eb857f20a010" \
    nocodb/nocodb:latest

生产环境务必使用自己的随机 NC_AUTH_JWT_SECRET,不要复用示例值。

3.2 Docker Compose(注意文档路径的演进)

法语 README 给出的原始步骤是:

git clone https://github.com/nocodb/nocodb
cd nocodb
cd docker-compose
cd pg
docker compose up -d

但请注意:在当前仓库中,docker-compose/pg 子目录已不存在(该文档为较早版本翻译件)。当前仓库的 Docker Compose 资产组织为:

docker-compose/examples/README.md 列出了当前推荐的组合矩阵:

示例 PostgreSQL Redis 代理 适用场景
quickstart-demo 内置 内置 无(8080 端口) 本地评估
managed-postgres 外部托管(RDS/Azure/Cloud SQL) 外部 自有负载均衡后的生产
external-postgres-and-redis 外部自管 外部 最小 Docker 占用
traefik-custom-ssl 外部托管 外部 Traefik + 自签 TLS 自带 SSL 证书的生产
postgres-private-ca 外部(私有 CA) 外部 Traefik + Let's Encrypt 私有云数据库

用法同样简单:复制示例目录、替换占位符(CHANGE_ME_db_password 等)、docker compose up -d。生产形态的示例均要求 PostgreSQL,这也是许可证激活的前提(在 Admin Panel → License 处激活)。

3.3 与元数据库相关的环境变量(源码可查证清单)

法语 README 将完整环境变量清单指向了官方文档站,此处仅列出当前仓库源码中可确认的元数据库相关变量及其作用:

环境变量 作用 源码依据
NC_DB 元数据库连接串(pg://mysql2://mssql://oracle:// 等前缀) packages/nc-secret-mgr/src/core/NcConfig.ts
NC_DB_JSON / NC_DB_JSON_FILE 以 JSON(内联或文件)方式提供元库配置,作为 URL 形式的替代 同上
NC_AUTH_JWT_SECRET JWT 签名密钥,启动时经 Noco.initJwt() 生效 packages/nocodb/src/providers/init-meta-service.provider.ts
NC_DB_QUERY_LIMIT_DEFAULT / NC_DB_QUERY_LIMIT_MIN / NC_DB_QUERY_LIMIT_MAX 数据查询的分页大小默认值、下限、上限 packages/nocodb/src/helpers/extractLimitAndOffset.ts
NC_DB_QUERY_QUEUE_CONCURRENCY 元库查询队列的并发度,默认 1(串行) packages/nocodb/src/db/BaseModelSqlv2.ts
NC_DATABASE_URL / DATABASE_URL_FILE 变体 旧式连接串变量,启动时由 prepareEnv() 归一到 NC_DB packages/nocodb/src/providers/init-meta-service.provider.ts

extractLimitAndOffset.ts 的结构看,这些变量都带“兜底默认值 + 兼容旧变量名(如 DB_QUERY_LIMIT_MAX)”的双重解析模式,这意味着从旧版本升级上来的实例无需改动环境变量即可继续工作。

四、应用启动时到底做了什么(初始化调用链)

部署后 NocoDB 如何“冷启动”?packages/nocodb/src/providers/init-meta-service.provider.tsInitMetaServiceProvider 工厂在文件头注释中列出了六个步骤,正文则完整实现了它:

  1. prepareEnv():环境变量归一(旧 URL 变量 → NC_DB);
  2. NcConfig.createByEnv():解析元库配置(对应第三节表格中的解析链);
  3. 初始化缓存NocoCache.init());
  4. 初始化 MetaService:连接元库、检查 nc_store 表、读取实例配置 NC_CONFIG_MAIN,并对“从过老版本(NC_VERSION 编码 < 100002)直接升级”的情况显式拦截,提示先升到 0.207.3 再升级——这解释了为什么升级老数据前不能直接用最新镜像;
  5. Noco.initJwt() + 从环境变量初始化超管(initAdminFromEnv);
  6. NcUpgrader.upgrade():执行数据库迁移/升级任务,随后 NcPluginMgrv2.init() 加载插件(App Store 集成的宿主)。

此外还有两个对生产运维重要的细节:

  • 版本常量:源码中当前版本标记为 NC_VERSION = '0258003',迁移任务版本 NC_MIGRATION_JOBS_VERSION = '14'init-meta-service.provider.ts);
  • 若设置了 NC_SECRET_KEY 相关的 initDataSourceEncryptioninit-meta-service.provider.ts),外部数据源连接信息会在元库中加密存储——对接多业务库时建议启用。

五、特性概览:表格界面、权限与 App Store

法语 README 的“Caractéristiques”一节列出三大块能力,这里完整继承并补充源码位置:

5.1 富电子表格界面

  • 搜索、排序、筛选、隐藏列;
  • 多视图:Grid(网格)、Gallery(画廊)、Kanban(看板)、Form(表单);
  • 视图共享:公开或密码保护;个人视图与锁定视图;
  • 单元格图片上传:支持 S3、Minio、GCP、Azure、DigitalOcean、Linode、OVH、Backblaze 等对象存储;
  • 角色体系:Owner / Creator / Editor / Commenter / Viewer 及自定义角色;
  • 细粒度访问控制(Field-level ACL):权限可下沉到数据库级、表级、列级。

前端实现集中在 packages/nc-gui/components/ 下,例如 smartsheet/(表格主体,300+ 文件)、dashboard/cell/(100+ 单元格渲染器)与 permissions/;权限常量与枚举位于 packages/nc-gui/lib/acl.tsenums.ts

5.2 App Store:工作流自动化集成

法语 README 列出四大类集成(官方 App Store 的三类 + 存储):

  • Chat:Slack、Discord、Mattermost、Microsoft Teams、WhatsApp 等;
  • Email:AWS SES、SMTP、MailerSend 等;
  • SMS:Twilio;
  • Storage:AWS S3、Google Cloud Storage、Minio 等。

插件在容器内由 NcPluginMgrv2 加载(见第四节启动链),仓库内也内置了两个扩展示例:packages/nc-gui/extensions/data-exporter/packages/nc-gui/extensions/json-exporter/

5.3 编程访问:REST API 与 SDK

法语 README 说明:可使用 JWT 或社交认证产生的令牌对请求签名,以程序化方式调用 NocoDB。仓库内对应资产:

六、Kubernetes 部署补充

虽然法语 README 未涉及,但当前仓库内附带了官方 Helm Chart:charts/nocodb/。其中 externalDatabase.urlEnvVar 参数(默认 DATABASE_URL,可改为 NC_DB)控制容器读取哪个环境变量作为元库连接串,与第三节的变量体系一致;Chart 还提供 app/worker 双 Deployment、HPA、PDB、Ingress、NetworkPolicy 等模板(见 charts/nocodb/templates/),适合已有 K8s 平台的团队。

七、小结

  • 快速体验docker run 一条命令,默认 SQLite 落在挂载卷 /usr/app/data/,访问 http://localhost:8080/dashboard
  • 生产部署:核心只有两个动作——用 NC_DB 指向 PostgreSQL(或 MySQL 等)元库,用 NC_AUTH_JWT_SECRET 设置随机 JWT 密钥;组合方式选 Docker、Docker Compose 示例(docker-compose/examples/)、Auto-Upstall 脚本或 Helm Chart;
  • 底层机制NC_DBprepareEnv() 归一 → NcConfig.createByEnv() 解析 → metaUrlToDbConfig() 转驱动配置;启动时按“缓存 → 元库连接 → JWT → Upgrader → 插件”的固定链路初始化;
  • 文档与仓库的差异:法语 README 中 docker-compose/pg 路径已过时,以当前仓库 docker-compose/examples/ 为准;完整环境变量清单以官方文档站为准,本文仅收录源码可证实的子集。
登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
528
588
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
906
1.83 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
docsdocs
暂无描述
Markdown
891
5.79 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.53 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.34 K
1.45 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
988
506
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384