首页
/ NocoDB 自托管部署实践:Docker 快速上手、NC_DB 元数据库配置与智能表格功能解析

NocoDB 自托管部署实践:Docker 快速上手、NC_DB 元数据库配置与智能表格功能解析

2026-09-04 13:44:24作者:段琳惟

本文基于 NocoDB 仓库中的韩文版 README(markdown/readme/languages/korean.md)展开,讲解如何将 MySQL、PostgreSQL、SQL Server、SQLite、MariaDB 等现有数据库转换为智能电子表格的核心部署流程:Docker 单容器体验、通过 NC_DB 连接外部元数据库、Docker Compose 生产化部署,并结合仓库源码解析配置项的真实读取路径。

一、项目定位:开源的 Airtable 替代方案

NocoDB 的核心价值主张是:把已有的关系型数据库直接变成智能电子表格(Smart Spreadsheet),无需数据迁移。按 韩文版 README英文主 README 的表述:

  • 支持 MySQL、PostgreSQL、SQL Server、SQLite、MariaDB 作为输入数据源;
  • 提供表格、列、行级别的 CRUD,以及排序、筛选、列显隐等字段操作;
  • 支持 Grid(网格,默认)、Gallery(图库)、Kanban(看板)、Gantt(甘特图)、Form(表单)等多种视图类型;
  • 视图可公开或私有共享(私有视图支持密码保护);
  • 提供 ID、LinkToAnotherRecord(关联记录)、Lookup(查询引用)、Rollup(汇总)、SingleLineText、Attachment、Currency、Formula 等多种单元格类型;
  • 基于角色的细粒度访问控制(Role-based Access Control)。

项目的使命(原文档"우리의 사명"一节)是:为所有互联网业务提供一个开源的、强大的 No-Code 数据库接口,打破 SaaS 方案中普遍存在的访问控制缺陷、厂商锁定与数据锁定问题。

二、快速体验:Docker 单容器部署

2.1 最小化启动(内置 SQLite)

原文档给出的"빠른 시도"(快速尝试)命令如下:

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

两个关键点(原文档明确强调):

  1. 必须挂载数据卷:NocoDB 需要将表格视图的元数据与外部数据库连接信息持久化到 /usr/app/data/。如果不挂载 -v 卷,容器删除后所有配置(表格结构、用户、工作区)将丢失。
  2. 外部数据库需要额外配置:若要接入外部数据库,需通过 NC_DB 环境变量传入连接串(见下一节)。

2.2 访问界面

容器启动后,仪表盘地址为:

http://localhost:8080/dashboard

首次访问会进入账号初始化流程。该端口默认值 8080 与仓库中 Docker 启动脚本的约定一致,容器内部入口逻辑可参考 packages/nocodb/docker/start.sh

三、生产环境部署:用 NC_DB 连接外部元数据库

原文档指出:NocoDB 需要一个数据库来存放"电子表格视图的元数据"和"外部数据库的连接信息",这个连接串通过 NC_DB 环境变量注入。

3.1 连接串格式

从仓库内的运行脚本与 Compose 示例可以确认 NC_DB 的 URL 格式(scheme + 主机端口 + 查询参数 u/p/d 表示 user/password/database):

# PostgreSQL 示例(原文档给出的格式)
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
# MySQL 示例格式(来自仓库开发运行脚本)
NC_DB="mysql2://localhost:3306?u=root&p=password&d=<数据库名>"

以上格式分别可见于 dockerRunPG.tsdockerRunMysql.ts。其中 host.docker.internal 是 Docker Desktop 环境下从容器访问宿主机服务的保留域名——即宿主机上运行的 PostgreSQL。

NC_AUTH_JWT_SECRET 用于签发和校验 JWT 令牌;源码中它还被用作数据源凭据解密的密钥(见 0225002_ncDatasourceDecrypt.ts),因此必须设置为一个安全的随机值并长期保存,更换该密钥会导致既有的 JWT 会话失效。

3.2 源码级解析:NC_DB 是如何被读取的

NcConfig.ts 中,NcConfig.createByEnv() 是所有环境变量的统一读取入口:

public static async createByEnv(): Promise<NcConfig> {
  return NcConfig.create({
    meta: {
      metaUrl: process.env.NC_DB,
      metaJson: process.env.NC_DB_JSON,
      metaJsonFile: process.env.NC_DB_JSON_FILE,
    },
    secret: process.env.NC_AUTH_JWT_SECRET,
    port: process.env.NC_PORT,
    tryMode: !!process.env.NC_TRY,
    worker: !!process.env.NC_WORKER,
    dashboardPath: process.env.NC_DASHBOARD_URL ?? '/',
    ncSiteUrl,
  });
}

由此可以确认除 NC_DB 外的相关配置项:

