@pfaffman editó esto extensamente el 24.02.2022. Cúlpame si está roto.
Si desea ejecutar otros sitios web en la misma máquina que Discourse, deberá configurar un proxy NGINX o HAProxy adicional frente al contenedor Docker.
NOTA: Esto es para administradores avanzados
Esta guía asume que ya tiene Discourse funcionando; si no es así, puede ser difícil saber si la configuración funciona o no.
No puede usar ./discourse-setup para configurar Discourse si otro servidor está utilizando el puerto 80 o 443. Deberá copiar y editar samples/standalone.yml con su editor de texto preferido.
Instalar nginx fuera del contenedor
Primero, asegúrese de que el contenedor no se esté ejecutando:
cd /var/discourse
./launcher stop app
Luego instale 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 los puertos; en su lugar, le diremos que escuche en un archivo especial.
Debe editar /var/discourse/containers/app.yml para deshabilitar ssl y agregar plantillas para crear el socket nginx. Debería verse así:
# plantillas base utilizadas; se puede reducir para incluir menos funcionalidad por plantillas 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 -- SSL será manejado por nginx externo
# - "templates/web.letsencrypt.ssl.template.yml" # eliminar -- SSL será manejado por nginx externo
- "templates/web.socketed.template.yml" # <-- Añadido
Asegúrese de eliminar o comentar los puertos expuestos poniendo un # delante.
# ¿qué puertos exponer?
# expose: comentar toda la sección poniendo un # delante de cada línea
# - "80:80" # http
# - "443:443" # https
Ahora puede
/var/discourse/launcher rebuild app
para reconstruir Discourse y hacer que sus datos estén disponibles para el socket.
Si está utilizando otro proxy inverso que no puede usar un socket web, puede exponer un puerto diferente en la sección anterior, como - 8080:80.
Crear un ‘sitio’ NGINX para el nginx externo
Cree 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, edite ese archivo comentando estas líneas:
#listen 80 default_server;
#listen [::]:80 default_server;
y editando la estrofa server_name y location de esta manera:
server_name discourse.example.com; # <-- cámbialo
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 $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
Si está utilizando 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 shell:
certbot --nginx
Y siga las instrucciones. Si no entiende las indicaciones, probablemente no debería estar haciendo esto, pero puede consultar la documentación de certbot para obtener ayuda.
@pfaffman cree que certbot hará esto por usted, pero si realiza cambios en la configuración de nginx, deberá
sudo service nginx reload
Crear sus otros sitios
¡Ya ha terminado con la sección de Discourse!
Cree otros “sitios” NGINX, luego enlácelos y habilítelos, como en el último paso anterior.
Consejos
sudo netstat -tulpn: Esto le dirá qué puertos se están utilizando/var/log/nginx/error.log: Es la ubicación del registro de nginx en ubuntu. Esto le dirá cuál es el error cuando reciba un error 502 Bad Gateway.