关于Google Cloud端口问题的讨论?

大家好!我尝试了几次在 Google Cloud 上部署 Discourse,目前正在进行第三次尝试:创建一台 Ubuntu 18.04 最小化版本的虚拟机实例,并通过终端手动安装 Discourse。按照指南操作,一切看起来都正常,但在完成 ./discourse-setup 后,我无法访问该站点

我也尝试过通过 Google 市场的“一键部署”解决方案(包括 Google 官方和 Bitnami 提供的方案)来安装 Discourse。这样做时,我可以访问 Discourse 的落地页。

我怀疑问题出在 Google 的端口配置上(而现成的安装方案可能规避了这个问题),但我对这方面了解太少,无法自行排查。大家有什么想法吗?

2 个赞

这可能与防火墙有关吗?
据我理解,Google Cloud 需要勾选两个复选框以允许对虚拟机进行公共访问。如有需要,稍后也可以进行相应配置。

3 个赞

嘿 Bhanu,感谢你的建议!

那些选项已经勾选了!

仍然无法正常工作。尝试 ping 该网站,一切看起来正常:

SSH 登录到网站并运行 netstat 检查端口,结果如下:
ports
不过我对 netstat 不太熟悉。

1 个赞

我现在觉得,也许我并没有运行 Web 服务器?我需要在安装 Discourse 之前或之后安装 Nginx 吗?我顺着这个帖子的思路,发现它和我的问题完全一致。

好的,我开始认为这就是问题所在。Nginx 似乎已经安装了,但没有运行。我杀死了 docker-proxy 的进程 ID 14311 和 14295,然后启动了 Nginx。现在 Nginx 已绑定到 80 端口,当我访问我的网站时,看到的是 Nginx 的欢迎页面!
接下来要重新让 Docker/Discourse 正常运行。

我还找到了这份指南,介绍了如何在较旧版本的 Ubuntu 上安装和配置 Discourse 论坛与 Nginx。他们似乎出于某种原因将 Docker 的端口从 80 改成了其他端口。也许这里存在某种冲突。

不知怎么地,我让 Nginx 运行在 80 端口,同时让 Docker-proxy 监听 8060 端口(HTTP)和 9443 端口(HTTPS),这是根据另一份教程的建议做到的。但做到这一步后,我又感到迷茫了。Discourse 看起来是个很棒的论坛,但显然对于像我这样的新手来说,在 Google Cloud 上安装它简直不可能。

2 个赞

除非您计划将服务器用于托管 Discourse 以外的用途,否则无需运行专用 Web 服务器,因为 Discourse 已内置 Nginx 服务器。能否确认您的服务器已分配公共 IP 地址,并且已配置为允许外部连接端口 22、80 和 443?

参见:VPC firewall rules  |  Cloud Next Generation Firewall  |  Google Cloud Documentation

2 个赞

是的。我的 Google 虚拟机实例拥有公网 IP,并且已开放 22、80 和 443 端口的流量。

我认为这也在我终止了运行在 80 和 443 端口上的 docker-proxy 进程 PID、随后启动运行在 80 端口的 Nginx 并成功访问到我网站的 Nginx 默认页面时得到了验证。

1 个赞

这表明安装本身出了问题。如果是全新安装,直接销毁虚拟机并重新设置可能更简单。

2 个赞

我已经实际安装了三次,但每次端口都显示未绑定。虽然三次安装都成功了,但我始终无法访问论坛。因此,我正在考虑直接使用 Google 版本(该版本可以运行,但不允许我设置 SMTP),然后再想办法从 Google 版本中配置 SMTP。

1 个赞

安装完成后,我是否可以设置 SMTP?
按照此链接中的“第 11 步”,我能够[创建(因为它尚不存在)并]编辑 discourse.conf 文件。完成此操作后,我似乎可以重启“discourse 服务”并测试我的邮件设置?

这意味着我不需要重新安装 Discourse,对吗?

