NocoDB 如何用 Helm Chart 在 Kubernetes 上部署并接入外部 PostgreSQL 与 Redis
2026/9/9 21:55:06 网站建设 项目流程

NocoDB 如何用 Helm Chart 在 Kubernetes 上部署并接入外部 PostgreSQL 与 Redis

【免费下载链接】nocodb🔥 🔥 🔥 A Free & Self-hostable Airtable Alternative项目地址: https://gitcode.com/GitHub_Trending/no/nocodb

NocoDB 仓库自带一个生产级 Helm Chart(charts/nocodb/README.md),它的设计前提是把状态放在集群外:PostgreSQL 和 Redis 都由外部提供,Chart 只负责运行 NocoDB 应用容器和后台 worker。本文的目标是:在一个已有 Kubernetes 集群上,用这个 Chart 部署 NocoDB,并通过 Secret 把外部 PostgreSQL 与 Redis 的连接信息接进来,最后用 Chart 自带的健康检查确认部署成功。

准备条件

按 Helm Chart 说明 的 Prerequisites 一节,开始前需要:

  • Kubernetes 1.23+
  • Helm 3.8+(需要 OCI 支持,Chart 通过oci://仓库安装)
  • 外部 PostgreSQL 和 Redis 实例;附件用的 S3 兼容存储桶在部署后从 NocoDB 管理面板里配置
  • 一个 Ingress 控制器(可选配 cert-manager),用于外部访问

Chart 当前版本为 1.0.0,appVersion 2026.06.1(见 Chart.yaml)。默认replicaCount为 2、worker 启用且副本数为 2,也就是说默认部署方式本身就要求配置 Redis,否则安装时会校验失败(下文有具体报错)。

方式一:预先创建 Secret 并引用(生产推荐路径)

Chart 要求连接信息通过 Secret 注入。README 的 Secret key contract 约定创建一个Secret,然后让*.existingSecret都指向它:

Key用途文档示例值
DATABASE_URLPostgres 连接串postgresql://user:pass@host:5432/nocodb?sslmode=require
NC_REDIS_URLRedis 连接串rediss://:pass@host:6379
NC_AUTH_JWT_SECRETJWT 密钥(可选,留空时自动生成)随机 ≥32 字符
NC_CONNECTION_ENCRYPT_KEY数据源加密密钥(可选,自动生成,不可轮换随机 ≥32 字符

后两个 key 是可选项:auth.existingSecret留空时,Chart 会在自己管理的 Secret 里自动生成这两个值并在升级时复用(见 Secret 模板 与 参数校验逻辑)。因此最小配置只需要DATABASE_URLNC_REDIS_URL两个 key。

把下面命令中postgresql://...rediss://...替换为你自己的真实连接串(格式对照上表的文档示例值):

kubectl -n nocodb create secret generic nocodb-secrets \ --from-literal=DATABASE_URL='postgresql://<你的用户>:<你的密码>@<Postgres主机>:5432/nocodb?sslmode=require' \ --from-literal=NC_REDIS_URL='rediss://:<你的Redis密码>@<Redis主机>:6379'

然后执行 README TL;DR 给出的安装命令:

helm install nocodb oci://ghcr.io/nocodb/charts/nocodb --version 1.0.0 \ --set externalDatabase.existingSecret=nocodb-secrets \ --set externalRedis.existingSecret=nocodb-secrets

existingSecretUrlKey默认为DATABASE_URLNC_REDIS_URL,与上面的 Secret key 一一对应;如果 Secret 里的 key 名不同,需要分别设置externalDatabase.existingSecretUrlKey/externalRedis.existingSecretUrlKey(默认参数中有说明)。

方式二:内联填写连接字段(评估环境用)

不想预先建 Secret 时,也可以直接把字段传给 Chart,它会拼装出完整 URL 并自行创建 Secret。README 明确标注password类字段是 "eval only; use existingSecret in prod",所以这条路径只适合评估:

helm install nocodb oci://ghcr.io/nocodb/charts/nocodb --version 1.0.0 \ --set externalDatabase.host=<Postgres主机> \ --set externalDatabase.database=nocodb \ --set externalDatabase.username=nocodb \ --set externalDatabase.password=<你的密码> \ --set externalDatabase.sslMode=prefer \ --set externalRedis.host=<Redis主机> \ --set externalRedis.password=<你的Redis密码>

拼装规则见 helpers:Postgres 按postgresql://user:pass@host:port/database?sslmode=<sslMode>组装;Redis 默认redis://方案,设置externalRedis.tls=true时改用rediss://externalDatabase各项默认值为port: 5432database: nocodbusername: nocodbsslMode: preferexternalRedis默认port: 6379

可选:开启 Ingress 对外访问

默认service.typeClusterIP(端口 8080),ingress.enabled默认false。如果集群里有 Ingress 控制器,安装时加上:

--set ingress.enabled=true \ --set ingress.hosts[0].host=nocodb.example.com \ --set ingress.tls[0].hosts[0].host=nocodb.example.com \ --set ingress.tls[0].secretName=<你的TLS证书Secret>

其中nocodb.example.com需要换成你自己解析到集群入口的域名。注意一个联动行为:nocodb.publicUrl留空且配置了 TLS 时,NC_SITE_URL会自动取第一个 ingress host 推导(见 ConfigMap 模板),所以不必额外设置。cert-manager 的 cluster-issuer 注解通过ingress.annotations传入。

验证部署结果

安装完成后,Helm 会输出 NOTES 提示(模板见 NOTES.txt),其中包含访问方式和健康检查命令。按提示执行健康检查(以 release 名nocodb、默认命名空间为例,<ns>替换为你的实际命名空间):

kubectl -n <ns> exec deploy/nocodb -- wget -qO- http://localhost:8080/api/v1/health

应用的 liveness/readiness/startup 探针都指向同一个/api/v1/health端点(App 部署模板),因此该命令有响应即说明应用已启动。

没有 Ingress 时,NOTES 给出的本地访问方式是:

kubectl -n <ns> port-forward svc/nocodb 8080:8080 # 然后打开 http://localhost:8080

多副本部署的两个硬性约束

1. 多副本 / worker 必须配置 Redis,否则安装即失败。校验逻辑在replicaCount > 1worker.enabled=trueautoscaling.enabled=true且 Redis 未配置时直接 fail,报错原文:

NocoDB requires Redis for multi-replica or worker deployments. Set externalRedis.host (or externalRedis.existingSecret), or set replicaCount=1, autoscaling.enabled=false, and worker.enabled=false.

如果只想先跑单副本、还没有 Redis,按报错提示的三个开关把部署降级为单副本(replicaCount=1, autoscaling.enabled=false, worker.enabled=false)。此时 NOTES 会输出文档中的警告:"WARNING: Redis is not configured. This deployment is limited to a single replica."

2. 多副本部署下附件需要 S3 存储。NOTES 同时提示:未配置对象存储前,附件写入各 Pod 的本地存储(/usr/app/data,默认 emptyDir),"will NOT be consistent across replicas"。解决方法是安装后在 NocoDB 管理面板的 App Store > Storage 里配置 S3 兼容存储;这是文档明确给出的操作路径,Chart 本身不替你配置。若坚持用本地存储,可启用persistence.enabled=true把 PVC 挂到/usr/app/data(默认 10Gi、ReadWriteOnce,见 values.yaml),但该模式与多副本的一致性限制仍由读者自行权衡。

资源规格

默认 app 与 worker 的 requests 均为cpu: 1, memory: 2Gi;README 建议 2Gi 内存、最低 1Gi。节点资源紧张时在--set resources.requests.memory=1Gi--set worker.resources.requests.memory=1Gi处下调即可。

参考

  • Chart 完整参数表与安装命令:charts/nocodb/README.md
  • 默认参数及各项注释:charts/nocodb/values.yaml
  • CI 中"仅外部依赖"的 values 写法(existingSecret同时指向 DB/Redis/auth):charts/nocodb/ci/external-only-values.yaml

【免费下载链接】nocodb🔥 🔥 🔥 A Free & Self-hostable Airtable Alternative项目地址: https://gitcode.com/GitHub_Trending/no/nocodb

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询