You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sequelize连接Google Cloud SQL(PostgreSQL)报错:服务器不支持SSL连接

Sequelize迁移GCP PostgreSQL时报错"The server does not support SSL connections"的解决方案

问题背景

我在将Node.js/Sequelize应用的模型迁移至Google Cloud托管的PostgreSQL数据库时遇到异常:GCP已设置为仅允许SSL连接,且能通过Postico2、BeeKeeper Studio使用SSL证书成功连接数据库,但执行NODE_ENV=production npx sequelize db:migrate时,报错如下:

Sequelize CLI [Node: 19.0.0, CLI: 6.6.0, ORM: 6.29.3]

** config.js **
Loaded configuration file "config/config.js".
Using environment "production".

**ERROR: The server does not support SSL connections**

开发和测试环境迁移正常,且用pg原生客户端(Client/Pool)能成功连接GCP PostgreSQL,但Sequelize配置始终无法正常工作。

可能的原因及解决办法

1. SSL配置冲突+证书格式问题

当前配置同时设置了顶层ssl: true和dialectOptions.ssl,可能导致Sequelize向pg客户端传递的SSL配置冲突;另外fs.readFileSync默认返回Buffer,而pg客户端要求证书内容为字符串格式,这也是原生pg代码能成功但Sequelize失败的关键差异。

修改production配置如下:

production: {
  username: process.env.PROD_DB_USERNAME,
  password: process.env.PROD_DB_PASSWORD,
  database: process.env.PROD_DB_NAME,
  host: process.env.PROD_DB_HOSTNAME,
  port: process.env.PROD_DB_PORT,
  dialect: 'postgres',
  // 移除顶层ssl: true,避免配置冲突
  dialectOptions: {
    ssl: {
      require: true,
      rejectUnauthorized: false,
      // 将读取的Buffer转换为字符串格式
      ca: fs.readFileSync(path.join(__dirname,'..','ssl','server-ca.pem')).toString(),
      cert: fs.readFileSync(path.join(__dirname,'..','ssl','client-cert.pem')).toString(),
      key: fs.readFileSync(path.join(__dirname,'..','ssl','client-key.pem')).toString()
    }
  },
  debug: true
}

2. 验证证书路径正确性

由于通过.sequelizerc加载配置,可能存在__dirname路径指向不符合预期的情况,导致证书文件无法读取。可在config.js中添加日志打印确认:

// 在production配置上方添加
const caPath = path.join(__dirname,'..','ssl','server-ca.pem');
console.log('CA证书路径:', caPath);
console.log('CA证书是否存在:', fs.existsSync(caPath));

执行迁移命令时查看控制台输出,确保证书路径正确且文件存在。

3. 确认环境变量正确传递

确保执行迁移命令时,所有PROD_DB_*开头的环境变量已正确设置,避免因环境变量缺失导致连接到错误的数据库(比如本地未开启SSL的PostgreSQL)。可在config.js中添加打印:

console.log('生产环境DB主机:', process.env.PROD_DB_HOSTNAME);
console.log('生产环境DB端口:', process.env.PROD_DB_PORT);

验证

修改配置后,重新执行迁移命令:

NODE_ENV=production npx sequelize db:migrate

若配置正确,应能成功完成迁移。

内容的提问来源于stack exchange,提问作者Jason Jacobson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 22:49:56