我正在關注CGP App Engine(nodejs-標準環境)上的Strapi教程,但無法啟動應用程式,因為Error: connect ECONNREFUSED 127.0.0.1:5432GCP Postgres 實體(公共 IP)拒絕了連接。
為什么我很困惑
- GCP服務理念Persmissions:
<project_name>@appspot.gserviceaccount.com具有Cloud SQL Client針對App Engine default service account所以這應該適用于所有的App Engine服務。 - 我有其他 App Engine 服務 (python) 成功連接到其他 Postgres 資料庫。這告訴我我有正確的權限、
Cloud SQL Admin API啟用和正確的用戶名/密碼。 - 該代碼在鏈接 GCP Postgres 資料庫時在本地(Docker)作業,但僅適用于 TCP 路由,而不適用于 Unix Socket SQL 代理:
../../cloud_sql_proxy -instances=<project_name>:europe-west1:<sql_instance_name>=tcp:5432 & (sleep 5 && yarn strapi start)
我可以登錄到本地托管的 Strapi 應用程式、添加用戶等,并且更改會反映在 GCP Postgres 資料庫中。
- 本地部署 (docker-compose.yml) 和 App 引擎 (app.yml) 之間的唯一區別是我如何設定環境變數。
#Dockerfile
FROM node:14-buster
RUN echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - && apt-get update -y && apt-get install google-cloud-sdk -y
RUN wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy && chmod x cloud_sql_proxy
#docker-compose.yml
version: "3.8"
services:
dev:
build: .
ports:
- "1337:1337"
volumes:
- .:/src
command: ["yarn", "run", "start"]
working_dir: /src
environment:
NODE_ENV: "production"
DATABASE_NAME: '<database name>'
DATABASE_USERNAME: '<username>'
DATABASE_PASSWORD: '<password>'
INSTANCE_CONNECTION_NAME: '<project_name>:europe-west1:<instance_name>'
# app.yml
runtime: nodejs14
instance_class: F2
service: strapi
env_variables:
HOST: '0.0.0.0'
NODE_ENV: 'local'
DATABASE_NAME: '<database name>'
DATABASE_USERNAME: '<username>'
DATABASE_PASSWORD: '<password>'
INSTANCE_CONNECTION_NAME: '<project_name>:europe-west1:<instance_name>'
beta_settings:
cloud_sql_instances: '<project_name>:europe-west1:<instance_name>'
nodejs專案中定義連接的代碼,來自Strapi教程:
module.exports = ({ env }) => ({
defaultConnection: 'default',
connections: {
default: {
connector: 'bookshelf',
settings: {
client: 'postgres',
socketPath: `/cloudsql/${env('INSTANCE_CONNECTION_NAME')}`,
database: env('DATABASE_NAME'),
username: env('DATABASE_USERNAME'),
password: env('DATABASE_PASSWORD'),
},
options: { }
},
},
});
我錯過了什么?我還能檢查什么?請有人幫助我結束這種瘋狂。
uj5u.com熱心網友回復:
為我修復的是以下內容:
- 轉到我的應用程式引擎的默認服務主體,并賦予其以下角色(如描述這里)
- 云 SQL 客戶端
- Cloud SQL 編輯器
- 云 SQL 管理員
- 在以下默認連接設定中將 socketPath鍵更改為“host”:
module.exports = ({ env }) => ({
defaultConnection: 'default',
connections: {
default: {
connector: 'bookshelf',
settings: {
client: 'postgres',
----> socketPath: `/cloudsql/${env('INSTANCE_CONNECTION_NAME')}`,
database: env('DATABASE_NAME'),
username: env('DATABASE_USERNAME'),
password: env('DATABASE_PASSWORD'),
},
options: { }
},
},
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/372083.html
標籤:节点.js PostgreSQL的 谷歌应用引擎 带皮
