NocoDB 安装部署实战:从 Docker 单容器到 Auto-upstall 生产栈的全流程解析
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.json 中 engines.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 文件(含 client、connection.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 概括了它的四个能力,结合源码可以进一步精确化:
- 前置检查:
check_prereqs检查 Docker、Docker Compose V2 插件、curl 是否可用,缺少时提示安装后重跑;check_selinux在 SELinux Enforcing 下自动为绑定挂载加:Z后缀;check_ports在 production 模式下检查 80/443 端口是否被占用(否则 Traefik 无法绑定)。注意当前版本的脚本不会替你安装 Docker,缺失依赖时给出链接并提示重跑。 - 自动生成 Docker Compose 栈:交互式询问域名、Postgres(内置/自带)、Redis(内置/自带)、Let's Encrypt 邮箱,然后在
./nocodb/目录生成五组文件:docker-compose.yml、docker.env、nocodb/db.json、update.sh(升级脚本:docker compose pull && up -d+docker image prune -f)、.gitignore(防止凭据入库)。凭据文件从创建起就以umask 077受限,最后再chmod 600收紧。 - 三种运行模式(
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>,明文访问。
- local:域名为空或
- 再次运行即可升级:重新执行安装命令会重新生成配置并拉取最新镜像;日常升级则直接用生成的
./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.env 由 generate_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://IP或http://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.json的connection.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.env 与 nocodb/db.json:
- external-postgres-and-redis:NocoDB + worker 两个容器接入已有 Postgres/Redis,仅暴露 8080 端口;
- managed-postgres:面向云托管数据库的变体;
- postgres-private-ca:私有 CA 的 TLS 场景;
- traefik-custom-ssl:自带证书文件(
certs.yml)经 Traefik 提供 HTTPS; - quickstart-demo:最简演示栈。
这些示例的公共骨架(以 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 → 清理旧镜像
两个生产化注意点(源自脚本实现):
- 升级语义:再次运行安装命令会重新生成配置并拉取最新版本;若只想升级不重配,用
update.sh。--image-tag=可锁定特定版本,避免latest漂移。 - 端口与证书: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_URL、NC_SITE_URL、NC_SECURE_ATTACHMENTS、NC_WORKER_CONTAINER 等环境变量均可在后端源码(NcConfig.ts、envs.ts)中查证其行为,本文所述的版本口径与命令行为均以当前仓库内容为准。
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