然而,查看我运行的服务时,我没有看到名为"discourse"的服务,尽管我的 Discourse 论坛显然正在运行


Discourse 不应该在这里显示吗?是否有其他服务我可以重启,从而间接重启 Discourse 服务?

2 个赞

抱歉,我对 Google Cloud 镜像的搭建方式一无所知。我已经完成过十几次安装(包括上周的一次),很有把握问题出在您的虚拟机配置上。

以下是我在遵循官方安装指南之前所做的准备工作:

  1. 配置计算引擎以允许 HTTP 和 HTTPS 流量。
  2. 设置 DNS 并确认。
  3. 确保可以通过 SSH 连接到我的虚拟机。

我可以保证该流程是有效的。

附注:我通常在 Gcloud 上使用 Ubuntu 的 minimal 版本来安装 Discourse。

1 个赞

您没有按照Discourse 官方标准安装进行操作吗?

1 个赞

嗯,真奇怪。不过还是感谢你确认在 Google Cloud 上确实可行。我也认为 Discourse 安装本身没问题,问题出在虚拟机或端口上。那我明天再试第四次吧,尽管每次我都已经完成了那些准备步骤。谢谢 Bhanu。

@pfaffman 我试过了。

2 个赞

另外,您允许 HTTP/HTTPS 流量访问的其实并不是“计算机引擎”,而是"VM 实例”,对吗?

1 个赞

Compute Engine 是 Google 对虚拟机的称呼,我记得是这样。

1 个赞

运行 Discourse-setup 时会检查端口。这些测试通过了吗?

2 个赞

我现在就去查看。已删除旧实例和项目,并在 Google Cloud 上启动了新项目和新实例。现在将尝试安装 Discourse,并随后报告已检查的端口!

2 个赞

好的,几天之后,它终于运行起来了!

我重复了同样的流程,但这次对每一步都更加小心。
我删除了之前在 Google Cloud 上的实例和项目,从头开始创建一个新项目。

然后,我创建了一个新项目和一个新的实例,使用 Ubuntu 18.04 LTS 最小化版本,并启用了 HTTP/HTTPS。在按照上面提到的官方指南操作之前,我按照 Bhanu 的建议先测试了连通性。我还跟随了 Google Cloud 的“欢迎教程”,其中也包括在 80 端口上尝试运行一个 Python 服务器脚本等步骤。

在按照“官方指南”操作的过程中,我在配置 SMTP 时格外小心。出于某种原因,我决定不使用 Mailgun,而是最终选择了 Sendinblue。它运行得非常顺利!

我真的不知道这次有什么不同,但现在它确实可以正常工作了。感谢你们在帖子中与我讨论!

6 个赞

我不知道为什么无法编辑我之前的帖子,但版主可能会将它们合并。
我只是想补充一点,我认为我的问题和解决方案可能源于我过于急切。

由于安装了一个有问题的插件,我最近不得不彻底重装我的 Discourse 实例。当我启动这个新实例时,获得了一个新的 IP 地址。于是,我登录到托管服务商,更新了 A 记录/DNS,将我的子域名 discourse.mydomain.com 指向我的 Google Cloud 实例的 IP 地址,然后回到 Google Cloud SSH 运行安装脚本。

首次运行 ./discourse-setup 时,安装程序会检查是否能够绑定到端口 80 和 443。但不知何故,它再次拒绝绑定到这两个端口。我通过 who.is 查询了 DNS,子域名解析正常,IP 也正确,但问题依旧。我尝试运行 ./discourse-setup 三次,均无果。接着用 netstat -ltnpu 检查,未发现异常。等待了五分钟后再运行第四次,这次终于成功了。

2 个赞

无法编辑我之前的帖子。但我确实再次遇到了安装问题。这次我在防火墙中还添加了以下允许规则:

SMTP 可能并非必要,但端口 80 和 443 的“出站”规则似乎确实需要。

1 个赞

我认为无需配置任何出站规则,因为默认情况下所有端口都是开放的,除了端口 25 始终被阻止。

3 个赞