在Discourse同一台机器上运行其他网站

如果您想在运行 Discourse 的同一台机器上托管其他网站,需要在 Docker 容器前面配置一个额外的 NGINX 或 HAProxy 反向代理。

注意:本指南面向高级管理员

本指南假设您已经成功运行了 Discourse——如果没有,您可能很难判断配置是否生效。

如果另一台服务器正在使用 80 或 443 端口,您将无法使用 ./discourse-setup 来设置 Discourse。您需要使用您喜欢的文本编辑器复制并编辑 samples/standalone.yml 文件。

在容器外部安装 nginx

首先,确保容器未运行:

cd /var/discourse
./launcher stop app

然后安装 nginx 和 certbot:

sudo apt-get update && sudo apt-get install nginx certbot python3-certbot-nginx

修改容器定义

这里我们将更改 Discourse 的实际设置方式。我们不希望容器监听端口,而是告诉它监听一个特殊的文件(socket)。

您需要编辑 /var/discourse/containers/app.yml 以禁用 SSL 并添加模板来创建 nginx socket。内容应如下所示:

# 基础模板;可以精简以减少每个容器模板的功能:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
  # - "templates/web.ssl.template.yml" # 移除 - HTTPS 将由外部 nginx 处理
  # - "templates/web.letsencrypt.ssl.template.yml" # 移除 - HTTPS 将由外部 nginx 处理
  - "templates/web.socketed.template.yml"  # <-- 新增

请务必通过在前面加上 # 来移除或注释掉暴露的端口部分:

# 要暴露哪些端口?
# expose: 通过在每行前面加上 # 来注释掉整个部分
# - "80:80"   # http
# - "443:443" # https

现在您可以执行以下命令:

/var/discourse/launcher rebuild app

以重建 Discourse,使其数据可通过 socket 访问。

如果您使用的是其他无法使用 WebSocket 的反向代理,可以在上述部分中改为暴露其他端口,例如 - 8080:80

为外部 nginx 创建 NGINX “站点”

为 Discourse 创建一个站点文件:

cd /etc/nginx/sites-available
cp default discourse.example.com
cd ../sites-enabled
ln -s ../sites-available/discourse.example.com

接下来编辑该文件,注释掉以下行:

        #listen 80 default_server;
        #listen [::]:80 default_server;

并按照以下方式编辑 server_namelocation 部分:

    server_name discourse.example.com;  # <-- 修改此处

location / {
                proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
                proxy_set_header Host $http_host;
                proxy_http_version 1.1;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Real-IP $remote_addr;

}

如果您使用的是双容器安装,socket 行应为:

                proxy_pass http://unix:/var/discourse/shared/web-only/nginx.http.sock:;

然后在 Shell 中执行:

certbot --nginx

并按照提示操作。如果您不理解这些提示,可能不应该执行此操作,但可以查阅 certbot 文档寻求帮助。

@pfaffman 认为 certbot 会自动为您完成此操作,但如果您修改了 nginx 配置,则需要执行:

sudo service nginx reload

创建其他站点

Discourse 部分的设置已完成!

创建其他 NGINX “站点”,然后像上一步那样链接并启用它们。

提示

  • sudo netstat -tulpn:这将告诉您哪些端口正在被使用
  • /var/log/nginx/error.log:这是 Ubuntu 上 nginx 日志的位置。当您遇到 502 Bad Gateway 错误时,这里会告诉您具体的错误信息。
