Discourse 无法在 Apache 和代理重定向下加载

尽管我原本打算彻底放弃 Discourse,因为目前缺乏文档,且现有文档都过度聚焦于 CentOS/Nginx,但 DigitalOcean 上一位非常慷慨且耐心的用户回复了我在那里创建的帖子。经过一番尝试和错误后,他帮助整理了一份简单易懂的教程,专为像我这样处境的新 Discourse 用户准备。

作为回顾,这些情况包括:

在同一台服务器上安装 Discourse 和 Apache | 使用 Ubuntu 18.04 | DigitalOcean

感谢 Bobbyiliev @ DigitalOcean
https://www.digitalocean.com/community/questions/install-discourse-on-a-droplet-with-wordpress-served-by-apache(第一个回答)

前提条件

  • 为保险起见,请确保备份您的 Droplet,以便在出现问题时可以回滚到正常工作的版本
  • 通过 SSH 连接到您的 Droplet
  • 已安装 Apache,您可以按照以下步骤操作:

步骤 1 - 安装 Docker

请按照以下步骤安装 Docker:

步骤 2 - 下载 Discourse

首先,创建一个目录用于存储您的 Discourse 文件:

mkdir /var/discourse

然后,将官方的 Discourse Docker 镜像克隆到 /var/discourse 目录中。

git clone https://github.com/discourse/discourse_docker.git /var/discourse

步骤 3 - 配置 Discourse 监听 8080 端口

我们将使用 standalone.yml 模板,它包含了所有必要的服务,如 PostgreSQL、Redis 等。

使用以下命令复制示例文件:

cp /var/discourse/samples/standalone.yml /var/discourse/containers/app.yml

然后使用您喜欢的编辑器打开 /var/discourse/containers/app.yml 文件,并更新第 23 和 24 行的端口配置:

## 此容器应暴露哪些 TCP/IP 端口?
expose:
  - "8080:80"   # 将主机端口 8080 转发到容器端口 80(HTTP)
  - "8443:443"   # 将主机端口 8443 转发到容器端口 443(HTTPS)

如果您尚未拥有 SSL 证书,请确保注释掉第 16 行:

  #- "templates/web.ssl.template.yml"

只需在 - "templates/web.ssl.template.yml 行前添加 # 符号,否则 Discourse 将无法启动。

步骤 4 - 设置 Discourse

切换目录:

cd /var/discourse

然后启动 Discourse(由于这是首次启动该服务,它将使用 app.yml 文件中的新配置引导应用程序):

./discourse-setup

注意:请确保提供有效的邮件服务器设置,否则设置可能会失败。

步骤 5 - 配置 Apache

在您的 /etc/apache2/sites-available/ 目录下创建一个名为 forum.example.com.conf 的新文件,并添加以下虚拟主机配置内容:

<VirtualHost *:80>
  ServerName forum.example.com
  ServerAlias www.forum.example.com

  <IfModule proxy_module>
    ProxyPreserveHost on
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
  </IfModule>
</VirtualHost>
  • 使用以下命令启用该虚拟主机:
a2ensite forum.example.com
  • 启用 Mod Proxy:
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_balancer
a2enmod lbmethod_byrequests
  • 重启 Apache:
systemctl restart apache2

完成上述步骤后,您就可以通过域名直接访问 Discourse 了。


注意 1:在安装 Discourse 时,app.yml 文件可能会被覆盖,导致第 16/17 行(SSL 相关)被取消注释。您需要再次注释掉这些行,然后重新构建应用(别忘了切换目录):./launcher rebuild app

注意 2:本指南中 Discourse 并未启用 SSL。不出所料,目前没有任何文档说明如何在 Apache 已启用 Let’s Encrypt SSL 的情况下为 Discourse 启用 SSL。如果有人找到解决方案,请联系我们。

4 个赞