Метабаза в Google App Engine

Я пытаюсь настроить метабазу на движке gcloud, используя Google Cloud SQL (MySQL).

Я запустил его, используя этот мерзавец и этот app.yaml:

runtime: custom
env: flex

# Metabase does not support horizontal scaling
#   https://github.com/metabase/metabase/issues/2754
#   https://cloud.google.com/appengine/docs/flexible/java/configuring-your-app-with-app-yaml
manual_scaling:
  instances: 1

env_variables:
 # MB_JETTY_PORT: 8080
  MB_DB_TYPE: mysql
  MB_DB_DBNAME: [db_name]
 # MB_DB_PORT: 5432
  MB_DB_USER: [db_user]
  MB_DB_PASS: [db_password]
 # MB_DB_HOST: 127.0.0.1
  CLOUD_SQL_INSTANCE: [project-id]:[location]:[instance-id]

У меня есть 2 вопроса:

  1. Метабазе не удается подключиться к облачному SQL - облачный SQL является частью того же проекта, и App Engine авторизован.

  2. После того, как я создаю своего администратора в Metabase, я могу войти в систему только на несколько секунд (и только иногда), но он продолжает бросать меня либо /setup или же /auth/login говоря пароль не совпадает (когда он совпадает).

Я надеюсь, что кто-то может помочь - спасибо!

2 ответа

Итак, мы только что запустили метабазу в Google App Engine с экземпляром Cloud SQL под управлением PostgreSQL, и это шаги, которые мы прошли.

Сначала создайте Dockerfile:

FROM gcr.io/google-appengine/openjdk:8

EXPOSE 8080

ENV JAVA_OPTS "-XX:+IgnoreUnrecognizedVMOptions -Dfile.encoding=UTF-8 --add-opens=java.base/java.net=ALL-UNNAMED --add-modules=java.xml.bind"
ENV JAVA_TOOL_OPTIONS "-Xmx1g"

ADD https://downloads.metabase.com/enterprise/v1.1.6/metabase.jar $APP_DESTINATION

Мы попытались уменьшить объем памяти, но 1 ГБ, похоже, было оптимальным вариантом. Наapp.yaml:

runtime: custom
env: flex

manual_scaling:
  instances: 1

resources:
  cpu: 1
  memory_gb: 1
  disk_size_gb: 10

readiness_check:
  path: "/api/health"
  check_interval_sec: 5
  timeout_sec: 5
  failure_threshold: 2
  success_threshold: 2
  app_start_timeout_sec: 600

beta_settings:
  cloud_sql_instances: <Instance-Connection-Name>=tcp:5432

env_variables:
  MB_DB_DBNAME: 'metabase'
  MB_DB_TYPE: 'postgres'
  MB_DB_HOST: '172.17.0.1'
  MB_DB_PORT: '5432'
  MB_DB_USER: '<username>'
  MB_DB_PASS: '<password>'
  MB_JETTY_PORT: '8080'

Обратите внимание beta_settings поле внизу, которое обрабатывает то, что akilesh rajделал вручную. Кроме того, конечный=tcp:5432 требуется, поскольку метабаза еще не поддерживает сокеты unix.

Соответствующую документацию можно найти здесь.

Облачный прокси-сервер лучше использовать для подключения к экземплярам SQL. Таким образом, вам не нужно авторизовать экземпляры в CloudSQL каждый раз, когда появляется новый экземпляр. Подробнее о CloudProxy здесь

Что касается настройки метабазы ​​в Google App Engine, я включаю app.yaml а также Dockerfile ниже.

app.yaml файл,

runtime: custom
env: flex

manual_scaling:
instances: 1

env variables:
    MB_DB_TYPE: mysql
    MB_DB_DBNAME: metabase
    MB_DB_PORT: 3306
    MB_DB_USER: root
    MB_DB_PASS: password
    MB_DB_HOST: 127.0.0.1
    METABASE_SQL_INSTANCE: instance_name

Dockerfile,

FROM gcr.io/google-appengine/openjdk:8

# Set locale to UTF-8
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8

# Install CloudProxy
ADD https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 ./cloud_sql_proxy
RUN chmod +x ./cloud_sql_proxy

#Download the latest version of Metabase
ADD http://downloads.metabase.com/v0.21.1/metabase.jar ./metabase.jar

CMD nohup ./cloud_sql_proxy -instances=$METABASE_SQL_INSTANCE=tcp:$MB_DB_PORT & java -jar /startup/metabase.jar

Хотя я не уверен в причине, я думаю, что авторизация служебной учетной записи ядра App недостаточно для доступа к облачному SQL.

Чтобы авторизовать ваше приложение для доступа к облачному SQL, вы можете сделать один из двух способов:

  1. В файле app.yaml настройте переменную среды, указывающую на файл ключа учетной записи службы с правильной конфигурацией авторизации для Cloud SQL:

    env_variables: GOOGLE_APPLICATION_CREDENTIALS = [YOURKEYFILE].json

  2. Ваш код выполняет выборку авторизованного ключа учетной записи службы из корзины и затем загружает его с помощью клиентской библиотеки облачного хранилища. Видя, что ваша среда выполнения настраивается, псевдокод, который будет переведен в код, который вы используете, выглядит следующим образом:

    .....

Другие вопросы по тегам