3

我浏览了所有 Google 关键字变体,并阅读了每个教程和指南两次。无法解决我的问题。

我有以下设置:

  • Google App Engine(灵活)
  • 谷歌云 SQL(使用 PostgreSQL)
  • 与 psql 连接时已安装云代理并在本地工作

问题

一旦我将 Hydro 部署到我的应用程序引擎实例,我将收到错误消息日志和错误:

level=info msg="Connecting with postgres://*:*@/cloudsql/myProjectID:us-central1:myCloudSQLInstance/.s.PGSQL.5432/postgres?sslmode=disable"
level=error msg="An error occurred" error="Could not Connect to SQL: dial tcp [::1]:5432: getsockopt: connection refused"

当我部署 Hydra 时,套接字在/cloudsql/myProjectID:us-central1:myCloudSQLInstance名为 的文件夹中可用.s.PGSQL.5432。我还收到消息,/cloudsql/myProjectID:us-central1:myCloudSQLInstance/.s.PGSQL.5432当我使用docker logs myDockerImage. 在另一个线程中,我读到此配置可以工作。我也尝试过/cloudsql/myProjectID:us-central1:myCloudSQLInstance:5432,即使没有端口。

似乎 Hydra 容器无法通过另一个容器(通过应用引擎自动发布)中的 Cloud SQL 套接字。我也可以说,插座需要时间预热不是问题。即使几分钟后,我也会收到相同的错误日志。最后,整个实例由于致命错误而崩溃(具有相同的错误消息)

在本地测试它我像这样启动代理:(案例1)

cloud_sql_proxy.exe -instances=myProjectID:us-central1:myCloudSQLInstance=tcp:5433

我也试过:(案例2)

cloud_sql_proxy.exe -instances=myProjectID:us-central1:myCloudSQLInstance=tcp:0.0.0.0:5433

在这两种情况下,我都更改了数据库 url,例如:

docker run -d --name hydra --network host -p 9000:4444 
-e SYSTEM_SECRET=my_long_secret
-e DATABASE_URL=postgres://myUser:myPassword@127.0.0.1:5433/postgres?sslmode=disable 
-e OAUTH2_ISSUER_URL=https://localhost:9000/ 
-e OAUTH2_CONSENT_URL=http://localhost:9020/consent 
-e OAUTH2_LOGIN_URL=http://localhost:9020/login oryd/hydra:latest serve

这将适用于案例 1。但是对于这两种配置,它都会失败,并且容器会在几分钟后崩溃,就像在应用引擎上一样。我也尝试使用ipconfig并获得了10.0.75.1. 可以从 Hydra 容器内部 Ping 到该 IP。

但是当我psql像这样在本地使用时:

psql "host=127.0.0.1 port=5433 sslmode=disable dbname=myDatabase user=myDBUser"

使用该命令,我可以连接到代理和 Cloud SQL 数据库。

哦,Google SQL Admin API 已激活并正常工作。

这是我用于 Google App Engine的app.yaml :

runtime: custom
env: flex
automatic_scaling:
  min_num_instances: 1
resources:
  cpu: 1
  memory_gb: 2
  disk_size_gb: 10
env_variables:
  DATABASE_URL: "postgres://myuser:mypass@/cloudsql/myProjectID:us-central1:myCloudSQLInstance/.s.PGSQL.5432?sslmode=disable"
  SYSTEM_SECRET: "my_long_secret"
  OAUTH2_ISSUER_URL: "https://myAuth.appspot.com/"
  OAUTH2_CONSENT_URL: "http://example.com/consent"
  OAUTH2_LOGIN_URL: "http://example.com/login"
beta_settings:
  cloud_sql_instances: "myProjectID:us-central1:myCloudSQLInstance"

所以我的问题是,是否需要一些配置才能使用 docker 连接到 Google Cloud SQL 代理?也许我缺少数据库字符串中的某些内容。这真的很难调试,因为只有connection refused.

2018 年 6 月 29 日更新

它现在可以在我的本地机器上运行。

我使用以下命令启动 Cloud SQL 代理的 docker 映像:

docker run -d --name cloudsql -v c:\Users\myWindowsUser\Desktop\auth\cloudproxy:/cloudsql 
-v c:\Users\myWindowsUser\auth\cloudproxy\config:/config 
-p 127.0.0.1:3307:3307 gcr.io/cloudsql-docker/gce-proxy:1.11 
/cloud_sql_proxy 
-instances=myProjectID:us-central1:myCloudSQLInstance=tcp:0.0.0.0:3307 
-credential_file=/config/my-auth.json

在 Windows 上,您需要在设置/共享驱动器中检查 C:(在我的情况下)。

然后postgres://myUser:myPassword@0.0.0.0:3307/postgres?sslmode=disable作为DATABASE_URL.

现在我只需要知道如何让它在 Google App Engine 上运行。我会及时通知你的!

更新 2:

得到它的工作。

我有两个问题:

  • UNIX 套接字无法访问
  • 数据库 sting 是基于 TCP 的

解决方案

docker run -d --name hydra --network host --volume=/cloudsql:/cloudsql 
-p 9000:4444 -e SYSTEM_SECRET=my_long_secret
-e DATABASE_URL=postgres:///myDatabase?host\=/cloudsql/myProjectID:us-central1:myCloudSQLInstance/\&sslmode=disable\&user=myDBUser\&password=myPassword 
-e OAUTH2_ISSUER_URL=https://localhost:9000/ 
-e OAUTH2_CONSENT_URL=http://localhost:9020/consent 
-e OAUTH2_LOGIN_URL=http://localhost:9020/login oryd/hydra:latest serve

通过 hydra 的配置,我能够连接到 Cloud SQL 数据库。也许这对某人有帮助。所以问题解决了:)!

4

0 回答 0