尽管我原本打算彻底放弃 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。如果有人找到解决方案,请联系我们。