Si deseas ejecutar otros sitios web en la misma máquina que Discourse, debes configurar un proxy adicional de NGINX o HAProxy delante del contenedor Docker.
NOTA: Esto es para administradores avanzados
Esta guía asume que ya tienes Discourse funcionando; si no es así, puede ser difícil determinar si la configuración está funcionando correctamente.
No puedes usar ./discourse-setup para configurar Discourse si otro servidor está utilizando el puerto 80 o 443. Necesitarás copiar y editar samples/standalone.yml con tu editor de texto favorito.
Instalar nginx fuera del contenedor
Primero, asegúrate de que el contenedor no se esté ejecutando:
cd /var/discourse
./launcher stop app
Luego instala nginx y certbot:
sudo apt-get update && sudo apt-get install nginx certbot python3-certbot-nginx
Cambiar la definición del contenedor
Aquí es donde cambiamos cómo se configura realmente Discourse. No queremos que el contenedor escuche en puertos; en su lugar, le indicaremos que escuche en un archivo especial.
Necesitas editar /var/discourse/containers/app.yml para deshabilitar SSL y agregar una plantilla para crear el socket de nginx. Debería verse así:
# plantillas base utilizadas; se pueden reducir para incluir menos funcionalidad por plantilla de contenedor:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
# - "templates/web.ssl.template.yml" # eliminar: https será manejado por el nginx externo
# - "templates/web.letsencrypt.ssl.template.yml" # eliminar: https será manejado por el nginx externo
- "templates/web.socketed.template.yml" # <-- Agregado
Asegúrate de eliminar o comentar los puertos expuestos colocando un # delante.
# ¿qué puertos exponer?
# expose: comenta toda la sección colocando un # delante de cada línea
# - "80:80" # http
# - "443:443" # https
Ahora puedes ejecutar
/var/discourse/launcher rebuild app
para reconstruir Discourse y hacer que sus datos estén disponibles a través del socket.
Si estás usando algún otro proxy inverso que no pueda usar un socket web, en su lugar puedes exponer un puerto diferente en la sección anterior, como - 8080:80.
Crear un «sitio» de NGINX para el nginx externo
Crea un archivo de sitio para Discourse:
cd /etc/nginx/sites-available
cp default discourse.example.com
cd ../sites-enabled
ln -s ../sites-available/discourse.example.com
A continuación, edita ese archivo comentando estas líneas:
#listen 80 default_server;
#listen [::]:80 default_server;
y editando la directiva server_name y la sección location de la siguiente manera:
server_name discourse.example.com; # <-- cambia esto
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;
}
Si estás usando una instalación de dos contenedores, la línea del socket será:
proxy_pass http://unix:/var/discourse/shared/web-only/nginx.http.sock:;
Luego, en una terminal:
certbot --nginx
Y sigue las instrucciones. Si no entiendes las preguntas, probablemente no deberías estar haciendo esto, pero puedes consultar la documentación de certbot para obtener ayuda.
@pfaffman cree que certbot hará esto por ti, pero si realizas cambios en la configuración de nginx, necesitarás ejecutar
sudo service nginx reload
Crear tus otros sitios
¡Ya terminaste con la sección de Discourse!
Crea otros «sitios» de NGINX, luego enlaza y habilita ellos, como en el último paso anterior.
Consejos
sudo netstat -tulpn: Esto te dirá qué puertos están siendo utilizados/var/log/nginx/error.log: Es la ubicación del registro de nginx en Ubuntu. Esto te dirá cuál es el error cuando obtengas un error 502 Bad Gateway.