在Gcloud中部署Metabase后,GAE应用网址显示错误页面。
我按照此链接https://www.cloudbooklet.com/install-metabase-on-google-cloud-with-docker-app-engine/上的所有说明在GAE上部署了配置数据库。
我尝试同时使用mysql和Postgres db,但结果始终是错误页面
这是我的App.yaml代码。
env: flex
manual_scaling:
instances: 1
env_variables:
MB_JETTY_PORT: 8080
MB_DB_TYPE: postgres
MB_DB_DBNAME: metabase
MB_DB_PORT: 5432
MB_DB_USER: root
MB_DB_PASS: password
MB_DB_HOST: 127.0.0.1
beta_settings:
cloud_sql_instances: <sql_instance>=tcp:5432
这是我的dockerfile
FROM gcr.io/google-appengine/openjdk
EXPOSE 8080
ENV PORT 8080
ENV MB_PORT 8080
ENV MB_JETTY_PORT 8080
ENV MB_DB_PORT 5432
ENV METABASE_SQL_INSTANCE <sql_instance>=tcp:5432
ENV JAVA_OPTS "-XX:+IgnoreUnrecognizedVMOptions -Dfile.encoding=UTF-8 --add-opens=java.base/java.net=ALL-UNNAMED --add-modules=java.xml.bind"
ADD https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 ./cloud_sql_proxy
ADD http://downloads.metabase.com/v0.33.2/metabase.jar /metabase.jar
RUN chmod +x ./cloud_sql_proxy
CMD ./cloud_sql_proxy -instances=$METABASE_SQL_INSTANCE=tcp:$MB_DB_PORT & java -jar ./metabase.jar
以下是我在控制台日志上看到的错误
INFO metabase.driver :: Registered abstract driver :sql ?
App Engine URL上的错误消息还显示以下内容,
Error: Server Error
The server encountered a temporary error and could not complete your request.
Please try again in 30 seconds.
我尝试了所有可能找到的选项,请为我提供可行的解决方案。
答案 0 :(得分:0)
首先,请按照Connecting from App Engine page上的说明进行操作。确保已启用SQL Admin API,并且所使用的服务帐户具有Cloud SQL Connect
IAM角色。
第二,您不需要在docker容器中运行代理。当您在app.yml中指定它时,它允许您在172.17.0.1:<PORT>
上对其进行访问。 (尽管如果您使用的是容器,我强烈建议您改用Cloud Run)。
最后,根据此Metabase setup instructions,您需要向容器提供环境变量,以指定要使用的数据库。这些环境变量的格式均为MB_DB_*
。
这是没有代理的dockerfile的样子:
FROM gcr.io/google-appengine/openjdk
ENV MB_JETTY_PORT 8080
ENV MB_DB_TYPE postgres
ENV MB_DB_HOST 172.17.0.1
ENV MB_DB_PORT 5432
ENV MB_DB_USER <your-username>
ENV MB_DB_PASS <your-password>
ENV MB_DB_DBNAME <your-database>
ENV JAVA_OPTS "-XX:+IgnoreUnrecognizedVMOptions -Dfile.encoding=UTF-8 --add-opens=java.base/java.net=ALL-UNNAMED --add-modules=java.xml.bind"
ENTRYPOINT java -jar ./metabase.jar
要获得奖励积分,您可以考虑使用distroless container(gcr.io/distroless/java:11
)作为基础(特别是如果您切换到Cloud Run)。