我可以在具有第二个IP的同一个VPS上运行WordPress吗?

您好。

我知道建议将 Discourse 部署在独立的服务器上,但我是自费运行这个项目,它基本上是一个爱好,至少在短期内没有盈利的前景或意图。

因此,我在想,与其再购买一台 VPS,不如申请第二个 IP 地址,并在基于 IP 的 Apache 虚拟服务器上运行 WordPress,这样有助于降低成本。

这样做可行吗?还是不被推荐?

如果您熟悉反向代理配置,则不需要第二个 IP。

您可以让 Discourse 和 WordPress 都监听 Unix 套接字(或更高端口),并在其前端运行反向代理软件(我推荐使用 Caddy),以便在同一 IP 上提供 blog.example.comforum.example.com 的服务。

不过,如果您不熟悉此类配置,将每个服务部署在独立的 VPS 上会简单得多,因为您可以直接参考各自丰富的文档进行操作。

您推荐的配置能否稳定运行?

我最初尝试 Discourse 时曾用过 HAProxy。当时我对服务器等方面还不太熟悉(现在也依然如此),但还是动手尝试了,并在此过程中对 HAProxy 有了一些了解。如果我没记错的话,当时遇到了 SSL 方面的问题,Discourse 的表现也不太稳定,不过我想可能是我哪里配置错了。

所以我的问题是:能否在不进行大量精细调整的情况下,实现您推荐的配置,同时避免不稳定和那些“奇怪”的问题?

是的,如果您正确配置了反向代理,这是可行的。本网站正是这样运行的。

但我们无法为这里的每一个反向代理配置提供支持。

太棒了!

上次提到的请愿:能否提供配置此功能的帮助文档链接?

Nginx Run other websites on the same machine as Discourse

Caddy Use Caddy instead of NGINX as your reverse proxy

Apache Set up Discourse on a server with existing Apache sites

太好了。

我记得当初我做测试时是遵循了 Apache 指南的。文章中不太清楚的是,在重建 Discourse 时是否应该禁用 SSL(而禁用 SSL 是否只需不输入 Let’s Encrypt 的电子邮件地址即可实现),以及在 discourse/app.yml 中应该“暴露”哪些端口(该指南仅展示了如下这一行……

“8888:80” # 将主机端口 8888 转发到容器端口 80(HTTP)

……应该长什么样,但没有提及 app.yml 文件中紧随其后的那一行(默认情况下看起来像……

  • “443:443” # HTTPS

……的那一行)应该是什么样子。

附注:在查看 app.yml 文件以撰写该帖子时,我注意到其中包含以下行:

如果您想添加 Let’s Encrypt(HTTPS),请取消注释这两行

  • “templates/web.ssl.template.yml”
  • “templates/web.letsencrypt.ssl.template.yml”

……然而,目前我的 Discourse 应用在启用 SSL 的情况下运行,但这些行并未被注释掉。对于我当前的设置(无代理)或我期望的设置(使用代理以及 Apache + WordPress),注释掉这些行有多关键?

:slight_smile:

如果您不熟悉反向代理,并且可以轻松获取第二个 IP 地址,那么这并不是一个坏方案。只需像这样操作:

expose:
  - "192.168.1.1:80:80"   # HTTP
  - "192.168.1.1:443:443" # HTTPS

问题解决了。

感谢。
.

您可以对 Configure direct-delivery incoming email for self-hosted sites with Mail-Receiver 使用同样的技巧。

谢谢,这对我很有帮助。我的 VPS 提供商除了 VPS 上配置的主 IP 外,还提供廉价的“浮动 IP

那成功了?我没想到 Droplet 会知道浮动 IP 的存在。

嗯,它运行得很好:

首先购买一个浮动 IP 并将其绑定到我的 VPS。
然后配置服务器以使用该 IP:

vim /etc/network/interfaces.d/60-my-floating-ip.cfg

auto eth0:1
iface eth0:1 inet static
    address your.Float.ing.IP
    netmask 32

保存后,重启网络:

sudo service networking restart

现在我有两个 IP:我使用主 IP 来配置多个 nginx 站点,请注意 /etc/nginx/sites-enabled 中的配置行:

listen my_main_IP:80 myserver.name;
listen my_main_IP:443 ssl http2 myserver.name;

而在 /var/discourse/containers/app.yml 中,浮动 IP 的配置如下:

expose:
   - "my_floating_ip:80:80"
   - "my_floating_ip:443:443"

检查一切是否正常(原始 IP 已替换为 floating_ip 和 main_ip):

# netstat -taunp | grep -i listen
tcp        0      0 floating_ip:80      0.0.0.0:*               LISTEN      19775/docker-proxy  
tcp        0      0 main_ip:80          0.0.0.0:*               LISTEN      13151/nginx: master 
tcp        0      0 0.0.0.0:22          0.0.0.0:*               LISTEN      725/sshd            
tcp        0      0 floating_ip:443     0.0.0.0:*               LISTEN      19763/docker-proxy  
tcp        0      0 main_ip:443         0.0.0.0:*               LISTEN      13151/nginx: master 
tcp6       0      0 :::22                      :::*                    LISTEN      725/sshd       

我不知道是否适合提及具体名称,但服务器托管在 Hetzner Cloud 上,其浮动 IP 功能非常便捷且定价合理。

啊哈!我都不知道还能这样操作!

这个技巧还可以用来为多个域名运行多个 入站邮件服务器

干得漂亮!

啊哈!难怪我不知道它是如何工作的。

我知道这是一个比较老的话题,但我想感谢你们,这可能会为我正在处理的一个类似问题节省数天的工作。感谢你们与大家分享这些宝贵的信息!!