mysql - 如何在 GCP 上运行 Ghost with MySQL?

标签 mysql docker google-cloud-platform ghost-blog

documentation on GCP建议正确的方法是使用 App Engine/Node - 直到您完成上述步骤

Follow the instructions on the Ghost website to install Ghost as an NPM Module.

嗯,Ghost 网站上的说明说不要将 Ghost 安装为 NPM 模块。不支持。

好的,CloudRun 怎么样?我发现这非常有前途sample on Git 。唯一的缺点是它使用内部 SqlLite 数据库,我需要连接到 GCP 上托管的现有 MySQL 数据库。

显然,通过 TCP 连接到 GCP 上托管的 MySQL 数据库时存在某种问题。不知道为什么,但是您可以在本地运行一个代理。我可以从命令行运行 Ghost,如下所示:

ghost config --ip 0.0.0.0 --port 8080 --no-prompt --url http://localhost:8080 --db mysql --dbhost localhost --dbuser ghost_service --dbpass <pass> --dbname darkstore_blog_db
ghost start

而且它似乎有效。

但是,使用 Dockerfile 中的相同参数,我得到

app_1  | [2020-02-01 02:15:39] ERROR Invalid database host.
app_1  |
app_1  | Invalid database host.
app_1  |
app_1  | "Please double check your database config."
app_1  |
app_1  | Error ID:
app_1  |     500

这并不荒谬:Docker 容器是一个类似 VM 的东西,有自己的“localhost”定义。该文档建议使用“host.docker.internal”。不,结果相同。

好吧,好吧,我不需要在本地 Docker 容器上运行它。问题是,如果它在CloudRun下运行,它当然不能使用代理。当然,我应该将名为“socketPath”的配置值设置为值 /cloudsql/mycompany-1943107437902:us-west1:mycompany-blog-db

但是没有办法设置socketPath!这不是 Ghost 配置的参数,而且我没有找到提供配置文件的方法。

所以我陷入了困境。我有点生气

  • 数据库人员认为需要四个或五个单独的参数(不同 DBMS 之间不一致的参数)来打开连接是合法的
  • Ghost 人员,因为他们不支持在我看来是开箱即用的明显用例
  • GCP 人员,只是因为他们让我心烦意乱

但最重要的是,我想克服这个问题。一定有人已经让这个工作了。

最佳答案

我刚刚花了最后一个小时试图解决这个问题,并设法想出了一个可行的解决方案。这假设您:

  1. 拥有运行 MySQL 的 Cloud SQL 实例
  2. 想要在 Cloud Run 上部署 Ghost docker 镜像

我首先抓取了 Ghost 的非官方 docker 镜像

docker pull ghost:3.12.0

然后,我将该镜像推送到我自己的 GCR(Cloud Run 所需)。

docker tag ghost:3.12.0 gcr.io/<GCP_PROJECT_NAME>/ghost:3.12.0
docker push gcr.io/<GCP_PROJECT_NAME>/ghost:3.12.0

然后我按照这个tutorial设置 Cloud SQL 实例。接下来,我创建了 Cloud Run 实例(使用我们上面创建的 docker 镜像),并在“变量和 secret ”部分(根本没有记录)中设置了一些参数,如下所示:

database__client=mysql
database__connection__user=root
database__connection__password=<DB PASSWORD>
database__connection__socketPath=/cloudsql/<INSTANCE_CONNECTION_NAME>
database__connection__database=ghost
url=<HOSTNAME>

关于mysql - 如何在 GCP 上运行 Ghost with MySQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60013643/

相关文章:

MySQL 每行每列的投票计数

php - 我如何使用 php 显示来自 mysql 数据库的非英文字符?

docker - 添加主机或 extra_host 不适用于 Windows 容器

c# - 暴露的端口 0 未映射。测试容器 C#

node.js - 如何解决GKE容器中的EADDRINUSE问题?

google-cloud-platform - 用于谷歌存储的静态网站的 Terraform 谷歌存储桶 - 403

java - Android Studio 无法找到显式 Activity 类

mysql - 为什么 HAVING MAX() 返回的值与 SELECT MAX() 不同?

docker - Docker运行nanoserver无法启动

python - 了解 google ai 平台自定义预测例程的输入