Declaración oficial de Discourse sobre la configuración en subcarpetas
Ofrecemos soporte para configuraciones en subcarpetas a nuestros clientes alojados en nivel empresarial y superior. Debido a la gran complejidad técnica de esta configuración, recomendamos encarecidamente que no la utilices a menos que tengas mucha experiencia con configuraciones personalizadas en subcarpetas.
Es fundamental que tengas un profundo conocimiento de:
- La configuración de NGINX en el contenedor Docker de Discourse
- La retransmisión segura de la IP original mediante encabezados personalizados en la cadena de proxy
- La limitación de tasa en el servidor proxy frontal
Si todo esto te suena extraño o poco familiar, te recomendamos encarecidamente que evites esta configuración.
Para alojar Discourse en una subcarpeta (también conocida como con un prefijo de ruta) en tu dominio, como https://www.example.com/=SUBFOLDER=, ¡así es como se hace!
Configuración de Docker
En la sección env de tu archivo yml del contenedor Docker, añade la configuración DISCOURSE_RELATIVE_URL_ROOT con la subcarpeta que deseas utilizar. Asegúrate 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 dirigir todas las rutas de Discourse al lugar correcto. Aquí tienes 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;
}
- file:
path: /etc/nginx/conf.d/outlets/server/set-real-ip-from-webroot.conf
chmod: 644
contents: |
set_real_ip_from 123.456.789.ABC; # la dirección IP de tu proxy upstream
- file:
path: /etc/nginx/conf.d/outlets/server/real-ip-header.conf
chmod: 644
contents: |
real_ip_header x-forwarded-for;
Para más detalles sobre cómo preservar la dirección IP del usuario final, consulta Handling the "chain of trust" of the end user's real IP.
Después de realizar estos cambios, inicializa tu contenedor Docker como de costumbre, o reconstrúyelo si estás modificando un contenedor existente.
./launcher bootstrap app
o
./launcher rebuild app
Adjunto hay un ejemplo completo de un archivo yml de un contenedor independiente:
subfolder-sample.yml (3.1 KB)
Preocupaciones sobre la limitación de tasa
Si optas por esta configuración, probablemente quieras limitar la tasa de solicitudes antes de que lleguen a NGINX en el contenedor, lo que significa que probablemente evitarás usar nuestra plantilla de limitación de tasa. Es muy difícil configurar NGINX en el contenedor para limitar según una IP remapeada y requeriría cambios complejos en la plantilla.
Publicaciones existentes
Si haces esto con un sitio existente que estaba en un subdominio, notarás que tus cargas de archivos están rotas. Hay una herramienta que puede ayudar a corregir todas las rutas para que incluyan la subcarpeta. Primero, entra en el contenedor Docker y navega al directorio de Discourse:
cd /var/discourse
./launcher enter app
cd /var/www/discourse
Luego ejecuta el comando de remapeo después de hacer una copia de seguridad:
RAILS_ENV=production bundle exec script/discourse remap '/uploads' '/=SUBFOLDER=/uploads'
Consulta también: Use a subfolder (path prefix) to serve Discourse with multiple servers sharing a domain para configuraciones más exóticas.
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 tu sitio principal (https://www.example.com/robots.txt). Necesitas copiar el contenido del archivo robots.txt de Discourse (ubicado en https://www.example.com/=SUBFOLDER=/robots.txt) y colocarlo en el archivo robots.txt de tu sitio principal.