Servir Discourse desde una subcarpeta (prefijo de ruta) en lugar de un subdominio

:warning: Declaración oficial de Discourse sobre la configuración en subcarpetas

Admitimos configuraciones de subcarpetas para nuestros clientes empresariales y superiores. Debido a la gran complejidad de la configuración técnica, recomendamos encarecidamente no utilizar esta configuración a menos que tenga mucha experiencia en configuraciones personalizadas de subcarpetas.

Es fundamental que comprenda a fondo

  • La configuración de NGINX en el contenedor Docker de Discourse
  • El reenvío seguro de la IP original mediante encabezados personalizados en la cadena del proxy
  • La limitación de velocidad en el servidor proxy frontal

Si todo esto le suena extraño, le recomendamos encarecidamente que evite esta configuración.

Para servir Discourse desde una subcarpeta (también conocida como con un prefijo de ruta) en su dominio, como https://www.example.com/=SUBFOLDER=, ¡así es como debe hacerlo!

Configuración de Docker

En la sección env de su archivo yml del contenedor Docker, agregue la configuración DISCOURSE_RELATIVE_URL_ROOT con la subcarpeta que desea usar. Asegúrese de que no termine con una /.

Editar esto actualizará toda la guía.

env:
  ...
  DISCOURSE_RELATIVE_URL_ROOT: /=SUBFOLDER=

La sección run necesita algunos cambios para enviar todas las rutas de Discourse al lugar correcto. Aquí hay una sección run completa con soporte para subcarpetas:

run:
    - exec:
        cd: $home
        cmd:
          - mkdir -p public/=SUBFOLDER=
          - cd public/=SUBFOLDER= & ln -s ../uploads & ln -s ../backups
    - replace:
       global: true
       filename: /etc/nginx/conf.d/discourse.conf
       from: proxy_pass http://discourse;
       to: |
          rewrite ^/(.*)$ /=SUBFOLDER=/$1 break;
          proxy_pass http://discourse;
    - replace:
       filename: /etc/nginx/conf.d/discourse.conf
       from: etag off;
       to: |
          etag off;
          location /=SUBFOLDER= {
             rewrite ^/=SUBFOLDER=/?(.*)$ /$1;
          }
    - replace:
         filename: /etc/nginx/conf.d/discourse.conf
         from: $proxy_add_x_forwarded_for
         to: $http_your_original_ip_header
         global: true

$http_your_original_ip_header representa Your-Original-Ip-Header, que es un Encabezado de Confianza que usted establece en el origen y que contiene la IP real del cliente.

Esto es necesario porque el tráfico pasa a través de un proxy central; si Discourse tiene una IP pública, puede falsificarla. Si Discourse es privado, es posible que pueda arreglárselas con X-Forwarded-For.

Después de realizar estos cambios, inicie su contenedor Docker como de costumbre, o reconstruya si está cambiando un contenedor existente.

./launcher bootstrap app

o

./launcher rebuild app

Se adjunta un ejemplo completo de archivo yml para un contenedor independiente.

subfolder-sample.yml (3.1 KB)

Preocupaciones sobre la limitación de velocidad

Si va a utilizar esta configuración, probablemente querrá limitar la velocidad de las solicitudes antes de que lleguen a NGINX en el contenedor, lo que significa que probablemente evitará usar nuestra plantilla de limitación de velocidad. Es muy difícil configurar NGINX en el contenedor para limitar en una IP reasignada y requeriría cambios complejos en la plantilla.

Publicaciones existentes

Si realizó esto con un sitio existente que estaba en un subdominio, encontrará que sus subidas están rotas. Hay una herramienta que puede ayudar a corregir todas las rutas para incluir la subcarpeta. Primero, ingrese al contenedor Docker y navegue al directorio de Discourse:

cd /var/discourse
./launcher enter app
cd /var/www/discourse

Luego, ejecute el comando de remapeo después de hacer una copia de seguridad:

RAILS_ENV=production bundle exec script/discourse remap '/uploads' '/=SUBFOLDER=/uploads'

Vea también: Use a subfolder (path prefix) to serve Discourse with multiple servers sharing a domain para configuraciones más esotéricas.

robots.txt

