首页
/ NocoDB 安装部署实战:从 Docker 单容器到 Auto-upstall 生产栈的全流程解析

NocoDB 安装部署实战:从 Docker 单容器到 Auto-upstall 生产栈的全流程解析

2026-09-05 10:35:23作者:宣聪麟

NocoDB 是一个开源的、可自托管的在线数据库构建工具(Airtable 替代品),提供电子表格式的界面来操作真实数据库。本篇基于当前仓库的根 README 展开,覆盖其官方推荐的四种安装方式(Docker + SQLite、Docker + PostgreSQL、Auto-upstall 一键安装、多平台二进制文件),并结合仓库中的安装脚本 noco.sh、示例编排 docker-compose.yml 与后端环境变量解析源码,帮助读者掌握 NocoDB 从本地试用到 HTTPS 生产部署的完整技术路径,并理解每个关键配置项在源码中的实际作用。

项目定位:为什么选择 NocoDB

README 的核心描述是:NocoDB 是快速构建在线数据库的方式。其出发点在 README 的 "Why are we building this?" 一节中有清晰陈述:绝大多数互联网业务依赖电子表格或数据库解决业务问题,电子表格每天被数十亿人协作使用,而数据库在计算能力上远强于电子表格,但操作速度上却难以望其项背;此前的 SaaS 方案又带来了访问控制差、供应商锁定、数据锁定、价格突变等问题。

因此 NocoDB 的使命是:为数据库提供最强大的无代码界面,以公平、可持续的模式广泛开放,让不具备专业数据库能力的业务人员也能直接构建数据应用。对应到技术形态上,它包含三层能力(见 README 的 Features 一节):

  • 富电子表格界面:表/列/行的增删改查;排序、筛选、分组、隐藏列;Grid(默认)、Gallery、Form、Kanban、Calendar 多种视图;协作视图与锁定视图;Base/视图的公开或密码保护分享;ID、Links、Lookup、Rollup、SingleLineText、Attachment、Currency、Formula、User 等多样化单元格类型;基于角色的细粒度访问控制。
  • App Store 工作流自动化:按 Chat(Slack、Discord、Mattermost 等)、Email(AWS SES、SMTP、MailerSend 等)、Storage(AWS S3、Google Cloud Storage、Minio 等)三大类提供集成插件。
  • 程序化访问:提供 REST API 与 NocoDB SDK,用户可使用 JWT 或 Social Auth 签发的 token 对请求签名,以编程方式调用 NocoDB 的各种动作。当前仓库中 SDK 的实现位于 packages/nocodb-sdk,另有新一代的 packages/nocodb-sdk-v2

需要说明的是,当前仓库版本的后端为 Node.js 22+ 的 NestJS 应用(见 packages/nocodb/package.jsonengines.node: ">=22"@nestjs/core 等依赖),项目许可证为 Sustainable Use License(见 LICENSE.md),并非宽松的 OSI 许可证,商用前请阅读其条款。

安装方式一:Docker 单容器 + SQLite

这是最轻量的启动方式,适合快速体验。README 给出的命令是:

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

各参数说明:

参数 作用
--name noco 容器命名为 noco
-v "$(pwd)"/nocodb:/usr/app/data/ 将宿主机当前目录下的 nocodb/ 目录挂载为数据目录。不配置 NC_DB 时,NocoDB 的元数据库(SQLite)就存储在这个挂载卷中,这也是数据持久化的关键
-p 8080:8080 暴露 Web 服务端口
nocodb/nocodb:latest 官方镜像,latest 标签

启动后访问 http://localhost:8080/dashboard 即可进入。

这种方式适合本地试用;由于 SQLite 单文件数据库的并发写入限制,生产环境建议使用 PostgreSQL(见下一节与仓库中 Auto-upstall 的默认编排)。

安装方式二:Docker 容器 + PostgreSQL

