NocoDB 自部署教程:一条命令部署 + 4 个环境变量搞定生产环境
【免费下载链接】nocodb🔥 🔥 🔥 A Free & Self-hostable Airtable Alternative项目地址: https://gitcode.com/GitHub_Trending/no/nocodb
NocoDB 是一款免费、可自托管的 Airtable 替代方案:它不替换你的数据库,而是把 MySQL、PostgreSQL、SQLite 里现成的表,直接变成可协作编辑的在线表格——带网格、看板、日历、表单四种视图,数据全部留在你自己的服务器。这篇文章就是 NocoDB 自部署的完整流程:从选后端库,到跑起容器,再到上线前的环境变量配置。
先定方案:你的数据放在哪种库上
装之前先花 10 秒做个决定,这决定了后面所有配置:
- 一个人用 / 先试试:什么都不用装,NocoDB 自带 SQLite,元数据就存在数据目录里,零配置。
- 两人以上长期用:换成 PostgreSQL。SQLite 是单文件存储,并发写入会互相阻塞,多人同时编辑时体验会明显变差;PostgreSQL 则是团队场景的标准答案。
- 数据已经在 MySQL / PG 里:直接连过去就行,NocoDB 只存元数据(表结构、视图、用户权限),不动你的业务数据。
这个决定对应一个变量NC_DB:不设就是 SQLite,设了就是外部库。
一条命令部署 NocoDB
服务器上只需一条docker run:
docker run -d --name noco \ -v "$(pwd)"/nocodb:/usr/app/data/ \ -p 8080:8080 \ nocodb/nocodb:latest两个关键参数,漏掉任何一个都会踩坑:
-v "$(pwd)"/nocodb:/usr/app/data/:把宿主机上的nocodb/目录挂进容器。NocoDB 的 SQLite 元数据和所有附件都存在/usr/app/data,不挂载的话容器一重建,表和文件全丢。-p 8080:8080:左边是宿主机端口,右边固定是容器端口。宿主机 8080 被占用时只改左边,比如-p 9090:8080,然后用http://localhost:9090访问。
启动后浏览器打开http://localhost:8080/dashboard,第一个注册的账号自动成为管理员,实例就算跑起来了。
接入现有数据,并把生产必需的变量加上
如果决定接外部数据库,给上面的命令补两个环境变量。注意容器内访问宿主机服务要用host.docker.internal:
-e NC_DB="pg://host.docker.internal:5432?u=root&p=password&d=d1" \ -e NC_AUTH_JWT_SECRET="换成你自己生成的固定随机字符串"NC_DB:连接串,PostgreSQL 用pg://开头,MySQL 用mysql://开头,后面是主机、端口、用户、密码、库名。NC_AUTH_JWT_SECRET:登录态的签名密钥。必须自己设一个固定值。不设的话,每次容器重启密钥都会重算一遍,所有人就得重新登录一次,团队场景下这会变成灾难。
如果不想手写命令,仓库里带了现成的 compose 文件:docker-compose/examples/quickstart-demo/ 里是 NocoDB + PostgreSQL + Redis + worker 四个服务的全套配置,改一下密码就能docker compose up;docker-compose/examples/external-postgres-and-redis/ 则演示了怎么把 Postgres 和 Redis 指向已有的外部实例。
玩法演示:一张任务表,四种视图切着看
在 dashboard 里新建一个 Project,下面加一张 Base,命名为“任务”,建四个字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| 任务名 | SingleLineText | 必填 |
| 状态 | SingleSelect | 选项:待办 / 进行中 / 完成 |
| 负责人 | User | 从工作区成员里直接选 |
| 截止日期 | Date | 给日历视图用 |
类型不止这些,Number、Formula、Rollup、Attachment 等完整清单见 视图组件目录。
然后按角色切视图:
- Grid(默认):标准表格,筛选、排序、分组都有,适合快速录入和核对。
- Kanban:把“状态”设为分组字段,每行变成一张卡片。把卡片从“待办”列拖到“进行中”列,等于改了一次状态字段——这就是看板协作的全部逻辑。
- Calendar:行按“截止日期”落到日历格子里,一眼看出哪天堆了活。
- Form:给表加一个 Form 视图,把链接发出去。没有账号的人也能填表提交,但看不到整张表的其它行——收集需求、报名、报销登记这类场景基本都用它。
分享入口在右上角的 Share:Base 或单个 View 都可以单独设公开或带密码的私有访问,粒度比“整站公开”灵活得多。
上线前必动的 4 个环境变量
单机自用可以一个都不设。但只要有对外访问或多人使用,下面四个变量就该过一遍:
| 什么时候需要 | 变量 | 怎么设 |
|---|---|---|
| 元数据从 SQLite 换到 PostgreSQL / MySQL | NC_DB | 连接串,pg://或mysql://开头 |
| 多人访问或多容器部署 | NC_AUTH_JWT_SECRET | 自己生成的固定随机字符串,重启后登录态才不会失效 |
| 要发通知邮件、让分享链接可点 | NC_SITE_URL | 实例的公网访问地址,例如https://nocodb.example.com |
| 多容器部署、需要实时同步 | NC_REDIS_URL | redis://host:6379形式 |
其余NC_开头的变量(附件访问控制、遥测开关等)集中在 packages/nocodb/src/utils/envs.ts 读取,按需查官方文档的 self-hosting 章节即可。
部署选型速查:规模决定架构
| 你的规模 | 后端库 | 部署形态 |
|---|---|---|
| 个人测试,就你一个人 | SQLite(默认,零配置) | 单容器 |
| 小团队正式使用 | PostgreSQL | compose:NocoDB + PostgreSQL + Redis |
| 已有 MySQL / PG 数据源 | 直接连接,不自带库 | 单容器 +NC_DB |
| 高并发,要跑导入导出任务 | PostgreSQL + Redis | app 与 worker 分离,参考 Helm chart 模板 |
判断标准一句话:人少用 SQLite 图省事,人多上 PostgreSQL 保并发,量大把 worker 拆出去保主服务。
打不开 / 丢数据?排障四问
| 症状 | 原因 | 解决 |
|---|---|---|
| 容器重建后表和数据全没了 | 没挂数据卷 | 补上-v "$(pwd)"/nocodb:/usr/app/data/后重建,以后别再省这一步 |
| 页面打不开,浏览器一直转圈 | 宿主机 8080 被其他服务占了 | 改成-p 9090:8080之类的新端口再访问 |
| 每次容器重启后全员重新登录 | NC_AUTH_JWT_SECRET没固定 | 设一个固定随机字符串并持久化 |
| 外部访问不到分享链接 / 邮件收不到 | NC_SITE_URL未配置,系统拼不出对外 URL | 设为实例的公网地址 |
接下来做这三件小事
- 把手头一张 CSV / Excel 导入 Base,替掉原来传来传去的共享表格
- 生成一个 API token 调一次 REST 端点,试试 NocoDB 的数据怎么被程序读取,SDK 源码在 packages/nocodb-sdk/
- 把 Grid 切成 Kanban,拖三条任务卡,体验一下视图切换带来的协作差异
更多细节查官方文档的 self-hosting 与视图章节;部署中遇到报错,去项目的 Discord 社区直接问,维护者和老用户都在那里。
【免费下载链接】nocodb🔥 🔥 🔥 A Free & Self-hostable Airtable Alternative项目地址: https://gitcode.com/GitHub_Trending/no/nocodb
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考