Метабаза в 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 вопроса:
Метабазе не удается подключиться к облачному SQL - облачный SQL является частью того же проекта, и App Engine авторизован.
После того, как я создаю своего администратора в 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, вы можете сделать один из двух способов:
В файле app.yaml настройте переменную среды, указывающую на файл ключа учетной записи службы с правильной конфигурацией авторизации для Cloud SQL:
env_variables: GOOGLE_APPLICATION_CREDENTIALS = [YOURKEYFILE].json
Ваш код выполняет выборку авторизованного ключа учетной записи службы из корзины и затем загружает его с помощью клиентской библиотеки облачного хранилища. Видя, что ваша среда выполнения настраивается, псевдокод, который будет переведен в код, который вы используете, выглядит следующим образом:
.....