7

我正在尝试使用 Google Cloud SQL (MySQL) 在 gcloud 引擎上设置元数据库。

我已经使用这个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]

我有两个问题:

  1. 元数据库无法连接到 Cloud SQL - Cloud SQL 是同一项目的一部分,并且 App Engine 已获得授权。

  2. 在 Metabase 中创建我的管理员用户后,我只能登录几秒钟(并且只是有时),但它一直把我扔到其中一个/setup/auth/login说密码不匹配(当它匹配时)。

我希望有人可以提供帮助-谢谢!

4

3 回答 3

1

因此,我们刚刚在 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 套接字。

相关文档可以在这里找到。

于 2019-09-05T19:58:51.290 回答
0

虽然不知道是什么原因,但我认为授权App引擎的服务账号是不够的,不能访问云SQL。

为了授权您的应用访问您的 Cloud SQL,您可以执行以下两种方法之一:

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

    env_variables:GOOGLE_APPLICATION_CREDENTIALS=[YOURKEYFILE].json

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

    ......

于 2018-05-04T08:03:43.270 回答
0

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

app.yaml至于在 Google App Engine 中设置 Metabase ,我包括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
于 2018-05-29T07:20:43.773 回答