如何在GCP上使用MySQL运行Ghost?

如何在GCP上使用MySQL运行Ghost?,mysql,docker,google-cloud-platform,ghost-blog,Mysql,Docker,Google Cloud Platform,Ghost Blog,建议正确的方法是使用appengine/Node,直到你达到了 按照Ghost网站上的说明将Ghost安装为NPM模块 Ghost网站上的说明说不要将Ghost安装为NPM模块。它不受支持 好的,CloudRun怎么样?我觉得这非常有希望。唯一的缺点是它使用内部SqlLite数据库,我需要连接到GCP上托管的现有MySQL数据库 显然,通过TCP连接到GCP上托管的MySQL数据库存在某种问题。不知道为什么,但是您可以在本地运行一个代理。我可以从命令行运行Ghost,如下所示: ghost co

建议正确的方法是使用appengine/Node,直到你达到了

按照Ghost网站上的说明将Ghost安装为NPM模块

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

好的,CloudRun怎么样?我觉得这非常有希望。唯一的缺点是它使用内部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
这并不荒谬:Docker容器是一个类似于VM的东西,有自己的“localhost”定义。文档建议使用“host.docker.internal”。不,同样的结果

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

但是没有办法设置socketPath!这不是ghost config的参数,我看不到提供配置文件的方法

所以我被阻碍了。我有点生气

  • 数据库让人们认为需要四个或五个独立的参数(不同DBMS之间不一致的参数)来打开连接是合法的
  • 幽灵人,因为他们不支持在我看来是显而易见的开箱即用的用例
  • GCP的人,只是因为他们让我很紧张
但最重要的是,我想克服这一点。一定有人让它工作了。

解释了两种不同类型的云运行环境:

云运行(完全管理):

  • 无法访问专有网络/计算引擎网络
  • 服务不是Istio服务网格的一部分
为Anthos运行云:

  • 访问专有网络/计算引擎网络
  • 服务参与Istio服务网格
至少Anthos的Cloud Run可以通过连接到Cloud SQL


socket可能在Ghost的
config.production.json
()中工作:

“服务器”:{
//“套接字”:“/cloudsql/”
“套接字”:“/cloudsql/mycompany-1943107437902:us-west1:mycompany博客数据库”
}

这个套接字可能需要
mkdir/cloudsql&&chmod 777/cloudsql

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

  • 有一个运行MySQL的云SQL实例
  • 要在云运行时部署Ghost docker映像吗
  • 我首先抓到了鬼魂的非官方码头工人形象

    docker pull ghost:3.12.0
    
    然后,我将该图像推送到我自己的GCR(云运行所需)

    docker标记重影:3.12.0 gcr.io//ghost:3.12.0
    docker push gcr.io//ghost:3.12.0
    
    然后,我按照这个步骤设置了CloudSQL实例。接下来,我创建了Cloud Run实例(使用我们上面创建的docker映像),并在“变量和机密”部分设置了一些参数(这些参数根本没有文档记录),如下所示:

    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>
    
    database\uuuu client=mysql
    数据库\连接\用户=根
    数据库连接密码=
    数据库连接套接字路径=/cloudsql/
    数据库连接数据库=ghost
    网址=
    
    localhost
    不运行
    mysqld
    (使用此配置,它不会尝试连接容器外部的任何东西);是否尝试过CloudSQL实例的主机名和端口?通过
    localhost
    连接可能需要设置
    stunnel
    。我尝试了主机名和端口:正如文档承诺的那样,它没有连接。正如谷歌推荐的那样,我使用了
    cloud\u sql\u proxy
    ,效果很好。刚刚更新了我的答案。所以问题是,你用的是哪一个?Martin-这不完全正确,这是一个文档问题,混淆了代理和直接访问。用于云运行的云SQL代理不支持IP寻址。Cloud Run可以使用IP地址(包括Cloud SQL)连接到任何公共服务,前提是防火墙已打开且凭据正确。Martin,我作为GDE与Cloud Run工程团队合作。@JohnHanley刚刚找到文档的一部分,解释了其中的差异。这可能就是完全托管希望连接到本地UNIX套接字的原因。没有VPC,可以对其应用防火墙规则。Martin,我指的是云SQL防火墙。
    server.socket
    用于配置Ghost以侦听该unix套接字上的传入连接。它不用于连接到该套接字上的数据库。如果您想通过套接字连接到数据库,您必须按照我在回答中的说明进行操作:我在这里更详细地介绍了这一点:
    docker pull ghost:3.12.0
    
    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
    
    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>