如何配置TypeORM让Cloud Run通过Unix套接字连接Cloud SQL PostgreSQL?
Cloud Run + TypeORM 连接 Cloud SQL PostgreSQL(Unix套接字)配置方案
正确TypeORM配置(二选一)
方案1:拆分参数配置(推荐)
避免使用url字段,直接配置数据库参数并在extra中指定套接字路径:
const config = { type: 'postgres', username: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_NAME, extra: { socketPath: process.env.DB_HOST, // 对应值:/cloudsql/PROJECT:REGION:INSTANCE idleTimeoutMillis: 60000, statement_timeout: 60000, connectionTimeoutMillis: 60000, keepAlive: true, ssl: false } };
方案2:Unix套接字专用连接字符串
若坚持使用url,需按PostgreSQL规范通过查询参数指定套接字路径:
const config = { type: 'postgres', url: `postgresql://${process.env.DB_USER}:${process.env.DB_PASSWORD}@/${process.env.DB_NAME}?host=${process.env.DB_HOST}`, extra: { idleTimeoutMillis: 60000, statement_timeout: 60000, connectionTimeoutMillis: 60000, keepAlive: true, ssl: false } };
同容器Cloud SQL Auth Proxy启动要求
确保容器启动命令同时启动Auth Proxy与Node服务,例如:
/cloud_sql_proxy -instances=PROJECT:REGION:INSTANCE=/cloudsql/PROJECT:REGION:INSTANCE & node your-app.js
Auth Proxy会自动在/cloudsql目录下创建对应实例的Unix套接字文件。
必查验证项
- 确认Cloud Run服务配置中
--add-cloudsql-instances参数准确指向目标实例 - 容器内
/cloudsql目录需存在且应用进程有读取权限 - 服务账号已授予
Cloud SQL Client角色 - 无需额外配置VPC连接器(Unix套接字连接不依赖VPC)
内容的提问来源于stack exchange,提问作者Kobi Cohen
相关产品推荐
相关产品推荐

