
NocoDB 如何连接使用私有 CA 证书的 PostgreSQL【免费下载链接】nocodb A Free Self-hostable Airtable Alternative项目地址: https://gitcode.com/GitHub_Trending/no/nocodb如果你的 PostgreSQL 跑在机房或私有云里证书来自私有或自签 CANocoDB 默认的 SSL 信任方式无法完成校验直接连接会失败。NocoDB 的 Docker Compose 示例中有一个专门针对这种环境的配置postgres-private-ca。它的组合是外部 PostgreSQL在连接配置里内嵌私有 CA 证书并保留rejectUnauthorized: true的严格校验、外部 Redis以及 TraefikLets Encrypt 自动 HTTPS作为 NocoDB 的前端代理。完成本文操作后NocoDB 会带着 worker 一起启动并持续通过/api/v1/health健康检查。示例完整文件见 postgres-private-ca 示例目录适用场景在 README 中说明面向 on-prem 数据库和私有云环境。准备条件一台已安装 Docker 与 docker compose 的主机并且有一个可对外解析的域名示例通过 Traefik Lets Encrypt 对外提供 HTTPS外部 PostgreSQL 实例且其 SSL 证书由私有/自签 CA 签发。你需要拿到这张 CA 证书的 PEM 文件下文用your-ca.pem指代外部 Redis 实例及其连接地址。如果你的外部 Postgres 用的是公开受信 CA则不需要本文的ca配置——external-postgres-and-redis 示例 中说明公开受信 CA 保持默认的ssl.rejectUnauthorized: true即可自签或私有 CA 才应改用postgres-private-ca示例。复制示例目录在仓库根目录下把示例拷贝为独立的部署目录cp -r docker-compose/examples/postgres-private-ca ./my-deployment cd my-deployment后续所有编辑都在my-deployment中进行。第一步把 CA 证书压成单行字符串CA 证书必须以单行字符串的形式内嵌到db.json换行用\n表示。示例 README 给出的转换命令awk NF {sub(/\r/, ); printf %s\\n,$0;} your-ca.pem把your-ca.pem替换成你的 CA 证书文件路径执行后把输出的整行内容记下来稍后粘贴到db.json。第二步编辑 nocodb/db.jsonnocodb/db.json 是 knex 格式的数据库连接配置示例原值如下{ client: pg, connection: { host: your-private-db-host.internal, port: 5432, user: nocodb, password: CHANGE_ME_db_password, database: nocodb, ssl: { rejectUnauthorized: true, ca: -----BEGIN CERTIFICATE-----\nPASTE_YOUR_CA_PEM_HERE_AS_ONE_LINE\n-----END CERTIFICATE----- } } }需要替换的项示例 README 要求填写数据库的 host、凭据和端口并替换ca值host/port/user/password/database改为你私有 PostgreSQL 的实际值ca粘贴上一步 awk 输出的单行证书内容即-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----这种形式rejectUnauthorized保持true这正是本示例与公开 CA 场景的区别——NocoDB 用你提供的 CA 严格校验服务端证书而不是关闭校验。对比一下managed-postgres 的 db.json 的ssl只有rejectUnauthorized: true、没有ca字段因为托管数据库的 CA 已被信任。第三步编辑 docker.envdocker.env 中的关键项# Database NC_DB_JSON_FILE/usr/app/data/db.json # Redis NC_REDIS_URLredis://your-redis-host:6379 # Public URL (email links, webhooks, OAuth redirects). Set to your public-facing URL. NC_SITE_URLhttps://nocodb.example.com # Settings NC_SECURE_ATTACHMENTStrue NC_DISABLE_MUXtrue必须修改NC_REDIS_URL替换为你外部 Redis 的实际地址your-redis-host:6379是占位值NC_SITE_URL设置为你的对外 URL用于邮件链接、webhook 和 OAuth 跳转。NC_DB_JSON_FILE指向的是 db.json 在容器内的挂载路径保持不动NC_SECURE_ATTACHMENTS、NC_DISABLE_MUX按示例默认值即可。第四步编辑 docker-compose.ymldocker-compose.yml 定义了三个服务nocodb、workerNC_WORKER_CONTAINER: true复用同一镜像并共享nocodb_data卷、traefiktraefik:v3.680/443 端口Lets Encrypt 证书解析器。两处必须替换示例 README 明确要求nocodb服务 label 中的域名- traefik.http.routers.nocodb.ruleHost(nocodb.example.com)把nocodb.example.com换成你的域名。traefik服务 command 中的 Lets Encrypt 邮箱- --certificatesresolvers.letsencrypt.acme.emailadminexample.comnocodb与worker两个服务都把./nocodb/db.json绑定挂载到容器的/usr/app/data/db.json所以第二步的修改在两个进程上同时生效。docker-compose/examples的总 README 特别强调启动前必须替换所有占位值如CHANGE_ME_db_password、your-managed-db-host及同类本文的db.json、docker.env、docker-compose.yml编辑步骤就是为此。启动docker compose up -d验证连接是否成功这个示例内置了可观察的成功信号nocodb服务配置了 healthcheckwget -q --tries1 --spider http://localhost:8080/api/v1/health每 30 秒一次、超时 5 秒、最多重试 5 次start_period为 30 秒worker服务的启动条件是depends_on: nocodb: condition: service_healthy即 worker 只在nocodb通过健康检查后才会启动。因此worker容器进入运行状态就说明应用服务已经通过/api/v1/health检查配合 Traefik随后可通过https://你的域名访问 NocoDB 界面。如果nocodb反复不健康而worker一直停在等待状态优先回查db.json中的 host、凭据和单行ca格式——本示例的整条链路就是靠这几处配置建立到私有 CA PostgreSQL 的加密连接。边界与限制ca值必须是单行字符串换行写成\n直接把多行 PEM 粘进 JSON 会导致配置不合法。本示例的对外访问依赖 Traefik Lets Encrypt需要一个真实域名如果只想在内部网络暴露 NocoDB这个拓扑需要自行调整仓库示例中没有提供对应的现成配置。私有 CA 场景与公开 CA 场景是两个示例的分工docker-compose/examples 总览 的表格中postgres-private-ca的定位即 On-prem / private cloud DB。如果你不想手工编辑示例文件仓库还提供交互式安装向导./setup.sh即1_Auto_Upstall见 1_Auto_Upstall/README.md它会生成同样支持内嵌自定义 CA 的nocodb/db.json但不会替你填 CA 内容仍需按本文方式准备证书字符串。【免费下载链接】nocodb A Free Self-hostable Airtable Alternative项目地址: https://gitcode.com/GitHub_Trending/no/nocodb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考