过去几天我一直在尝试寻找一种在同一个 DigitalOcean Droplet 上将 Discourse 与 Apache 搭配使用的方法,但 Discourse 上提供的教程要么过时,要么不适用于我。其中一个教程使用的是 CentOS 和 HAProxy(我使用的是 Ubuntu),另一个则使用 Nginx(我使用的是 Apache)。
我在 DigitalOcean 的一个讨论串中看到了一条评论,并在测试 Droplet 上按照那里的说明操作:Install Discourse on a droplet with WordPress served by Apache ? | DigitalOcean
一切似乎都很顺利,包括 Let’s Encrypt SSL 证书。我的主页和一些静态 HTML 文档运行正常。Discourse 虽然安装时没有报错,但无法显示。访问 community.mysite.com 时,我只看到主页,且 URL 显示为不安全的 HTTPS。是的,我的 DNS 设置准确无误,并指向了正确的服务器。
这是我的 mysite.com.conf 文件:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName mysite.com
ServerAlias www.mysite.com
DocumentRoot /var/www/mysite.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.mysite.com [OR]
RewriteCond %{SERVER_NAME} =mysite.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
这是我的 mysite.com-le-ssl.conf 文件:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName mysite.com
ServerAlias www.mysite.com
DocumentRoot /var/www/mysite.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/mysite.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mysite.com/privkey.pem
</VirtualHost>
</IfModule>
这是我的 community.mysite.com.conf 文件:
<VirtualHost *:80>
ServerName community.mysite.com
ServerAlias www.community.mysite.com
<IfModule proxy_module>
ProxyPreserveHost on
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</IfModule>
</VirtualHost>
最后,这是我的 app.yml 文件(已编辑):
## 这是 Discourse 的一体化独立 Docker 容器模板
##
## 修改此文件后,您必须重新构建
## /var/discourse/launcher rebuild app
##
## 编辑时请*非常*小心!
## YAML 文件对空白字符或缩进错误极其敏感!
## 如有需要,请访问 http://www.yamllint.com/ 验证此文件
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## 如果希望添加 Let's Encrypt (https),请取消注释以下两行
- "templates/web.ssl.template.yml"
- "templates/web.letsencrypt.ssl.template.yml"
## 此容器应暴露哪些 TCP/IP 端口?
## 如果您希望 Discourse 与另一个 Web 服务器(如 Apache 或 Nginx)共享端口,
## 请参阅 https://meta.discourse.org/t/17247 了解详情
expose:
- "8080:80" # 将主机端口 8080 转发到容器端口 80 (http)
- "8443:443" # 将主机端口 8443 转发到容器端口 443 (https)
params:
db_default_text_search_config: "pg_catalog.english"
## 将 db_shared_buffers 设置为总内存的最大 25%。
## 将根据检测到的 RAM 由 bootstrap 自动设置,您也可以覆盖此值
db_shared_buffers: "128MB"
## 可能改善排序性能,但会增加每个连接的内存使用量
#db_work_mem: "40MB"
## 此容器应使用哪个 Git 版本?(默认:tests-passed)
#version: tests-passed
env:
LANG: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
## 支持多少并发 Web 请求?取决于内存和 CPU 核心数。
## 将根据检测到的 CPU 由 bootstrap 自动设置,您也可以覆盖此值
UNICORN_WORKERS: 2
## TODO: 此 Discourse 实例将响应的域名
## 必填项。Discourse 无法仅使用 IP 地址运行。
DISCOURSE_HOSTNAME: community.mysite.com
## 如果希望容器以与上述指定的相同主机名(-h 选项)启动,请取消注释以下行(默认为 "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO: 初始注册时将被设为管理员和开发者的逗号分隔邮箱列表
## 示例:'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'myemail'
## TODO: 用于验证新账户和发送通知的 SMTP 邮件服务器
# 需要 SMTP 地址、用户名和密码
# 警告:SMTP 密码中的字符 '#' 可能导致问题!
DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: my-smtp-username
DISCOURSE_SMTP_PASSWORD: "my-smtp-password"
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (可选,默认为 true)
## 如果您添加了 Let's Encrypt 模板,请取消注释以下行以获取免费 SSL 证书
LETSENCRYPT_ACCOUNT_EMAIL: myemail
## 此 Discourse 实例的 http 或 https CDN 地址(配置为拉取)
## 请参阅 https://meta.discourse.org/t/14857 了解详情
#DISCOURSE_CDN_URL: https://discourse-cdn.example.com
## Docker 容器是无状态的;所有数据都存储在 /shared 中
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
- volume:
host: /var/discourse/shared/standalone/log/var-log
guest: /var/log
## 插件请放在此处
## 请参阅 https://meta.discourse.org/t/19157 了解详情
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
## 构建后运行的任何自定义命令
run:
- exec: echo "开始自定义命令"
## 如果您想设置首次注册时的 'From' 邮箱地址,请取消注释并修改:
## 收到首次注册邮件后,请重新注释该行。它只需运行一次。
#- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
- exec: echo "结束自定义命令"
有人能告诉我我在哪里出错了,或者可能遗漏了什么吗?谢谢!