当使用外部数据库时,NocoDB 容器只负责应用逻辑,元数据与业务数据全部落在 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:数据源连接串,采用 NocoDB 的自有格式 pg://host:port?u=<user>&p=<password>&d=<database>。示例中 host.docker.internal 是 Docker 在宿主机上映射的特殊主机名,指向宿主机上运行的 PostgreSQL(端口 5432,用户 root,密码 password,库名 d1)。
  • NC_AUTH_JWT_SECRET:JWT 签名密钥,示例值仅作演示,生产环境务必自行生成随机值。

在后端源码中,数据源配置的解析入口位于 NcConfig.ts,可以看到三种配置途径:

metaUrl: process.env.NC_DB,          // 连接串形式,如上例
metaJson: process.env.NC_DB_JSON,    // JSON 字符串形式
metaJsonFile: process.env.NC_DB_JSON_FILE  // 指向一个 JSON 文件(Auto-upstall 采用此方式)

其中 NC_DB_JSON_FILE 方式会加载一个结构化的 db.json 文件(含 clientconnection.host/port/user/password/database 以及可选的 ssl 块,支持 rejectUnauthorized 与自定义 ca 证书),适合需要配置 TLS 的外部数据库场景——这正是 Auto-upstall 脚本生成的方式,后文详述。

安装方式三:Auto-upstall 一键生产安装(推荐)

Auto-upstall 是仓库提供的单命令生产安装器,README 给出的入口命令为:

