我正在执行 ./discourse-setup 来配置 Discourse,但出现了图片中的错误。
我该如何修复这个错误?我使用的是 Ubuntu 18.04。
您输入的 hostname 中包含不可打印字符:
![]()
请重试,并确保输入内容干净。如果您使用的是复制/粘贴,请确保来源内容无误。
看起来该 IP 上已经运行了 WordPress。
是的,WordPress 已安装。我可以在同一台服务器上同时使用两者吗?
这是可能的,但并不容易。而且你不能使用 discourse-setup。我建议你先在一台未运行其他服务的服务器上进行尝试。
我按照这些步骤操作了,但没有得到任何结果。同时,我使用的是 Webmin。
大家还有其他想法吗?
如果您之前链接的主题中的说明对您不起作用,那么最简单的办法是在独立的服务器上运行 Discourse。
要让它与 Webmin 配合使用将会非常困难。
我知道这会有难度,但我并不认为自己是个新手。我已经尝试了你提供的链接中的说明。还有其他需要阅读的链接吗?
关于该问题有几个#howto 主题。
嘿 @Murto
顺便提一下,作为后端 Rails 应用,如果你将 Rails 配置为使用 Unix 域套接字而非 TCP/IP 端口,并在反向代理后部署 Discourse 应用,那么 Discourse 的设置会容易得多。
这样一来,TCP/IP 端口仅通过反向代理暴露,而 Discourse 应用(及其容器)则通过 Unix 域套接字暴露;你可以运行任意数量的 Discourse 容器实例,而无需担心 TCP/IP 端口冲突。在我看来,这是运行 Discourse 非常简洁的方式。
如果你遇到困难或想调整方向,本站上有大量操作指南和教程可供参考。Discourse 发行版中包含一个“socket”模板,可用于设置“Discourse 配置部分”;之后你只需设置反向代理(关于如何操作的教程数不胜数),然后“一切搞定”!
希望这能帮到你。
我仍然无法解决这个问题。有人能详细解释一下吗?![]()
试试这个:
netstat -lnptu | grep :443
然后:
kill -9 PID(将 PID 替换为上述命令输出的进程号)
建议您在面向互联网的服务器上部署一个反向代理,并根据主机名将请求重定向到 WordPress 或 Discourse。
例如,在主机上运行一个使用 80 和 443 端口的 Nginx 服务,并将其配置为将 blog.yourdomain 的请求代理到 WordPress 服务(可以是主机上的内部端口,如果是 Apache + WordPress 架构,可以重定向到 Apache 端口,例如 8080,或者使用 FastCGI)。
然后在同一台服务器上运行 Discourse,确保将 app.yml 中的端口替换为主机上未使用的端口(如 8081),或者如 @neounix 所述使用 Unix 套接字。接着,将 forum.yourdomain 的请求代理到该端口或套接字。要运行 Discourse,需要在 Discourse 目录(通常是 /var/discourse)中执行 ./launcher rebuild app。
在这种情况下,您不需要运行 discourse-setup 来创建 2GB 的交换文件(主要用于可能需要更多内存的升级,如果您的服务器内存充足,可能并不需要)以及生成 app.yml 文件。相反,您应该自行完成这些配置。如果您不确定 app.yml 文件中应填写的内容,我建议在另一台服务器上先运行推荐的安装流程,即使只是为了更熟悉 Discourse 并查看生成的 app.yml 文件,然后将其用于您的共享服务器(记得更改端口,如果使用套接字方式则移除端口配置)。
如果您无法继续操作,建议参考相关的 howto 主题帖子。
你能解释一下反向代理的操作流程吗?我已经了解了该做什么,但不知道具体如何实施。
我手头没有现成的示例,因为我在前端没有使用代理,不过我记得之前好像实现过。无论如何,这并没有什么秘密,操作方式与其他反向代理类似。以下是使用端口(而非套接字)时应做之事的概述:
-
确保有一个 WordPress 服务正在非 80 和 443 的端口上运行(例如:8443),并且运行正常。你可以先尝试将其暴露到互联网上,以验证是否正常工作。
-
对 Discourse 进行同样的操作,映射到不同的端口。
将:
expose:
- "80:80" # http
- "443:443" # https
改为(例如):
expose:
- "8081:80" # http
- "8444:443" # https
在你的 app.yml 文件中(如果没有,我建议先在独立机器上按照官方指南运行 Discourse,看看它是如何工作的,然后查看 /var/discourse/containers/ 下生成的 app.yml 文件)。以下是 app.yml 文件的示例:discourse_docker/samples/standalone.yml at master · discourse/discourse_docker · GitHub
- 安装 Nginx,并在其配置文件中添加代理指令。它们应类似于以下示例片段:
upstream blog {
server localhost:8080;
}
server {
server_name blog.barinaklar.com;
server_tokens off;
listen 80;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://blog.barinaklar.com$request_uri;
}
}
server {
server_name blog.barinaklar.com;
server_tokens off;
listen 443 ssl;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
proxy_pass http://blog;
proxy_redirect off;
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-Host $server_name;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
upstream forum {
server localhost:8081;
}
server {
server_name forum.barinaklar.com;
server_tokens off;
listen 80;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://forum.barinaklar.com$request_uri;
}
}
server {
server_name forum.barinaklar.com;
server_tokens off;
listen 443 ssl;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
proxy_pass http://forum;
proxy_redirect off;
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-Host $server_name;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
这假设 WordPress 运行在端口 8080,Discourse 运行在端口 8081。请务必设置防火墙以阻止访问这些端口(云提供商通常默认阻止所有端口,仅开放 22 端口,因此可能不需要额外操作)。
在这种情况下,你需要负责生成 SSL/TLS 证书(你可以使用 Certbot 通过 cron 作业定期运行来生成,因此我已在 Nginx 配置中包含了路径 /.well-known/acme-challenge/)。
如前所述,这只是一个概述,可能有些细节被我遗漏了。你需要特别注意基础 URL,因为端口发生了变化(检查它是否会将用户重定向到 https://yourdomain:8081 而不是 https://yourdomain,并在必要时进行调整以确保正常工作)。
如果 WordPress 在容器内运行在端口 80 或 443,则可能不需要上述操作。Discourse 的情况也应该类似。可能出现的问题是 https 相关的问题,它可能会因为代理中使用的是 http 端口而重定向到 http,因此你需要检查是否发生这种情况,并在必要时进行修复。
感谢您的帮助。我将进行申请并通知相关交易事宜。



