在Google App Engine上通过Strapi连接Postgres数据库失败求助
Google App Engine连接Cloud SQL Postgres数据库失败问题
我按照Strapi官方部署文档操作,在Google App Engine上部署Strapi时,始终无法连接到Google SQL Postgres数据库,报错如下:
2022-09-27 16:11:32 default[20220928t020816] [2022-09-27 16:11:32.307] debug: ⛔️ Server wasn't able to start properly. 2022-09-27 16:11:32 default[20220928t020816] [2022-09-27 16:11:32.309] error: connect ECONNREFUSED /cloudsql/project-id:us-central1:database-id/.s.PGSQL.5432
我的database.ts配置如下:
export default ({ env }) => ({ connection: { client: 'postgres', connection: { host: env('DATABASE_HOST', '127.0.0.1'), port: env.int('DATABASE_PORT', 5432), database: env('DATABASE_NAME', 'database-id'), user: env('DATABASE_USERNAME', 'strapi'), password: env('DATABASE_PASSWORD', 'strapi'), ssl: env.bool('DATABASE_SSL', false), }, }, });
app.yaml配置如下:
runtime: nodejs16 instance_class: F1 env_variables: ADMIN_JWT_SECRET: 'XXXXXXXXXXXXX' API_TOKEN_SALT: 'XXXXXXXXXXXXX' APP_KEYS: 'XXXXXXXXXXXXX' DATABASE_HOST: '/cloudsql/project-id:us-central1:database-id' DATABASE_PORT: '5432' DATABASE_NAME: 'database-id' DATABASE_USERNAME: 'postgres' DATABASE_PASSWORD: 'XXXXXXXXXXXXX' DATABASE_SSL: 'false' HOST: '0.0.0.0' JWT_SECRET: 'XXXXXXXXXXXXX' NODE_ENV: 'production' PORT: '1337' beta_settings: cloud_sql_instances: 'project-id:us-central1:database-id'
排查与解决步骤
验证Cloud SQL权限与区域
- 确认App Engine默认服务账号(
[你的项目ID]@appspot.gserviceaccount.com)已被授予Cloud SQL客户端角色,可在IAM控制台中配置。 - 确保Cloud SQL实例与App Engine部署在同一区域(配置中为us-central1),跨区域连接可能导致连接失败。
- 确认App Engine默认服务账号(
调整database.ts的套接字连接配置
使用Unix套接字连接Cloud SQL时,需将host替换为socketPath,且无需指定port参数,修改后的配置如下:export default ({ env }) => ({ connection: { client: 'postgres', connection: { socketPath: env('DATABASE_HOST'), database: env('DATABASE_NAME', 'database-id'), user: env('DATABASE_USERNAME', 'postgres'), password: env('DATABASE_PASSWORD'), ssl: env.bool('DATABASE_SSL', false), }, }, });核对app.yaml配置准确性
- 确认
beta_settings.cloud_sql_instances的值与DATABASE_HOST中的实例路径完全一致,无拼写错误。 - 检查
DATABASE_USERNAME和DATABASE_PASSWORD与Cloud SQL实例中设置的账号信息匹配。
- 确认
确认依赖包完整性
确保项目依赖中包含pg包(PostgreSQL客户端),可在package.json中查看,若缺失则执行npm install pg --save-prod安装。
内容的提问来源于stack exchange,提问作者Dallas Clark
相关产品推荐
相关产品推荐