环境变量 作用
NC_DB 元数据库连接串(主配置)
NC_DB_JSON 以 JSON 字符串形式提供的元数据库配置(替代 NC_DB
NC_DB_JSON_FILE 以文件形式提供的元数据库 JSON 配置
NC_AUTH_JWT_SECRET JWT 密钥,同时用于数据源凭据加密
NC_PORT 服务监听端口(默认 8080)
NC_WORKER 标记当前容器为后台任务 Worker
NC_DASHBOARD_URL 仪表盘挂载路径

另外,NcConfig 在初始化时会调用 metaDbCreateIfNotExist()NcConfig.ts#L155-L179):若元数据库(如 NC_DB 中指定的 database)尚不存在,会自动创建。对 SQLite 则创建数据库文件,对 PostgreSQL 等其他类型则创建 database——这意味着使用 NC_DB 接入外部 PostgreSQL 时无需预先手动建库

四、Docker Compose 部署

原文档给出的 Compose 流程是克隆仓库后进入 docker-compose/pg 目录执行 docker compose up -d。需要注意:当前仓库中 docker-compose/pg 目录已被重组,现在 docker-compose/ 下包含:

  • 1_Auto_Upstall/ —— 官方一键安装器(自动生成 Compose 编排,自动安装 Docker、部署 NocoDB + PostgreSQL + Redis + Traefik 网关、自动配置与续期 SSL);
  • examples/ —— 多套参考编排(快速体验、外部 PostgreSQL + Redis、托管 PostgreSQL、私有 CA 的 PostgreSQL、Traefik 自定义 SSL 等)。

4.1 官方一键安装器

1_Auto_Upstall 的 Compose 文件 展示了官方生产栈的完整形态,包含四个服务:

  • nocodb:主服务,端口 8080:8080,通过 NC_DB 指向 db 服务、NC_REDIS_URL 指向 redis 服务,并带健康检查(wget --spider http://localhost:8080/api/v1/health);
  • worker:与主服务共用同一镜像与数据卷,通过 NC_WORKER_CONTAINER: 'true' 区分角色,负责后台异步任务;
  • db:PostgreSQL(示例中为 postgres:17.10);
  • redis:Redis(示例中为 redis:7),用于缓存与实时事件。

安装器入口脚本为 noco.sh,重复执行可升级到最新版本;其配套的 BATS 测试位于 tests/ 目录,可用于验证生成结果。

4.2 手动 Compose 参考示例

如果不想使用安装器,可直接参考 quickstart-demo/docker-compose.yml。其关键环境配置为:

nocodb:
  image: nocodb/nocodb:latest
  environment:
    NC_DB: 'pg://db:5432?u=nocodb&p=nocodb&d=nocodb'
    NC_REDIS_URL: 'redis://redis:6379'
    NC_SITE_URL: 'http://localhost:8080'
    NC_DISABLE_MUX: 'true'
  volumes:
    - nocodb_data:/usr/app/data
  ports:
    - '8080:8080'

相比单容器模式,Compose 栈新增了 NC_REDIS_URL(Redis 连接串)与 NC_SITE_URL(对外站点地址,用于生成分享链接与 Webhook 回调地址)两个变量。更多变体(如外部托管 PostgreSQL、私有 CA 证书、Traefik 自定义 SSL)见 docker-compose/examples/

五、功能总览:表格接口、App Store 与 API

5.1 电子表格接口

原文档"기능"(功能)一节列出的能力对应仓库中的实现:

5.2 面向工作流自动化的 App Store

原文档说明 App Store 提供三大类集成:

  • 聊天:MS Teams、Slack、Discord、Mattermost;
  • 邮件:SMTP、AWS SES、MailChimp;
  • 短信:Twilio;
  • WhatsApp 及其他第三方 API。

仓库中插件化集成的核心位于 packages/nocodb/src/plugins/,S3 存储插件等独立文档见 markdown/plugins/s3.md

5.3 外部 API 访问

原文档列出的程序化访问能力:

  • REST API(Swagger):完整的 OpenAPI 描述文件就在仓库中,见 packages/nocodb/src/schema/swagger.json,其中包含 NC_DB 元数据同步(Source 同步)等接口定义;
  • GraphQL API
  • JWT 认证与 SNS(社交账号)登录:JWT 密钥即前文 NC_AUTH_JWT_SECRET
  • 面向 Zapier / Integromat 的 API Token:基于用户令牌(nc_ 前缀的 API Key)签名请求。

前端与 API 的交互层见 packages/nc-gui/plugins/api.ts,SDK 实现位于 packages/nocodb-sdk/packages/nocodb-sdk-v2/

六、开发环境与其他入口

  • 开发环境搭建:韩文 README 指向官方文档的 development-setup 章节;仓库源码入口为 packages/nocodb/(NestJS 后端,使用 pnpm workspace 管理)与 packages/nc-gui/(Nuxt 前端)。
  • 多语言 README:韩文版与英文版同源,其他语言版本集中在 markdown/readme/languages/,包括中文、日文、德文、法文等 17 种语言。
  • 许可证:项目采用 Sustainable Use License,见 LICENSE.md

小结

本文沿韩文版 README 的骨架覆盖了 NocoDB 自托管的完整路径:docker run 单容器快速体验(含 /usr/app/data 数据卷的必要性)、NC_DB 连接串接入 PostgreSQL/MySQL 元数据库、Compose 栈中 Worker/Redis/Postgres 的分工,以及源码层面对 NcConfig.createByEnv() 环境变量读取与元数据库自动创建机制的印证。按仓库当前实际目录结构操作时,请以 docker-compose/ 下的 1_Auto_Upstallexamples 为准,而不是旧文档中已重组的 docker-compose/pg 路径。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

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