NocoDB 自托管实战指南:Docker 快速试用、Auto-upstall 一键生产部署与核心能力全解
本文基于 NocoDB 仓库中的孟加拉语版 README(markdown/readme/languages/bengali.md,即项目主 README 的本地化版本)展开,完整覆盖其核心内容:三种部署路径(Docker + SQLite 快速试用、Docker + PostgreSQL 生产部署、Auto-upstall 一键安装)、六种平台的二进制快速试用方式,以及富电子表格界面、应用商店与程序化访问三大核心能力,并结合仓库中的安装脚本与后端配置解析源码,帮你把每一条部署命令背后的机制讲透。
NocoDB 是什么:定位与设计初衷
NocoDB 定位为"免费在线创建数据库的最快、最简单方式",是一个免费且可自托管(self-hostable)的 Airtable 替代品。
原文档"为什么我们做它"一节给出了清晰的设计动机:绝大多数互联网业务都依赖电子表格或数据库来支撑日常运营;电子表格每天被超过十亿人协作使用,而数据库作为更强力的计算工具,其普及速度却远远落后。通过 SaaS 方式解决这一问题的尝试,带来了严峻的访问控制、供应商锁定(vendor lock-in)、数据锁定(data lock-in)、价格突变等问题,并让用户对平台未来走向失去掌控。
基于此,原文档明确了项目使命:为世界上每一个互联网业务提供开源数据库最强大的无代码(no-code)接口——让强大计算工具的访问更加"民主化",并帮助互联网上数以亿计具备构建能力的用户向前迈进。这一使命也解释了 NocoDB 的架构选择:元数据与业务数据分离、数据库可替换(SQLite 到 PostgreSQL/MySQL 等均可)、界面层与 API 层解耦,从而天然避免数据锁定。
注:本文的主体素材来自孟加拉语版 README;同目录下的 markdown/readme/languages/README.md 列出了全部 16 种语言的 README 翻译清单(中文、法语、德语、印地语、西班牙语、土耳其语等)。
核心能力总览
原文档"特性"(ফিচারসমূহ)一节将 NocoDB 的能力归纳为三大板块,这里逐一说明。
富电子表格界面
- 基础操作:对表(Table)、列(Column)、行(Row)的创建、读取、更新与删除;
- 字段操作:排序、过滤、分组、隐藏/显示列;
- 多种视图类型:网格(Grid,默认视图)、画廊(Gallery)、表单(Form)、看板(Kanban)、日历(Calendar);
- 视图权限类型:协作视图(Collaborative)与锁定视图(Locked);
- Base/视图共享:可公开共享,也可私有共享(密码保护);
- 丰富的单元格类型:ID、Links、Lookup、Rollup、SingleLineText、Attachment、Currency、Formula、User 等;
- 基于角色的访问控制(RBAC):在多个层级提供细粒度权限控制。
从前端源码结构看,这些能力与 packages/nc-gui 中的组件组织高度对应:packages/nc-gui/components/cell/(约百个单元格组件文件,对应各单元格类型)、packages/nc-gui/components/smartsheet/(表格主体逻辑)、以及 gridview/gallery/form 等视图相关的 store 文件(如 useGridViewData.ts、useGalleryViewData.ts、useFormViewStore.ts),印证了原文档所列视图与单元格类型并非营销描述,而是有完整前端实现支撑。
面向工作流自动化的应用商店
原文档指出,应用商店的集成主要分三类:
- 聊天(Chat):Slack、Discord、Mattermost 等;
- 邮件(Email):AWS SES、SMTP、MailerSend 等;
- 存储(Storage):AWS S3、Google Cloud Storage、Minio 等。
程序化访问
NocoDB 为用户提供两种程序化操作方式,请求可通过 Token(JWT 或 Social Auth)完成鉴权:
- REST API;
- NocoDB SDK。
仓库中对应实现清晰可见:后端 API 文档由 packages/nocodb/src/services/api-docs/ 生成(含 swaggerV2 模板),SDK 则独立成包,如 packages/nocodb-sdk 与 packages/nocodb-sdk-v2,另有集成脚手架 packages/nc-integration-scaffolder 用于编写自定义集成。
部署方式一:Docker + SQLite(最快试用)
原文档给出的最小化部署命令:
docker run -d \
--name noco \
-v "$(pwd)"/nocodb:/usr/app/data/ \
-p 8080:8080 \
nocodb/nocodb:latest
要点说明:
-v "$(pwd)"/nocodb:/usr/app/data/:将当前目录下的nocodb目录挂载到容器数据目录/usr/app/data/,SQLite 数据库文件与元数据都落在该目录,实现数据持久化;-p 8080:8080:NocoDB 服务默认监听 8080 端口;- 启动后访问
http://localhost:8080/dashboard即可进入管理面板。
从源码结构看,8080 是后端服务的默认端口:packages/nocodb/src/run/dockerRunPG.ts 中的启动逻辑为 server.listen(process.env.PORT || 8080, ...),即未设置 PORT 环境变量时一律落到 8080。
部署方式二:Docker + PostgreSQL(生产推荐)
原文档给出的 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:数据库连接串的解析
NC_DB 采用类 URL 格式 pg://<host>:<port>?u=<user>&p=<password>&d=<database>,其中:
| 参数 | 含义 | 示例值 |
|---|---|---|
| 协议前缀 | 数据库类型,pg 表示 PostgreSQL |
pg:// |
| host:port | 数据库地址 | host.docker.internal:5432 |
u |
用户名 | root |
p |
密码 | password |
d |
数据库名 | d1 |
host.docker.internal 是 Docker 官方提供的回环地址别名,允许容器直接访问宿主机的服务——这正是"外部已有 PostgreSQL、NocoDB 以容器方式接入"的典型用法。
后端对该变量的解析位置在 packages/nocodb/src/utils/nc-config/NcConfig.ts,NocoDB 支持三种等价的元数据库配置方式:
metaUrl: process.env.NC_DB // 连接串(本文用法)
metaJson: process.env.NC_DB_JSON // 内联 JSON
metaJsonFile: process.env.NC_DB_JSON_FILE // 指向 db.json 文件
也就是说,NC_DB 连接串、NC_DB_JSON 内联 JSON、NC_DB_JSON_FILE 文件三种方式可互换。Auto-upstall 生成的生产环境即采用文件方式(NC_DB_JSON_FILE=/usr/app/data/db.json),可参见 docker-compose/examples/external-postgres-and-redis/docker.env。
NC_AUTH_JWT_SECRET:鉴权与数据源加密的密钥
该变量在后端有两处关键消费:
- JWT 签名密钥:NcConfig.ts 中
secret: process.env.NC_AUTH_JWT_SECRET,用于签发/校验用户会话与 API 访问令牌。固定一个稳定值可保证容器重启后令牌不被作废; - 数据源加密密钥:version-upgrader/upgraders/0225002_ncDatasourceDecrypt.ts 中
let encryptionKey = process.env.NC_AUTH_JWT_SECRET,用于对已接入外部数据库的凭证信息做加解密。
因此在 PostgreSQL 模式下显式指定该值(如原文档示例中的 UUID),是保证跨重启鉴权连续性与外部数据源凭证可恢复的关键实践。
部署方式三:Auto-upstall 一键生产安装
原文档将 Auto-upstall 描述为"在服务器上搭建生产级 NocoDB 的命令,背后自动为你生成 docker-compose",安装命令为:
bash <(curl -sSL http://install.nocodb.com/noco.sh) <(mktemp)
原文档列出的四条核心职责,结合仓库内同源代码 docker-compose/1_Auto_Upstall/noco.sh 可逐一印证:
- 自动安装前置依赖:Docker、docker compose 等缺失时会检测并引导安装。脚本的
check_prereqs会做系统/Docker/端口预检(支持NOCO_SKIP_PREFLIGHT环境变量跳过预检以便重跑与测试); - 自动生成 Docker Compose 生产栈:包含 NocoDB 主服务、worker、PostgreSQL、Redis,以及可选的 Traefik 网关;
- 重复执行即升级:再次运行命令会把 NocoDB 升级到最新版本,生成的目录内还提供
update.sh(执行docker compose pull && up -d并清理旧镜像); - 自动配置 SSL 并负责续期:安装时需输入一个域名或子域名作为入口,脚本据此接入 Let's Encrypt。
脚本实际会问什么、生成什么
依据安装脚本及其配套说明 docker-compose/1_Auto_Upstall/README.md,交互式流程会询问:
| 提问 | 默认值 | 说明 |
|---|---|---|
| 域名(Domain) | 探测到的公网 IP | 留空或 localhost 进入本地模式(8080 端口、无 SSL);合法主机名进入生产模式(Traefik + Let's Encrypt);IP 则进入 production-ip 模式(80 端口、无 SSL) |
| Postgres | Bundled(内置) | 可选 Bundled 或 Existing(已有实例),后者会追问主机、端口、库名、用户、密码与 SSL 模式 |
| Redis | Bundled(内置) | 可选 Bundled 或 Existing(提供 URL) |
| Let's Encrypt 邮箱 | — | 仅生产模式询问 |
脚本在 ./nocodb/ 下生成如下文件结构:
./nocodb/
├── docker-compose.yml # nocodb + worker + (bundled db/redis) + (可选 traefik)
├── docker.env # NC_DB_JSON_FILE、NC_REDIS_URL、NC_SECURE_ATTACHMENTS 等
├── nocodb/db.json # knex 格式数据库连接,支持内联自定义 CA
├── update.sh # docker compose pull && up -d && 镜像清理
└── .gitignore # 排除密钥与运行时数据
几个生产安全细节值得注意(均可从脚本源码确认):
- 生成的
docker.env与db.json包含数据库凭证,脚本通过umask 077从创建之初就保证文件仅属主可读,而非事后chmod 600; - 检测到 RHEL 系主机的 SELinux Enforcing 时,会自动为 bind mount 追加
:Z后缀; - Postgres、Redis 与 NocoDB 应用数据存放在 Docker 命名卷(
nocodb_data、postgres_data、redis_data)中,db.json单独 bind mount 到容器内/usr/app/data/db.json,实现"配置与数据分离"; - nocodb 服务内置对
GET /api/v1/health的 healthcheck,worker 容器会等待主服务健康后再启动。
非交互与免询问模式
除交互式安装外,脚本还提供更贴近运维场景的调用方式:
# 免询问快速安装(内置 Postgres/Redis,本地 8080 端口)
bash <(curl -sSL http://install.nocodb.com/noco.sh) --quick
# 带 HTTPS 的免询问安装
bash <(curl -sSL http://install.nocodb.com/noco.sh) --quick \
--domain=nocodb.example.com --acme-email=ops@example.com
# 非交互模式(适合自动化流水线;--domain 会隐式启用非交互)
bash <(curl -sSL http://install.nocodb.com/noco.sh) \
--non-interactive \
--domain=nocodb.example.com \
--acme-email=ops@example.com \
--pg=bundled --redis=bundled
生产环境建议通过 --image-tag=<版本号> 固定镜像标签(默认生成 nocodb/nocodb:latest),也可在安装完成后直接编辑生成的 docker-compose.yml 调整。
本地快速试用:二进制下载
原文档特别提醒:二进制文件仅适用于本地快速测试,并给出六个平台的下载命令:
| 安装方式 | 安装命令 |
|---|---|
| MacOS arm64 (Binary) | curl http://get.nocodb.com/macos-arm64 -o nocodb -L && chmod +x nocodb && ./nocodb |
| MacOS x64 (Binary) | curl http://get.nocodb.com/macos-x64 -o nocodb -L && chmod +x nocodb && ./nocodb |
| Linux arm64 (Binary) | curl http://get.nocodb.com/linux-arm64 -o nocodb -L && chmod +x nocodb && ./nocodb |
| Linux x64 (Binary) | curl http://get.nocodb.com/linux-x64 -o nocodb -L && chmod +x nocodb && ./nocodb |
| Windows arm64 (Binary) | iwr http://get.nocodb.com/win-arm64.exe -OutFile Noco-win-arm64.exe && .\Noco-win-arm64.exe |
| Windows x64 (Binary) | iwr http://get.nocodb.com/win-x64.exe -OutFile Noco-win-x64.exe && .\Noco-win-x64.exe |
本地启动后统一访问 http://localhost:8080/dashboard。
附:仓库内可直接复用的 Compose 示例
除上述命令外,仓库 docker-compose/ 目录还维护了多套经过校验的部署示例,可与本文各小节对照使用:
- docker-compose/1_Auto_Upstall/docker-compose.yml:本地评估栈——
nocodb+worker+postgres:17.10+redis:7,关键环境变量为NC_DB: 'pg://db:5432?u=nocodb&p=nocodb&d=nocodb'、NC_REDIS_URL: 'redis://redis:6379'、NC_SITE_URL: 'http://localhost:8080',并演示了 worker 通过NC_WORKER_CONTAINER: 'true'声明角色、主服务通过NC_DISABLE_MUX: 'true'关闭内置调度等写法; - docker-compose/examples/external-postgres-and-redis/:外接 PostgreSQL + Redis 的生产写法,
NC_SITE_URL指向公网 HTTPS 地址,并开启NC_SECURE_ATTACHMENTS=true保护附件访问; - 同目录
examples/下还有 managed-postgres、postgres-private-ca(Postgres 私有 CA 证书)、traefik-custom-ssl 等变体,覆盖常见生产拓扑。
许可与贡献
- 原文档声明本项目采用 AGPLv3 许可,完整协议见仓库根目录 LICENSE.md;
- 贡献流程参见项目贡献指南;仓库内还包含 i18n 语言包(如
packages/nc-gui/lang/)与多语言 README(markdown/readme/languages/),本文来源的孟加拉语 README 即其中之一,欢迎对照 markdown/readme/languages/README.md 查看其余 16 种语言版本。
小结
回到本文的核心路径:试用选 Docker + SQLite 单容器命令或平台二进制;生产选 Auto-upstall 一条命令(内置/外接 Postgres 与 Redis 皆可,自动 Traefik + Let's Encrypt,重复执行即升级);若需完全掌控配置,则参照 NC_DB / NC_AUTH_JWT_SECRET / NC_REDIS_URL / NC_SITE_URL 这套环境变量体系自行编排 Compose。理解这些参数在 NcConfig.ts 中的解析位置,以及 Auto-upstall 生成文件的安全处理细节,能让你在任何部署形态下都知其所以然。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0623
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00