Discourse 端口修改与反代指南

Discourse 修改端口

Search

Found 57 results for 'Discourse 端口 修改 order:latest'

Read topic

Reading: 如何让 Discourse 在其他端口运行

要点先说在前面

  • 不推荐直接把 Discourse 本体改到非 80/443 端口;更稳的是让容器内部保持默认,外部用反向代理换端口。
  • 如果一定要改,也可以,但要同时改容器暴露端口和容器内 Nginx 的监听端口,并自己处理证书。

推荐方案(外部反代,内部只跑 80)

  • 适合:你想让外部用任意端口/多个站点共存,证书也由外部 Nginx/Caddy/Traefik 管。

  • 做法:

    1. 编辑 /var/discourse/containers/app.yml,注释掉内部 SSL 和 socket 模板,只暴露一个 http 端口:
      yaml
      templates:

      - “templates/web.socketed.template.yml”

      - “templates/web.ssl.template.yml”


      expose:

      • “8888:80” # 宿主机 8888 → 容器 80

      同时确认 DISCOURSE_HOSTNAME 设置为你的域名。

    2. 重建容器:./launcher rebuild app

    3. 外部 Nginx/Caddy 监听你想对外提供的端口(比如 10443 或 443),反代到 127.0.0.1:8888,并加好头:
      nginx
      server {
      listen 10443 ssl http2;
      server_name your.domain.com;

      ssl_certificate /path/fullchain.pem;
      ssl_certificate_key /path/privkey.pem;

      location / {
      proxy_pass http://127.0.0.1:8888;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-Proto https;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Real-IP $remote_addr;
      }
      }

  • 好处:Discourse 不再强依赖 80/443;证书和端口都在外部灵活管理;避免内部重定向到 443 的坑。

可选方案(让容器内 Nginx 直接监听自定义 HTTPS 端口)

  • 适合:你坚持让容器自己做 SSL,而且要用非 443。
  • 做法:
    1. app.yml 暴露同端口:
      yaml
      expose:
      • “8080:80” # 可选
      • “8443:8443” # 外部 8443 → 容器 8443
    2. 修改 templates/web.ssl.template.yml,把所有的 listen 443 ssl; 改成 listen 8443 ssl;(含 IPv6)
      例如:
      • listen 8443 ssl; http2 on;
      • listen [::]:8443 ssl; http2 on;
    3. 准备好证书路径(或外部下发后挂载进容器),然后 ./launcher rebuild app
    4. 之后用 https://你的域名:8443 访问
  • 注意:Let’s Encrypt 在容器内签证一般要求 80/443,改端口后通常要在外部签好证书再挂载使用。并且 Discourse 对非标准端口的“规范化重定向/链接”支持不如 443 稳定。

跳过 setup 强占 80/443 的方法

  • 不用运行 ./discourse-setup。直接把你编辑好的 app.yml 放到 /var/discourse/containers/,然后执行 ./launcher rebuild app 即可。
  • 这是论坛里大家验证可行的做法。

常见坑

  • 重建时报 ember build 被杀、assets 编译失败,多半是内存/Swap 不足。给机器加 2G+ Swap 再重建更稳。
  • 多实例同机:给每个容器设置不同的 expose 端口,用前置 Nginx 按域名分流到各自的 http 端口即可。

站内参考

你现在打算用哪种方式?我可以按你的环境(是否有外部 Nginx/是否要用非 443 SSL/是否要多实例)给你一份可直接用的 app.yml 和反代配置。