快速免责声明:我虽然相对较新,但从零开始搭建 VPS 环境,不过我在 Web 托管方面(特别是共享托管和托管专用服务器)已有一定经验,因此对自己在做什么心中有数,也能理解各种教程。
话虽如此,目前我正在使用 DigitalOcean 最便宜的 Droplet 进行实验。我只是一个爱好者,不指望会有大量流量,只是想创建两个实例:一个提供某种形式的首页(可能是 WordPress),另一个搭配 Discourse 论坛——一个用于游戏设计,另一个用于我的内容创作者社区。
我知道 Discourse 和 Apache 不太兼容,因为 Discourse 决定使用 80 端口;我也知道有一些变通方法,但这些方法形式各异,结果未经证实,且 Discourse 官方似乎也没有明确表示“是的,这样可行”。
我有点困惑,为什么这样一个出色的平台会被设计得如此阻碍在同一服务器上管理其他 Web 服务。不过,我目前对这款软件的使用体验让我有足够的兴趣去找到让它正常运行的方法。我看到有一个 WordPress 集成方案,并在功能页面上被大肆宣传,但 Discourse 似乎仍然被设计为只能独立运行。
是否有遇到过同样困境的朋友能提供一些建议或意见?谢谢!
我想这就是你要找的:
@neounix 在将 Discourse 与 Apache2 一起运行方面有一些经验,所以他们可能会提供一些指导。
4 个赞
这是否意味着建议切换到 Nginx?我完全没有使用过它,而且我之前用过的任何 Web 服务器(包括预配置的)都是 Apache。
关于 Apache,这里有一篇相关文章:Set up Discourse on a server with existing Apache sites
不过,似乎有很多问题导致它无法正常运行,尤其是与 SSL 相关的问题。
那么,运行两个 Droplet 会不会更简单?一个用于网站,另一个专门用于 Discourse?我想我可以只修改子域名的 DNS 记录,将其指向 Discourse 的 Droplet,这样应该就能解决问题了。只是觉得为一个论坛运行两台服务器有点奇怪。
neounix
(Dark Matter)
4
你好 @OrbitStorm
欢迎!
Discourse 完全不会造成阻碍。
掌握在反向代理 Web 服务器(如 Apache2 或 Nginx)后运行 Docker 化的 Discourse 将是一次非常有收获的体验。
如果你已经在 Apache 后运行其他应用,那么在其后设置一个甚至上百个 Docker 化的 Discourse 实例也非常简单!
5 个赞
感谢您的回复。
我怀着最大的敬意这样说,但 Discourse 开箱即用,实际上需要独立的服务器。使用反向代理在同一 VPS 上并行运行 Web 服务器和 Discourse 效果时好时坏,评论和其他投诉已充分证明这一点,SSL 也可能无法正常工作。此外,在同一台服务器上运行两个 Discourse 实例几乎是不可能的。所有这些在我看来都构成了阻碍。没有任何其他论坛软件(包括 XenForo 或 Invision 这样的高端平台)需要付出如此多的努力并伴随如此大的不确定性。它们是昂贵的商业软件,所以我猜 Discourse 是“一分钱一分货”的体现。作为一个面对所有这些障碍的新用户,Discourse 似乎除了自身之外,没有考虑任何其他用途(即其他网站)。
值得一提的是,正如我在原帖中所述,我使用的是 Discourse 的一键部署方案。因此,我需要反向操作,尝试在同一台服务器上安装 Apache(如果找不到教程,则尝试 Nginx)。如果我要将 Discourse 作为主要的论坛平台,我就不愿意为一个社区运行两台服务器。那太荒谬了。
Benjamin_D
(Benjamin Decotte)
6
1 个赞
@Benjamin_D 我遇到的问题在于,这里提供的所有教程都缺少与我当前环境相关的某些方面。有一个关于 Apache 的教程,但使用的是 CentOS,而我用的是 Ubuntu。另一个由 Kane York 编写的教程使用的是 Nginx,但如我之前所说,我使用的是 Apache。
我做的事情也并不特别复杂。我只是在使用 DigitalOcean、Linux + Ubuntu 18.04,并将所有内容托管在 droplet 上(未使用第三方存储)等。我使用 Mailgun 作为邮件解决方案,但据我所知它不提供收件箱功能,不过目前这也没问题。
我只是想尽可能让一切变得简单。
1 个赞
neounix
(Dark Matter)
8
@OrbitStorm
实际上,就目前的看法而言(IMHO),Discourse 是地球上最优秀的论坛和社区建设开源软件,原因有很多,这里仅列举几点:
-
Discourse 是开源的,拥有强大的社区以及非常聪明(且能力出众)的核心开发团队。
-
Discourse 专为在生产环境中以 Docker 容器运行而设计,这带来了诸多优势:
-
Discourse 可以轻松以standalone mode(独立模式)部署,无需任何外部 Web 服务器或数据库。
-
Discourse 可以轻松以multi-container mode(多容器模式)部署,提供更高的可靠性和无缝升级。
-
Discourse 还可以使用 Docker Swarm 和 Kubernetes 部署为高可用配置,从而能够根据需求“按需”弹性伸缩。
-
Discourse 的备份和恢复非常简单。我们可以直接使用 Discourse 原生的备份功能,并在全球任何地方的全新、纯净的 Docker 容器中恢复。
- Discourse 可以轻松部署在 Apache2 和 nginx 反向 Web 代理服务器之后。这也带来许多优势,例如:
-
Discourse 可以轻松运行在现有的 Web 服务器上(无论是 nginx 还是 Apache2),只需在 Docker 暴露的 TCP/IP 端口或 UNIX 域套接字上稍作配置即可。
-
在反向代理之后运行基于 Web 的应用程序已是成熟的做法。这种配置并非 Discourse 独有,但 Discourse 会提供支持。
-
在反向代理之后设置 SSL 非常简单,使用受支持且免费的 LETSENCRYPT,甚至只需一条命令如 certbot -d my.great-discourse.site 即可完成。
-
Discourse 在 GitHub 上提供了按每次提交(commit-by-commit)的完整文档,任何人都可以跟踪代码变更。
-
Discourse 采用渐进式商业模式,带来一些关键优势,包括:
-
Discourse 核心软件以及许多优秀的插件、主题和组件都是免费的。
-
Discourse 提供包括标准配置支持在内的免费支持,可在 meta 论坛获取。
-
Discourse 为那些不想自行托管或更倾向于“放手不管”的用户提供商业托管服务。
-
Discourse 鼓励社区内的商业咨询和插件开发,从而构建一个可行的商业生态系统。
- 还有很多,但我想就此打住!
我们(或我)是否同意核心 Discourse 团队所做的每一项决定?他们是否也同意我们(或我)的所有想法和建议?
当然不是;他们也不应该这样,我们也不应该这样。我们自由地提出建议、提交代码建议、PR(拉取请求),而核心 Discourse 团队将以开放的心态对待这些建议。
但归根结底,核心团队必须确保 Discourse 社区朝着一致的方向前进,这在数百名来自不同文化背景、拥有不同配置需求、优先级、商业模式和理念的人参与的情况下,绝非易事。
换句话说,从 Discourse 中没有任何东西需要“避免”(你的主题标题中的用词),尤其是设置反向代理和掌握 Docker。许多人(包括我)正是因为 Discourse 而开始转向 Kubernetes,不仅是为了 Discourse,也是为了其他 Web 应用。
Discourse 与“阻碍性”(再次强调,这是你的用词,而非我的)截然相反;而且由于其基于容器的设计,“天空才是极限”,经验丰富的系统管理员可以在高度可扩展的生产环境中灵活部署 Discourse;同时它也足够简单,初学者可以轻松以独立模式进行部署。
我还需要多说吗?
正如 REM 乐队的那首歌《Losing My Religion》所唱:
Oh no, I’ve said too much, I set it up
就此结束这个话题……祝你好运,@OrbitStorm
2 个赞
Benjamin_D
(Benjamin Decotte)
9
如果我没理解错的话,您想要的是:Nginx 监听并将一个子域名重定向到 Apache,同时将另一个子域名重定向到运行 Discourse 的容器(通过 app.yml 中暴露正确的端口,或使用 web.socketed 模板来实现),或者您是将 Apache 用作代理?
我认为 CentOS 教程中使用的是 Nginx 而不是 HAProxy,对吧:thinking:
接近了,但还不行。再强调一遍,我使用的是 Linux + Ubuntu 18.04。我使用 Apache 托管一个标准 HTML 网站(未来将迁移到 WordPress),并在子域名下安装了 Discourse。我只需要弄清楚如何按照这些教程设置反向代理,将端口 80 和 443 的流量重定向到新端口,因为 Apache 已经占用了这两个端口。我对使用 Nginx 不感兴趣,因为我没有任何经验,也不想把它与 Apache 捆绑在一起,让配置变得更加复杂。
我不是高级开发者。我只是个精通前端、对控制面板有基本了解、对 SSH 略有了解,但对其他方面几乎一无所知的人(这也是我依赖教程的原因)。
我的最终目标是拥有两个域名,每个域名对应一个首页,并部署多个 Discourse 实例(每个网站一个)。这其实很简单。
1 个赞
Benjamin_D
(Benjamin Decotte)
11
不确定使用 Apache 作为服务器和代理是否比捆绑 Nginx 或 HAProxy 更复杂 
关于教程,CentOS 和 Ubuntu 不会有太大区别,只是使用 apt 而不是 yum。
请将 https://support.cloudflare.com/hc/en-us/articles/360029696071-Restoring-original-visitor-IPs-Option-2-Installing-mod-remoteip-with-Apache 替换为
我可以建议以下关于将 Apache 用作反向代理的方案:
1 个赞
pfaffman
(Jay Pfaffman)
12
如果您希望生活轻松,请在独立的 Droplet 上运行 Discourse。您真的无法在 1GB 的 Droplet 上同时运行 Discourse 和 Apache,因此使用两个 1GB 的 Droplet 并不会增加太多成本。
2 个赞
@pfaffman 我从未打算一直使用最小的实例,只是在配置一切的过程中暂时使用它。在实验阶段支付更高的每小时费用毫无意义。
我之所以不太愿意运行两个实例,是因为我可能需要迁移 3 到 4 个不同的域名到 DigitalOcean。我不希望为 6 到 8 个实例付费,那太疯狂了。
pfaffman
(Jay Pfaffman)
14
如果您需要超过 3 个 Discourse 站点,您可能需要考虑多站点配置。我目前使用 Traefik 进行配置,但也在研究其他反向代理方案。
schleifer
(Andrew Schleifer)
15
如果您使用 Apache 并希望托管多个独立的站点,相关的搜索术语是 VirtualHost。
4 个赞
nap
(napoleon)
16
如果您的 Droplet 较小,您可能需要减少缓冲区大小。我的 Droplet 拥有 4GB 内存和 4 个共享核心。
2 个赞
system
(system)
关闭
18
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.