Ahora que Discourse se ejecuta en una subcarpeta, no puede servir su archivo robots.txt para controlar qué rutas son rastreadas por los rastreadores web. Los rastreadores buscarán el archivo robots.txt de su sitio principal (https://www.example.com/robots.txt). Debe copiar el contenido del archivo robots.txt de Discourse (que se encuentra en https://www.example.com/=SUBFOLDER=/robots.txt) y colocarlo en el archivo robots.txt de su sitio principal.

35 Me gusta
How can I change my installation from forum.website.com to www.website.com/forum?
Moving Discourse to subdirectory caused all uploads to break
Uploaded avatars and Gravatar not working with subfolder installation
Is it possible to install discourse inside a directory?
Launch Discourse on www.example.com/meta/ In a web folder type
Subfolder with SSL and nginx reverse proxy
404 errors (assets) on Subfolder installation
Uploaded avatar or gravatar not working
Install Discourse into domain.com/forums
Problem with discourse in a subfolder
Moving Discourse to subdirectory caused all uploads to break
Non-standard port breaks uploads
Avatar uploads broken on subfolder installs?
Image lightbox not working in subfolder install
Install Discourse as subfolder within Wordpress website?
Is it possible to install Discourse on the same domain of your main website
Subfolder install - external links get changed/redirected to site relative links
Discourse embedded on my WP
Reverse Proxy Assets
Reverse Proxy rewrites domain in external links in posts
Inheriting discourse install - need some assistance
Multisite installation ... in subdirectories?
Generals Subfolder recommendations and tips
Add to route headers?
Sorry, there was an error authorizing your account
Site Logo and Icons Break due to subfolder config
Site Logo and Icons Break due to subfolder config
Site Logo and Icons Break due to subfolder config
Running Discourse at / while serving a custom app at /tickets on the same domain
404 errors (assets) on Subfolder installation
404 errors (assets) on Subfolder installation
Moving Discourse from Subdomain to Subfolder
Blank Page After installing Discourse on Subfolder
Trailing slash and subfolder setup
Install Discourse as a subdirectory with existing Nginx
How to run discourse on subdirectory of external domain?
How to run discourse on subdirectory of external domain?
How to run discourse on subdirectory of external domain?
Digest email issue with 'stable'
Using other ports than 80 and 443 - HowTo?
Add secondary url / embed into Wordpress
Recent Changes Breaking Subfolder Setup?
Issue with FAQ link on edge case subfolder setup
Issue with FAQ link on edge case subfolder setup
Put discourse on a sub url
No subfolder prefixing for some resources
Upgrade failed - could use some help to try and fix using SSH
How to run Discourse in a subfolder?
Install Discourse without docker with an existing Rails app
Docker subfolder install not working due to Ember-CLI proxy error?
Multisite DISCOURSE_RELATIVE_URL_ROOT
How to install discourse into subdirectory instead of subdomain?
Setup wizard emoji wrong in subfolder install
Not find a Gravatar
Installing for production via Docker on existing server with Litespeed?
Use a subfolder (path prefix) to serve Discourse with multiple servers sharing a domain
Configure a Cloudfront reverse proxy for a subfolder install
Run other websites on the same machine as Discourse
Embedding Categories in Existing SPA
Does custom domain support the subpath format like 'example.com/forum'?
To use Discourse completely on shopify
Are separate subdomains required for making a discourse forum?
Problem when updating Discourse Forum
Domain missing from some requests after migration from subfolder back to subdomain
Error when I send a message in chat [downgraded to Stable from 3.1.0beta4]
Error when I send a message in chat [downgraded to Stable from 3.1.0beta4]
How to Change Discourse forum path
How to setup NGINX in the Discourse Docker container
How to setup NGINX in the Discourse Docker container
Possible to update add url path prefix for /t and /c
Implement the discourse forum in the laravel 11 project
Endless loading behind Cloudflare
Publish Discourse under URL
Cloudflare with subfolder setup
How to Set Up Discourse in a Subdirectory for Self-Hosting?
Setup wizard emoji wrong in subfolder install
National Flags
Discourse sign in redirects to root directory instead of subfolder
Last update breaks permalink for categories
Setup wizard emoji wrong in subfolder install
Ghost & Discourse SSO implementation
Wiki topics look incredibly out of date?
Too many redirects when reverse proxying to Discourse from a different server
Blank main page on one forum (subfolder + multisite install)
Moving Discourse to subdirectory caused all uploads to break
Feasible to reverse proxy using qualifier in URL?
Upgrade doesn't work when installed with subfolder
Setup Discourse with KeyCDN
Message bus does not respect subfolder during update process
Wiki Posts Not Green?
Base_url and base_uri
Embed whole Discourse board into Wordpresspage
Backup upload failing
Redirect to discourse from a route in another domain
Redirect to discourse from a route in another domain
Problem with discourse in a subfolder
Install Discourse as subfolder within Wordpress website?
Looking for a developper
Switching forum from subdomain to sub directory
How to install discourse with nginx as proxy on specific path?
All IPs recorded as 127.0.0.1
How to install discourse with nginx as proxy on specific path?
SetupWizard, blank screen, JS Error "`virtual-dom"
Trouble connecting drupal and discourse
Failed to Bootstrap - launcher rebuild app
Redirect from one server to another server and keep everything after the URL
Installation on v-server as a subfolder with other services in subfolders using apache