如何在GCP上使用MySQL运行Ghost?
建议正确的方法是使用appengine/Node,直到你达到了 按照Ghost网站上的说明将Ghost安装为NPM模块 Ghost网站上的说明说不要将Ghost安装为NPM模块。它不受支持 好的,CloudRun怎么样?我觉得这非常有希望。唯一的缺点是它使用内部SqlLite数据库,我需要连接到GCP上托管的现有MySQL数据库 显然,通过TCP连接到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
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服务网格的一部分
- 访问专有网络/计算引擎网络
- 服务参与Istio服务网格
socket可能在Ghost的
config.production.json
()中工作:
“服务器”:{
//“套接字”:“/cloudsql/”
“套接字”:“/cloudsql/mycompany-1943107437902:us-west1:mycompany博客数据库”
}
这个套接字可能需要
mkdir/cloudsql&&chmod 777/cloudsql
我刚刚花了最后一个小时试图解决这个问题,并设法找到了一个可行的解决方案。这假设您:
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>