如何让 Discourse 在其他端口运行

discourse 默认占用80端口和443

我想要通过安装宝塔Nginx(80、443)然后用NGINX来访问 discourse

可是 discourse 在安装的时候就一定要检测80端口是否被占用了

部署在8443、8080端口 根本打不开

8080 打不开,8443 400报错

前缀带上https,又会自动重定向回到443

这个需要重构 Docker。

编辑:app.yml 文件。

expose:

“10080:80”
“2222:22”

Discourse 的端口绑定是直接写在 Docker 容器里面的。

如果不改,默认就是 80 和 443

我就是改了这个没用,他会重定向,后面我发现

1. 修改 SSL 配置中的端口设置

Discourse 的容器可能仍然认为 HTTPS 应该运行在 443 端口,因此,当请求发送到 8443 时,它会错误地重定向或者拒绝该请求。我们需要确保 Nginx 在容器内能够监听正确的端口。

修改 app.yml 文件中的端口映射配置:

当前配置:

yaml

复制代码

expose:
  - "8080:80"   # http
  - "8443:443"  # https

修改为:

为了使 Discourse 的 Nginx 在容器内监听 8443 端口,请将容器内的 HTTPS 端口从 443 改为 8443:

yaml

复制代码

expose:
  - "8080:80"   # http
  - "8443:8443" # https

这样做的目的是让 Discourse 内部的 Nginx 监听 8443 端口,而不是默认的 443。

要让 Discourse 内置的 Nginx 在 8443 端口上运行 HTTPS,而不是 443 端口,您需要修改 web.ssl.template.yml 中与 Nginx 监听端口相关的部分。根据您目前提供的内容,web.ssl.template.yml 文件中的 listen 443 ssl; 是监听 HTTPS 的默认端口 443 的部分。

修改 web.ssl.template.yml

我们要把监听的端口从 443 改为 8443,具体修改以下几处。

1. 修改 listen 443 ssl 部分

找到文件中所有的 listen 443 ssl;listen [::]:443 ssl;,并将它们改为 listen 8443 ssl;listen [::]:8443 ssl;

具体改法如下:

原始内容:

yaml

复制代码

  - replace:
     filename: "/etc/nginx/conf.d/discourse.conf"
     from: /listen 80;\s+gzip on;/m
     to: |
       listen 443 ssl;
       http2 on;
       SSL_TEMPLATE_SSL_BLOCK
  - replace:
     filename: "/etc/nginx/conf.d/discourse.conf"
     from: /listen 80;\s+listen \[::\]:80;\s+gzip on;/m
     to: |
       listen 443 ssl;
       listen [::]:443 ssl;
       http2 on;
       SSL_TEMPLATE_SSL_BLOCK

修改后:

yaml

复制代码

  - replace:
     filename: "/etc/nginx/conf.d/discourse.conf"
     from: /listen 80;\s+gzip on;/m
     to: |
       listen 8443 ssl;
       http2 on;
       SSL_TEMPLATE_SSL_BLOCK
  - replace:
     filename: "/etc/nginx/conf.d/discourse.conf"
     from: /listen 80;\s+listen \[::\]:80;\s+gzip on;/m
     to: |
       listen 8443 ssl;
       listen [::]:8443 ssl;
       http2 on;
       SSL_TEMPLATE_SSL_BLOCK

2. 确认 SSL 证书和重定向部分

另外一处需要注意的是在 ssl_certificatessl_certificate_key 的路径和 rewrite 规则部分,我们不需要做额外修改,除非证书路径有变化。

修改完成后,重建容器并启动。

内部外部的端口必须一致,否则证书下发给443,外部是其他端口的话就没法用。

Discourse 改端口是比较麻烦。

主要是容器配置哪里。

开始我们也想改来着,后来感觉就是付出的工作量和麻烦还不如不改。

有网友问过想在同一台机器上部署多个 Discourse 实例,后来我们的想法就是懒得麻烦,跑一个就好了。

是的,但是如果服务器配置较大,例如VDS 128c256g,全给discourse 吃80、443 就太亏了

直接改Nginx里面的

啊?discourse 内部 NGINX?

详细说说?

刚刚尝试的方法多了 一直在重建,储存暴增

./launcher cleanup

似乎没用

nginx 应该改不了。

我们试过很多,都需要重构,最后就放弃了。

想着有时间去折腾还不如保持稳定吧,就单独给个机器算了。

可以参考一下我自己的踩坑历史,我现在就是在8888端口部署的:

想问一下是怎么做到不使用内部的 nginx

使用外部的 nginx。

@CAKE_NICE
注释下面两个引用文件:

  • "templates/web.socketed.template.yml"
  • "templates/web.ssl.template.yml"

然后更改端口:

expose:
  - "8888:80"   # http
  # - "443:443" # https

端口只需要暴露一个就行了。

expose:

2 Likes

你的方法也是类似 @luobo 的吗?

所以是要先正常部署一遍80、443然后修改好配置文件再重构吗?

因为 setup 默认都是要检测80端口呀

不需要,直接复制修改 app.yml 文件到 containers/ 目录下,然后项目根目录执行 ./launcher rebuild app 即可

就是说不用输入 setup 直接重建

是的,直接 rebuild 就可以,只要设置好邮箱和容器外部的反代就行了