引言
默认情况下,Discourse 的“独立”安装会绑定到端口 80 和 443。要在同一服务器上托管另一个应用程序(如 WordPress),您必须重新配置 Discourse 以监听内部端口,并使用主机级别的 Nginx 作为反向代理来管理流量和 SSL 证书。
1. 架构概述
-
主机 Nginx: 监听端口 80 和 443 的主网关。它处理 SSL 终止,并根据
server_name将请求路由到适当的容器。 -
Discourse 容器: 重新配置为监听
localhost:8080。 -
WordPress 容器: 通过 Docker Compose 管理,监听
localhost:8081。
2. A 阶段:重新配置 Discourse
修改您的 /var/discourse/containers/app.yml 文件以释放公共端口:
-
更改端口映射:
YAML
expose: - "8080:80" # 将主机端口 8080 映射到容器端口 80 -
禁用内部 SSL: 注释掉 SSL 和 Let’s Encrypt 模板:
YAML
templates: - "templates/postgres.template.yml" - "templates/redis.template.yml" - "templates/web.template.yml" # - "templates/web.ssl.template.yml" # - "templates/web.letsencrypt.ssl.template.yml" -
重建: 运行
./launcher rebuild app。
3. B 阶段:通过 Docker Compose 部署 WordPress
在专用目录中组织您的 WordPress 站点。确保数据库卷是持久化的,以防止数据丢失。
YAML
services:
db:
image: mariadb:10.11
environment:
MYSQL_ROOT_PASSWORD: 'your_secure_password'
volumes:
- ./mysql_data:/var/lib/mysql
wordpress:
image: wordpress:latest
ports:
- "8081:80"
volumes:
- .:/var/www/html
4. C 阶段:最终 Nginx 配置(SSL 和 443 端口)
在 2025 年,专业的设置需要完整的 HTTPS 和 HTTP/2 支持。在主机上安装 Nginx(sudo apt install nginx)后,为您的域名创建一个配置。
专业提示: 运行 sudo certbot --nginx 以自动生成 SSL 块,但请确保它们包含以下代理头,以便 Discourse 正常工作。
Nginx
server {
listen 443 ssl http2;
server_name discourse.com;
# Certbot 提供的 SSL 证书
ssl_certificate /etc/letsencrypt/live/discourse.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/discourse.com/privkey.pem;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; # 对 Discourse HTTPS 检测至关重要
}
}
5. 宝贵经验和最佳实践
-
数据库凭据: 如果您的密码包含特殊字符,如
&或?,请务必在配置文件和终端命令中用单引号' '将它们括起来,以防止 shell 解释错误。 -
文件权限: WordPress 容器以
www-data(UID 33) 身份运行。如果您以root身份上传或解压文件,则必须运行chown -R 33:33 .以避免出现 500 内部服务器错误。 -
Cloudflare 设置: 当使用服务器上的 SSL 证书(Let’s Encrypt)时,将 Cloudflare 的 SSL/TLS 设置为 完全 (严格) (Full (Strict))。这可以防止“灵活”模式通常引起的“重定向过多”循环。
-
持久卷: 切勿在未验证数据库文件存储在持久卷(例如
./mysql_data)中的情况下运行docker compose down或rebuild。
结论: 使用反向代理将应用程序与端口 80/443 解耦是管理多站点 VPS 最具可扩展性的方法。它允许集中管理 SSL 并在主机级别的 Nginx 日志中轻松调试。