Я изучил все варианты ключевых слов Google и дважды прочитал каждый учебник и руководство. Не могу решить мою проблему.
У меня есть следующие настройки:
- Google App Engine (гибкий)
- Google Cloud SQL (с использованием PostgreSQL)
- Cloud Proxy установлен и работает локально при подключении с помощью 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 в другом контейнере (который автоматически публикуется через механизм приложений). Я также могу сказать, что это не проблема, что розетке нужно время, чтобы прогреться. Даже через несколько минут я получаю те же журналы ошибок. И, наконец, весь экземпляр падает из-за фатальной ошибки (с тем же сообщением об ошибке)
Локальное тестирование. Я запускаю прокси-сервер следующим образом: (case 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 к этому IP возможен.
Но когда я использую psql
локально, вот так:
psql "host=127.0.0.1 port=5433 sslmode=disable dbname=myDatabase user=myDBUser"
С помощью этой команды я могу подключиться к прокси-серверу и базе данных Cloud SQL.
Да, и API администратора Google SQL активирован и работает.
Это мой app.yaml для Google App Engine:
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"
Так что мой вопрос: есть ли какая-то конфигурация, необходимая для подключения к Google Cloud SQL Proxy с помощью докера? Может быть, в строке данных есть что-то, чего мне не хватает. Это действительно трудно отладить, так как есть только сообщение об ошибке connection refused
.
Обновление 06/29/2018
Теперь он работает на моей локальной машине.
Я использовал следующую команду для запуска образа Docker для прокси-сервера Cloud SQL:
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 недоступно
- База данных была основана на 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. Может быть, это кому-то помогает. Итак, проблема решена:)!