bash <(curl -sSL http://install.nocodb.com/noco.sh) <(mktemp)

其背后的完整脚本就是仓库内的 docker-compose/1_Auto_Upstall/noco.sh,克隆仓库后也可以直接运行 docker-compose/setup.sh(它只是 exec 上述 noco.sh 的薄封装)。README 概括了它的四个能力,结合源码可以进一步精确化:

  1. 前置检查check_prereqs 检查 Docker、Docker Compose V2 插件、curl 是否可用,缺少时提示安装后重跑;check_selinux 在 SELinux Enforcing 下自动为绑定挂载加 :Z 后缀;check_ports 在 production 模式下检查 80/443 端口是否被占用(否则 Traefik 无法绑定)。注意当前版本的脚本不会替你安装 Docker,缺失依赖时给出链接并提示重跑。
  2. 自动生成 Docker Compose 栈:交互式询问域名、Postgres(内置/自带)、Redis(内置/自带)、Let's Encrypt 邮箱,然后在 ./nocodb/ 目录生成五组文件:docker-compose.ymldocker.envnocodb/db.jsonupdate.sh(升级脚本:docker compose pull && up -d + docker image prune -f)、.gitignore(防止凭据入库)。凭据文件从创建起就以 umask 077 受限,最后再 chmod 600 收紧。
  3. 三种运行模式determine_mode):
    • local:域名为空或 localhost,监听 http://localhost:8080,无 SSL;
    • production:合法域名,Traefik + Let's Encrypt 自动签发并续期 TLS,入口为 https://<域名>
    • production-ip:公网 IP(Let's Encrypt 不支持 IP 证书),Traefik 不做 TLS,入口为 http://<IP>,明文访问。
  4. 再次运行即可升级:重新执行安装命令会重新生成配置并拉取最新镜像;日常升级则直接用生成的 ./nocodb/update.sh

Auto-upstall 完整命令行参数

仓库脚本比 README 的单条命令提供了丰富的非交互式参数(--help 输出与其 parse_flags 函数一致),适合 CI 或批量部署:

参数 说明
--quick 内置 Postgres + Redis 的本地模式快捷安装(8080 端口);可与 --domain= 组合得到生产 HTTPS
--non-interactive 禁用交互提示,缺少必填值时直接失败
--domain=HOST 域名或 IP;留空或 localhost 选 local 模式;此参数同时隐含 --non-interactive
--acme-email=EMAIL Let's Encrypt 邮箱;production 模式(真实域名)必填
--image-tag=TAG 固定 nocodb/nocodb 镜像标签,默认 latest
--pg=bundled / --pg=external Postgres 模式;bundled 时用户默认 nocodb、密码自动生成(24 位随机字符)
--pg-host= / --pg-port= / --pg-database= / --pg-user= / --pg-password= 外部 Postgres 的连接参数(external 模式下 host/user/password 必填)
--pg-ssl=managed / --pg-ssl=none / --pg-ssl=/path/to/ca.pem 外部库 SSL:managed 针对 RDS/Azure/Cloud SQL 等公共 CA;none 关闭;传 CA 文件路径则内嵌自定义 CA(会校验文件存在)
--redis=bundled / --redis=external Redis 模式,内置时地址为 redis://redis:6379
--redis-url=URL 外部 Redis 地址(external 模式必填)
--debug 开启 set -x 调试输出
--help / -h 打印帮助

注意脚本对 upgrade/start/stop/restart/scale/monitor/status/logs/down 等旧子命令已不再支持——当前脚本只负责生成栈,日常运维在部署目录里执行 docker compose ...

生成的编排架构

1_Auto_Upstall/docker-compose.yml(本地快速评估栈)与 noco.sh 的 generate_compose 输出为准,NocoDB 生产栈由五类容器组成,全部运行在一个 nocodb-network bridge 网络中:

  • nocodb:主应用容器(nocodb/nocodb:latest),通过 env_file: docker.env 读取配置,数据卷 nocodb_data:/usr/app/data;健康检查为 wget -q --tries=1 --spider http://localhost:8080/api/v1/health(30s 间隔、5s 超时、5 次重试、30s 启动宽限);production 模式挂上 Traefik 路由标签(Host(\域名`)+letsencrypt证书解析器),否则暴露端口8080:8080`。
  • worker:同镜像的第二容器,额外设置 NC_WORKER_CONTAINER: 'true',依赖主容器 healthy 后启动,共享同一数据卷——负责后台任务处理,与 API 进程分离。
  • db:内置模式下的 postgres:17.10,数据卷 postgres_data:/var/lib/postgresql/data,健康检查 pg_isready
  • redis:内置模式下的 redis:7,数据卷 redis_data:/data,健康检查 redis-cli ping
  • traefik:production 模式下的 traefik:v3.6,Docker provider 读取容器标签,80 端口自动 301 跳转 443,ACME httpchallenge 自动签发证书,acme.json 持久化在 ./letsencrypt

启动顺序由 depends_on + condition: service_healthy 严格保证:db/redis 健康 → nocodb 启动并健康 → worker 启动。

环境变量文件 docker.envgenerate_env 生成,内容非常克制(源码第 339–364 行):

# Database
NC_DB_JSON_FILE=/usr/app/data/db.json

# Redis
NC_REDIS_URL=redis://redis:6379

# Public URL (email links, webhooks, OAuth redirects)
NC_SITE_URL=https://<域名>

# Settings
NC_SECURE_ATTACHMENTS=true
NC_DISABLE_MUX=true

几个值得注意的实现细节(均来自 noco.sh 源码注释):

  • NC_SITE_URL邮件中验证/邀请/密码重置链接、Webhook 与 OAuth 回调正确解析的前提,脚本按模式生成 https://域名http://IPhttp://localhost:8080
  • NC_SECURE_ATTACHMENTS=true 启用附件访问控制;后端 envs.ts 中该开关同时兼容旧变量名 NC_ATTACHMENT_ACCESS_CONTROL_ENABLED
export const isSecureAttachmentEnabled =
  process.env.NC_ATTACHMENT_ACCESS_CONTROL_ENABLED === 'true' ||
  process.env.NC_SECURE_ATTACHMENTS === 'true';
  • 外部 Postgres 且选择 custom SSL 时,generate_db_json 会把 CA 证书内容经 JSON 转义后内嵌进 db.jsonconnection.ssl.ca 字段,并置 rejectUnauthorized: true;managed 模式则只置 rejectUnauthorized: true
  • 非交互模式下 validate_non_interactive 会强制校验:external Postgres 必须有 host/user/password 且 CA 文件存在;external Redis 必须有 URL;真实域名必须提供 --acme-email。缺少终端时会提示改用 --quick 等标志运行。

手动编排参考:仓库内置的示例栈

如果不想用 Auto-upstall 而是手写 Compose,仓库 docker-compose/examples/ 下提供了多套可直接套用的模板,均附 README、docker.envnocodb/db.json

这些示例的公共骨架(以 external-postgres-and-redis 为例):nocodb 与 worker 共享 nocodb_data 卷和 ./nocodb/db.json 挂载,worker 设 NC_WORKER_CONTAINER: 'true'depends_on 主容器 healthy;主容器保留与 Auto-upstall 相同口径的 /api/v1/health 健康检查。对照 NcConfig.ts 的三种元数据配置入口(NC_DB 连接串 / NC_DB_JSON / NC_DB_JSON_FILE),可以看出这些示例统一采用文件方式,把凭据与环境变量(docker.env)分离。

其他安装方式:各平台二进制文件

README 同时提供了面向本地快速测试(仅用于 quick testing,不用于生产)的各平台二进制下载命令:

平台 命令
macOS arm64 curl http://get.nocodb.com/macos-arm64 -o nocodb -L && chmod +x nocodb && ./nocodb
macOS x64 curl http://get.nocodb.com/macos-x64 -o nocodb -L && chmod +x nocodb && ./nocodb
Linux arm64 curl http://get.nocodb.com/linux-arm64 -o nocodb -L && chmod +x nocodb && ./nocodb
Linux x64 curl http://get.nocodb.com/linux-x64 -o nocodb -L && chmod +x nocodb && ./nocodb
Windows arm64 iwr http://get.nocodb.com/win-arm64.exe -OutFile Noco-win-arm64.exe && .\Noco-win-arm64.exe
Windows x64 iwr http://get.nocodb.com/win-x64.exe -OutFile Noco-win-x64.exe && .\Noco-win-x64.exe

本地运行后统一通过 http://localhost:8080/dashboard 访问。

部署后的日常运维

Auto-upstall 在栈成功启动后会输出管理命令提示(display_completion),日常操作即标准 Compose 用法:

cd nocodb            # 进入部署目录
docker compose logs -f nocodb   # 跟踪启动日志
docker compose ps               # 查看容器状态
docker compose down             # 停止(数据保留在命名卷中)
./update.sh                   # 升级:拉镜像 → up -d → 清理旧镜像

两个生产化注意点(源自脚本实现):

  1. 升级语义:再次运行安装命令会重新生成配置并拉取最新版本;若只想升级不重配,用 update.sh--image-tag= 可锁定特定版本,避免 latest 漂移。
  2. 端口与证书:production 模式要求 80/443 空闲(脚本启动前会检查并告警);首次运行时 TLS 证书签发需要约一分钟;IP 部署(production-ip)为明文 HTTP,公网使用请自行加反向代理 TLS。

小结

NocoDB 的部署体系在仓库中有清晰的三层实现:单容器 Docker(SQLite 或外接 PG)用于体验与轻量场景;Auto-upstall(noco.sh)面向生产,自动生成带 nocodb/worker/db/redis/traefik 五容器、健康检查链路、TLS 自动签发与凭据加固的 Compose 栈;docker-compose/examples/ 则为手写编排提供了覆盖外部库、私有 CA、自定义证书等场景的模板。配置层面,NC_DB/NC_DB_JSON/NC_DB_JSON_FILE 三种元数据入口、NC_REDIS_URLNC_SITE_URLNC_SECURE_ATTACHMENTSNC_WORKER_CONTAINER 等环境变量均可在后端源码(NcConfig.tsenvs.ts)中查证其行为,本文所述的版本口径与命令行为均以当前仓库内容为准。

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