我正在尝试使用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 个问题:
元数据库无法连接到云 SQL - 云 SQL 是同一项目的一部分,并且 App Engine 已获得授权。
在 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,您可以执行以下两种方法之一:
-
在 app.yaml 文件中,配置一个环境变量,该变量指向具有正确授权配置的服务帐户密钥文件,用于 Cloud SQL:
env_variables: GOOGLE_APPLICATION_CREDENTIALS=[YOURKEYFILE].json
-
您的代码从存储桶中执行授权服务帐户密钥的提取,然后在云存储客户端库的帮助下加载它。看到您的运行时是自定义的,将转换为您使用的代码的伪代码如下:
.....
最好使用云代理连接到 SQL 实例。这样,您就不必在每次有新实例时都授权 CloudSQL 中的实例。有关云代理的更多信息,请单击此处
至于在Google App Engine中设置Metabase,我将在下面包括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