Google App Engine 上的元数据库



我正在尝试使用Google Cloud SQL(MySQL(在gcloud引擎上设置Metabase。

我用这个git和这个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说密码不匹配(当它匹配时(。

我希望有人能帮忙 - 谢谢!

因此,我们刚刚在Google App Engine中运行元数据库,并使用运行PostgreSQL的Cloud SQL实例,这些是我们经历的步骤。

首先,创建一个 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 GB 似乎是最佳点。上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 套接字。

可在此处找到相关文档。

虽然我不确定原因,但我认为授权 App Engine 的服务帐户不足以访问云 SQL。

要授权您的应用程序访问您的云 SQL,您可以执行以下两种方法之一:

  1. 在 app.yaml 文件中,配置一个环境变量,该变量指向具有正确授权配置的服务帐户密钥文件,用于 Cloud SQL:

    env_variables: GOOGLE_APPLICATION_CREDENTIALS=[YOURKEYFILE].json

  2. 您的代码从存储桶中执行授权服务帐户密钥的提取,然后在云存储客户端库的帮助下加载它。看到您的运行时是自定义的,将转换为您使用的代码的伪代码如下:

    .....

最好使用云代理连接到 SQL 实例。这样,您就不必在每次有新实例时都授权 CloudSQL 中的实例。有关云代理的更多信息,请单击此处

至于在Google App Engine中设置Metabase,我将在下面包括app.yamlDockerfile

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

相关内容

  • 没有找到相关文章

最新更新