137 个赞
Port already in use, what to do?
Installing Discourse Under Nginx
Nginx configuration for discourse
Discourse + Nginx reverse Proxy
Using Multiple Websites with Nginx + Discourse
[Solved] Help setting other websites on the same DigitalOcean droplet
Using Discourse With Other Sites on Same Droplet
Nginx + discourse
Setting up nginx for use with Discourse
Can't make Discourse accessible through Apache
Wordpress and Discourse in a single droplet
Discourse not working through separate nginx docker
Problem with discourse in a subfolder
Faster rebuilds?
NGINX proxy in front of the Docker container.errors
Nginx configuration for discourse
Disable direct access with port (nginx)
Setting up Discourse on a VPS with other sites
Wordpress and discourse on the same server
Port already in use, what to do?
A better "site not available" page
Broken images inside posts
403 forbidden after installation
Landing Page
Launcher rebuild app failing: repository name must be lowercase [SOLVED]
Which performance is better if discourse or phpbb hosts on a same vps?
NGINX proxy in front of the Docker container.errors
Multiple discourse installation on single droplet
Starting a second Discourse forum on the same VPS
Nginx configuration for discourse
Installing docker on an already running web server?
Bad gateway when trying to use SSL
Discourse doesn't deliver webpages, fresh install on Linode Ubuntu 14.04
Custom Intro page for discourse
Multiple container setup problems
Run other php script
Domain names pointing with shared AWS instance
How to install discourse on hosting?
Can not visit forum.abc.com again after port change to container/app/yml
Error connecting to Redis
Advice on integrating into a Docker-Compose setup?
Installation on v-server as a subfolder with other services in subfolders using apache
Installation on v-server as a subfolder with other services in subfolders using apache
Installation on v-server as a subfolder with other services in subfolders using apache
Wanting to run Discourse alongside apache
Add subdomain exception to nginx to host another site on same host
Docker0 Missing (OpenVZ)
Domain & Subdomains
Domain names pointing with shared AWS instance
Nginx rate limiting outside of container - any tips?
Sandbox and test discourse on host?
Best approach for test and production instance of discourse
Mixed content for icon using http on https setup
How do I do what I did in htaccess in nginx?
How do I do what I did in htaccess in nginx?
How Can I set up discourse on my hosting?
CDN causes white screen
Using a certificate when Discourse is installed behind a reverse proxy
Can I run wordpress in the same VPS with a second IP?
ERR_SSL_PROTOCOL_ERROR with Letsencrypt
Using a certificate when Discourse is installed behind a reverse proxy
Generals Subfolder recommendations and tips
Installing discourse with nginx already running?
Wordpress + Discourse using Digital Ocean and Serverpilot
Unsure About How to Start a Website Project
Install on vps problem?
Install discourse alongside WordPress in a dedicated server
Installation Help required
Installed OK. Working fine for one day. Suddenly stopped working
SSL received a record that exceeded the maximum permissible length
Moved from PluXml and phpBB to Wordpress and Discourse, my all-new experience :tada:
Discourse site loads via IP but via domain only header
Configuring Website with Discourse and Wordpress?!
Looking for a tutorial on discourse/wordpress 1 machine install
Blank pages, 500 errors and no logs
Remote users IPV6 address shows as localhost
Not able to send email Net::ReadTimeout
URLs for avatars & emoticons adding :80 to the end of the domain
OpenID Connect extension not creating new Discourse users
Installed discourse on a server that already runs a webserver, domain just redirects to subdomain
Installation fails on my Debian server
How to install Discourse on Plesk?
Discourse with Traefik 2.0
How to add a subdomain on a different droplet/server?
More than one site as different container running on the same do server
Can I have two domains pointing towards the same IP address without redirect?
Postgres already running
Install Discourse on a droplet with WordPress served by Apache?
How to collect all static assets (js, css) used by discourse
Avatar, Site Logos, and Cert Errors
Error 521 after latest update due to CloudFlare settings
Runing Discourse Along a Wordpress Website
Discourse and WordPress installation on one ubuntu desktop
How do I rebuild app using the host network rather than the docker network?
Can I Host More Than 1 Thing On My VPS?
Is it possible the certbot inside the container can affect new certbot outside it?
Discourse + web server. Possible or better to avoid?
Help for installing Discourse alongside Apache2
Add an offline page to display when Discourse is rebuilding or starting up
502 Gateway Error: Discourse Installation with SSL form Cloudflare
Installation of Wordpress and Discourse same domain same server?
Multiple subdomain instances of Discourse at the same domain?
I can't set nginx: [emerg] cannot load certificate "/var/discourse/shared/standalone/ssl/ssl.crt": BIO_new_file() failed
Discourse with other websites, SMTP issue: End of file reached
Error: Slow down, too Many Requests from this IP Address
Links in emails are using http instead of https
Google auth error
Anything else on same Digital Ocean droplet as Discourse?
Multiple discourse installation on single droplet
Checking domain name fails behind NGINX proxy
Changing force_https does not update the url of uploaded images causing a mixed content warning
Running Discourse alongside LAMP
429 error when opening multiple topics
What is the best way to install Discourse Forum on a Proxmox VM and expose it on the internet
WARNING: Port 443 of computer does not appear to be accessible using hostname
Address already in use during setup
Setting up Discourse on a machine with existing Nginx
Installing discourse with http only (no https)
Multisite Dockerfile issues
Nginx error 502
Nginx error 502
IP Lookup is Pulling CDN's X-Forwarded-For
Not getting Discourse Home page
Multiple subdomain instances of Discourse at the same domain?
Installing Discourse to Debian 10.5
Discourse overloaded real traffic or DDOS? 100% CPU usage despite of decent traffic and high specs server
Redirect_uri query parameter is not adding https
Use X-Forwarded or not?
How could I install another discourse on same server (docker)?
How to make Discourse coexist with nginx on a Debian 9 server?
Discourse won't start because port 80 is in use
Address already in use during setup
Nginx.http.sock not created
Site backup after migration
Migrate Existing Community to a Docker based Discourse
Standalone discourse install issues and how to use a separate ip address?
Discourse installed on subdomain but not working
How do I run Discourse on Pterodactyl Panel?
Discourse on nginx WITHOUT Passenger?
Different Device, Same IP with Nginx
Discourse shows server IP/localhost as user's IP
Discourse HTTPS Web Socket
Discourse shows server IP/localhost as user's IP
Add an offline page to display when Discourse is rebuilding or starting up
Add an offline page to display when Discourse is rebuilding or starting up
Restore a backup from the command line
Use Nginx Proxy Manager to manage multiple sites with Discourse
Discourse-app container starts then silently stops
Discourse-app container starts then silently stops
Discourse-app container starts then silently stops
New installation behind Litespeed reverse proxy stalls on loading screen
Discourse-app container starts then silently stops
Discourse-app container starts then silently stops
WARNING: Port 443 of computer does not appear to be accessible, but web page is ok
Discourse on a Raspberry Pi | Blog
Centminmod + discourse
Add an offline page to display when Discourse is rebuilding or starting up
Add an offline page to display when Discourse is rebuilding or starting up
NGINX fails to start
How to install Discourse on Apache server with existing site
Freshly-installed site is showing the error: "Ember CLI is Required in Development Mode"
How do I set up a frpc server with frp to install Discourse?
Getting Discourse to see the Prometheus server IP
How to setup NGINX in the Discourse Docker container
Use CloudPanel to manage multiple sites with Discourse
Running on different port than 443: Disable redirect to nonport URL
Reverse proxy for Discourse | Real IP masking
Page Publishing
Wordpress and Discourse instance + some other functionality on one droplet
Run discourse in front of load balancer like AWS/Oracle OCI
Does discourse launcher / docker use the local postgresql and redis servers?
How to use FIDO2 with Discourse behind a reverse proxy?
Discourse installed in UNRAID Ubuntu Server VM behind NPM reverse proxy not resolving hostname
Setting a custom IP doesn't work?
Where to start with coding?
Add an offline page to display when Discourse is rebuilding or starting up
Assistance Needed for Configuring Discourse on a Multi-Site NGINX Server
Reverse Proxy Into Discourse
Setting up Discourse on a machine with existing Nginx
How to use FIDO2 with Discourse behind a reverse proxy?
Problems installing on existing EC2 server
Infinite 301 redirect with reverse proxy setup
Use Nginx Proxy Manager to manage multiple sites with Discourse
Hosting dynamic content inside a Discourse subfolder
Running multiple things on the same sever as my Pi (where Discourse is hosted)?
Need to setup discourse in ubuntu 22.04 server for my organization use
How do I even install Discourse?
Creating subdirectories in a Discourse hosting environment
Difficulty installing on vm that includes CPanel and Apache
Layouts Plugin
Reverse proxy X-Forwarded-For
How to install discourse on hosting?
[GER] Wie installiere ich das Forum Per Linux?
Setup Multisite Configuration with Let's Encrypt and no Reverse Proxy
Can't Send Emails
Trouble configuring discourse with reverse proxy
Commit b4a3389 更新后如何获取用户ip
How to Change Discourse Port 80 and 443 to another Port
Multiple Standalone containers instead of multisite?
Discourse socketed: Nginx in front of discourse: no IP adresses
How should I enable letsencrypt while discourse is beside other websites
How to Docker+Discourse and Apache too?
Help understanding the structure of using discourse + static website
Discourse not showing up at specified hostname
Success - New Multisite Install on Dedicated server using ServerPilot, Nginx and Apache
Error in installing
Regenerating LetsEncrypt keys from behind nginx
[Solved] Dev instance with nginx: topic preview not working
Installation on Ubuntu 14.04 LTS + Apache 2 + Plesk 12
Can't get Discourse to work on different ports
Webhooks/Sidekiq issue on dev instance
Discouse passes localhost uri as oauth redirect_uri
What is the recommended practice for WordPress and Discourse on the same server?
I cannot access my main site after trying to install discourse
Nginx + discourse
Discourse with zpanel
Backup uploads terribly slow
How to install wordpress in the Secondary directory?
How should I enable letsencrypt while discourse is beside other websites
Moving to subdomain
Deploying discourse on server already running another rails app
How to upload files in root directory?
WordPress, Discourse and Local SMTP Server
Default app.yml file anywhere?
Does it make sense to use Discourse on any server or is it with the hosting service Discourse provides?
Oauth2 redirect_uri uses HTTP when my forum is using HTTPS
502 Bad gateway error after switching to SSL
Wrong sending domain used
Wrong sending domain used
Wordpress integration with mini forums
How can one install a panel with discourse?
How to change the port from docker - help
Discourse stopped working after installing Plesk
Discourse blocking with password reset
Difference between socket- and port-based connection to outer NGINX?
Nginx configuration for discourse
Setting up Discourse on a VPS with other sites
Put forum under sub-domain and have website
Can Discourse ship frequent Docker images that do not need to be bootstrapped?
Can Discourse ship frequent Docker images that do not need to be bootstrapped?
IP Spoofing Attack
Error while doing discourse setup