NocoDB 安装与运行完全指南:从 Docker 快速上手到 NC_DB 元数据库配置解析
【免费下载链接】nocodb🔥 🔥 🔥 A Free & Self-hostable Airtable Alternative项目地址: https://gitcode.com/GitHub_Trending/no/nocodb
本文以 NocoDB 官方 README 的德语版(markdown/readme/languages/german.md)为主体内容,覆盖其全部核心章节——Docker 快速启动、生产环境部署、环境变量、本地开发搭建与功能特性清单,并结合当前仓库的实际源码(配置解析器、Docker Compose 示例、pnpm 工作区脚本)逐层扩充,使每条命令和参数都能追溯到真实的实现依据。读完后你可以独立完成:用 Docker 一键拉起 NocoDB、通过NC_DB将其元数据库指向 PostgreSQL/MySQL 等外部数据库、理解 SQLite 回退机制的底层逻辑,并在源码级理解端口、JWT 密钥与连接池等环境变量的实际作用。
NocoDB 是什么
README(德语版)对产品的定位一句话概括为:将任何 MySQL、PostgreSQL、SQL Server、SQLite、MariaDB 转换成一张 Smart-Tabelle(智能表格)。即 NocoDB 并不替代你的数据库,而是在既有数据库之上生成一套类电子表格的协作界面,让你以 No-Code 方式完成建表、筛选、分享与集成。
这一点在源码中得到直接印证:NocoDB 启动时需要一个"元数据库"来存放表格视图的元数据与外部数据库的连接信息,连接参数通过环境变量NC_DB指定。若未指定,则回退到内置 SQLite。这一"元数据库 + 外部数据表"的双层结构,是理解后文所有部署方式的钥匙。
快速开始:Docker 方式
最简启动(内置 SQLite)
原文档给出的最简命令:
docker run -d \ --name noco \ -v "$(pwd)"/nocodb:/usr/app/data/ \ -p 8080:8080 \ nocodb/nocodb:latest两个要点(均出自原文档,且与源码一致):
- 容器内元数据库默认目录为
/usr/app/data/。原文档指出:若未提供外部数据库输入,NocoDB 回退到 SQLite;要让 SQLite 持久化,就挂载该目录(即-v那行)。 - NocoDB "要求"一个数据库来存元数据:SQLite 只是零配置回退,生产环境建议显式指定。
从源码看这一回退机制:NcConfig 的默认值即为client: 'sqlite3'、filename: 'noco.db',且文件名会与数据目录拼接(path.join(ncConfig.toolDir, filename))。toolDir的取值链在 helpers.ts 中定义为NC_APP_DATA_DIR → NC_TOOL_DIR → process.cwd(),因此 Docker 镜像将其指到/usr/app/data/后,SQLite 文件才会落在挂载卷内。
指定外部数据库(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这里有两个关键环境变量:
NC_DB:元数据库连接串,格式为<driver>://host:port?u=<user>&p=<password>&d=<database>;NC_AUTH_JWT_SECRET:JWT 签名的密钥,用于登录态与 API Token 的签发。
关于NC_DB的解析细节,源码给出了比原文档更完整的规则:
驱动前缀映射。constants.ts 定义了mysql/mariadb → mysql2、postgres/postgresql → pg、sqlite → sqlite3、oracle → oracledb,并给出默认端口映射(MySQL 3306、PostgreSQL 5432、SQL Server 1433、Oracle 1521)——即连接串中省略端口时按此补全。
短参数别名。URL 查询参数支持缩写别名(constants.ts):
| 参数 | 别名 |
|---|---|
database | d、db |
password | p |
user | u |
title | t |
options | opt、opts |
ssl/keyFilePath/certFilePath/caFilePath | 无别名 |
SSL 自动启用规则。从 jdbcToXcConfig 的结构看:当驱动为pg且未显式配置ssl时,若主机名不在白名单['localhost', '127.0.0.1', 'host.docker.internal', '172.17.0.1'](avoidSSL)内,会自动开启 SSL。这解释了为何面向公网托管数据库的连接串往往无需显式写ssl=true。
连接池。元数据库连接池上限由NC_DB_POOL_MAX控制,默认 10(defaultConnectionOptions)。
连接建立时的建库逻辑。NcConfig.create 在装配完成后会调用metaDbCreateIfNotExist():SQLite 场景确保数据库文件存在,其他驱动则在数据库名缺失时报错Meta database configuration missing database name——也就是说外部数据库实例需已存在,NocoDB 会自动创建其中的元数据库/文件。
NPM 方式
原文档的 NPM 安装方式:
npm install create-nocodb-app需要说明当前仓库的实际状态:该包名仅出现在这篇德语 README 中,当前代码库的 README 与安装入口均已收敛到 Docker 与仓库内置的部署脚本(见下文),pnpm 工作区(pnpm-workspace.yaml)内也未包含该脚手架包。因此create-nocodb-app属于文档历史记载的便捷安装途径,以仓库现状为准,推荐的运行方式仍是 Docker 镜像或下述 Compose 方案。
生产环境部署:Docker Compose
原文档"Produktivaufbau(生产构建)"一节指出:NocoDB 需要一套数据库来保存表格视图元数据与外部数据库连接信息,并通过NC_DB指定。原文档给出的 Compose 流程是克隆仓库后进入docker-compose/pg子目录执行docker compose up -d。
对照当前仓库,docker-compose/目录已演进为三种形态,功能上是原文档docker-compose/pg的超集替代:
1. 交互式向导:setup.sh / Auto-Upstall
setup.sh 是一个轻量包装器,直接执行同级的 1_Auto_Upstall/noco.sh:
bash docker-compose/setup.sh该向导脚本(noco.sh)会交互式收集参数并生成db.json、docker.env等文件——注意脚本头部注释明确写道这些生成文件"包含数据库凭据,需以 owner-only 权限创建"(umask 077),对生产环境凭据管理是不错的实践参考。
2. 现成示例目录:docker-compose/examples
当前仓库提供五套开箱即用的 Compose 配置(见 docker-compose/examples/README.md):
| 示例 | PostgreSQL | Redis | 代理 | 适用场景 |
|---|---|---|---|---|
| quickstart-demo | 内置 | 内置 | 无(8080 端口) | 本地评估 |
| managed-postgres | 外部托管(RDS 等) | 外部 | 无 | 生产环境,自带 LB |
| external-postgres-and-redis | 外部自管 | 外部 | 无 | 最小 Docker 占用 |
| traefik-custom-ssl | 外部托管 | 外部 | Traefik + 自定义证书 | 自带 SSL 证书的生产环境 |
| postgres-private-ca | 私有 CA | 外部 | Traefik + Let's Encrypt | 私有云/内网 DB |
以最简的 quickstart-demo 为例,其核心环境变量配置是(docker-compose.yml):
nocodb: image: nocodb/nocodb:latest environment: NC_DB: 'pg://db:5432?u=nocodb&p=quickstart_demo_pw_change_me&d=nocodb' NC_REDIS_URL: 'redis://redis:6379' NC_SITE_URL: 'http://localhost:8080' NC_DISABLE_MUX: 'true' volumes: - nocodb_data:/usr/app/data这比原文档的docker run示例多出了NC_REDIS_URL(Redis 用于缓存/实时协作等)与NC_SITE_URL(站点对外地址)。官方示例 README 明确提醒:生产形态的示例中所有占位符(如CHANGE_ME_db_password)必须在docker compose up -d之前替换。
环境变量速查:从源码读出完整取值
原文档将环境变量列表外链到官方文档站;这里依据源码 NcConfig.createByEnv 给出与当前代码一一对应的核心项:
| 环境变量 | 来源 | 作用 |
|---|---|---|
NC_DB | process.env.NC_DB | 元数据库连接串(URL 形式) |
NC_DB_JSON/NC_DB_JSON_FILE | 同上 | 以 JSON(或 JSON 文件)形式提供元数据库配置,是 URL 形式的等价替代 |
NC_AUTH_JWT_SECRET | 同上 | JWT 密钥 |
NC_PORT | port ?? 8080 | 监听端口,默认8080 |
NC_TRY | tryMode | 置真时元数据库退化为sqlite3 :memory:(单连接池),用于测试/试用模式 |
NC_WORKER | worker | 为真时进程作为 worker 运行,不暴露端口 |
NC_DASHBOARD_URL | dashboardPath | Dashboard 挂载路径,默认/ |
一个值得注意的健壮性细节:NC_DB_JSON_FILE路径不存在时直接抛错NC_DB_JSON_FILE not found: <path>(NcConfig.ts),而不是静默回退,避免生产环境误连到错误的存储。
GUI 访问
启动后,浏览器访问:
http://localhost:8080/dashboard原文档"GUI"一节即此一句。从源码结构看,Dashboard 页面由后端 Express 应用提供(见 run/docker.ts:server.set('view engine', 'ejs')并启用 CORS、禁用 etag 等),前端静态资源由构建产物内嵌提供;而NC_DASHBOARD_URL允许将该路径改挂到子目录(如反向代理场景下/nocodb/dashboard)。
功能特性(Merkmale)
完整继承原文档特性清单,并结合仓库结构补充佐证:
富表格界面(Rich-Tabellenschnittstelle)
- 简单的搜索、排序、过滤与列隐藏;
- 视图创建:Gitter(Grid)、Galerie(Gallery)、Kanban、Formular(Form)——当前仓库前端在 packages/nc-gui/composables 下可看到
useGridViewData、useKanbanViewStore、useFormViewStore、useGalleryViewData等与各视图一一对应的组合式函数; - 视图分享:公开与密码保护两种方式;
- 个人视图与锁定视图;
- 单元格图片上传(兼容 S3、Minio、GCP、Azure、DigitalOcean、Linode、OVH、Backblaze)——存储集成插件位于 packages/nocodb/src/plugins;
- 角色体系:所有者(Eigentümer)、创建者(Ersteller)、编辑者(Bearbeiter)、查看者(Betrachter)、评论者(Kommentator)及自定义角色——角色徽章资源可参考 packages/nc-mail-assets/badges;
- 访问控制:细粒度到数据库、表、列级别。
工作流自动化 App-Store
- Chat:Microsoft Teams、Slack、Discord、Mattermost;
- 邮件:SMTP、SES、MailChimp;
- SMS:Twilio;WhatsApp;以及任意第三方 API。
程序化 API 访问
- REST API(Swagger,OpenAPI 规范见 packages/nocodb/src/schema/swagger.json 与根目录 APIs.json);
- GraphQL API;
- JWT 认证与社交登录(认证策略实现位于 packages/nocodb/src/strategies);
- API Token 用于 Zapier、Integromat 等集成。
本地开发搭建
原文档"Entwicklungsaufbau(开发构建)"一节包含三步,全部保留并补充了仓库现状说明:
1. 克隆项目
git clone https://gitcode.com/GitHub_Trending/no/nocodb cd nocodb2. 本地启动后端
cd packages/nocodb pnpm install pnpm run watch:run # 浏览器访问 localhost:8080/dashboardwatch:run的真实定义(packages/nocodb/package.json)为:
cross-env NODE_ENV=development NC_DISABLE_TELE=true ENTRYPOINT=src/run/docker rspack --config rspack.dev.config.js即通过 rspack 的 dev 配置、以src/run/docker.ts为入口的热重载启动,NC_DISABLE_TELE=true关闭遥测。同文件还提供watch:run:mysql、watch:run:pg两个变体(分别指向src/run/dockerRunMysql、src/run/dockerRunPG),用于直接连 MySQL/PG 元数据库调试。
3. 本地启动前端
cd packages/nc-gui pnpm install pnpm run dev # 浏览器访问 localhost:3000/dashboarddev即nuxt dev(packages/nc-gui/package.json)。原文档承诺"代码修改自动重启",这正是 Nuxt dev 模式与 rspack watch 的热更新行为。
注意事项(原文档提示框 + 仓库事实)
- 原文档提示:
packages/nocodb依赖nc-lib-gui(packages/nc-lib-gui 下提供编译好的 GUI 库,发布在 npm Registry)。若只想改后端,可直接启动后端后访问localhost:8080/dashboard,无需跑前端; - 包管理器约束:根 package.json 中
preinstall使用npx only-allow pnpm,即只能用 pnpm,npm/yarn 会被拒绝; - Node 版本:原文档徽章标注
node >= 14.18.0,但当前仓库 packages/nocodb/package.json 的engines已要求node >= 22,以当前仓库为准。
项目动机:Why & Mission
最后完整保留原文档的"Warum bauen wir das auf?(我们为什么构建它)"与"Unsere Aufgabe(我们的使命)"两节的核心论述(中文转述):
- 为什么:绝大多数互联网业务用电子表格或数据库承载业务需求。电子表格每天被十亿以上的人协作使用,而数据库是远比表格强大的计算工具,人却无法以同样速度在其上工作。用 SaaS 产品解决这一问题的尝试,往往意味着糟糕的访问控制、厂商锁定、数据锁定、突如其来的涨价,以及对未来可能性的"天花板"。
- 使命:提供最强大的数据库 No-Code 界面,让世界上每个互联网业务都能使用;通过公平且可持续的模式广泛开放这一能力,把强大的计算工具民主化,让超过十亿人能在互联网上获得"大胆折腾与创造"的能力。
小结
- 零配置试用:
docker run+ 挂载/usr/app/data/,内置 SQLite 回退; - 生产部署:
NC_DB指向外部数据库(连接串支持u/p/d短别名与 SSL 自动启用),配合 docker-compose/setup.sh 向导或 docker-compose/examples 现成模板; - 访问入口:
http://localhost:8080/dashboard,可用NC_PORT、NC_DASHBOARD_URL调整; - 本地开发:pnpm 工作区下
packages/nocodb(pnpm run watch:run)与packages/nc-gui(pnpm run dev)两条线并行。
【免费下载链接】nocodb🔥 🔥 🔥 A Free & Self-hostable Airtable Alternative项目地址: https://gitcode.com/GitHub_Trending/no/nocodb
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考