Discourse no carga con Apache y redirección de proxy

He pasado los últimos días intentando encontrar una forma de integrar Discourse con Apache en el mismo droplet de DigitalOcean, pero los tutoriales disponibles aquí en Discourse están desactualizados o no se aplican a mi caso. Un tutorial utiliza CentOS y HAProxy (yo uso Ubuntu) y el otro utiliza Nginx (yo uso Apache).

Me encontré con un comentario en un hilo de DigitalOcean y seguí las instrucciones allí en un droplet de prueba: Install Discourse on a droplet with WordPress served by Apache ? | DigitalOcean

Todo parece haber ido sin problemas, incluido el SSL de Let’s Encrypt. Mi página de inicio y algunos documentos HTML estáticos funcionan perfectamente. Discourse, a pesar de instalarse sin errores, no se muestra. Al navegar a community.mysite.com, solo veo mi página de inicio con HTTPS no seguro en la URL. Sí, mis configuraciones de DNS son precisas y apuntan al servidor correcto.

Este es mi archivo mysite.com.conf:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName mysite.com
    ServerAlias www.mysite.com
    DocumentRoot /var/www/mysite.com
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =www.mysite.com [OR]
    RewriteCond %{SERVER_NAME} =mysite.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

Este es mi archivo mysite.com-le-ssl.conf:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin webmaster@localhost
    ServerName mysite.com
    ServerAlias www.mysite.com
    DocumentRoot /var/www/mysite.com
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLCertificateFile /etc/letsencrypt/live/mysite.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/mysite.com/privkey.pem
</VirtualHost>
</IfModule>

Este es mi archivo community.mysite.com.conf:

<VirtualHost *:80>
  ServerName community.mysite.com
  ServerAlias www.community.mysite.com

  <IfModule proxy_module>
    ProxyPreserveHost on
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
  </IfModule>
</VirtualHost>

Y finalmente, aquí está mi archivo app.yml (editado, por supuesto):

## este es la plantilla de contenedor Docker todo en uno, independiente de Discourse
##
## Después de realizar cambios en este archivo, DEBES reconstruir
## /var/discourse/launcher rebuild app
##
## ¡TEN MUCHO CUIDADO AL EDITAR!
## ¡LOS ARCHIVOS YAML SON SUPER SENSIBLES A ERRORES EN ESPACIOS EN BLANCO O ALINEACIÓN!
## visita http://www.yamllint.com/ para validar este archivo según sea necesario

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Descomenta estas dos líneas si deseas agregar Let's Encrypt (https)
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

## ¿Qué puertos TCP/IP debe exponer este contenedor?
## Si deseas que Discourse comparta un puerto con otro servidor web como Apache o Nginx,
## consulta https://meta.discourse.org/t/17247 para más detalles
expose:
      - "8080:80"   # reenvía el puerto 8080 del host al puerto 80 del contenedor (http)
      - "8443:443"   # reenvía el puerto 8443 del host al puerto 443 del contenedor (https)

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Establece db_shared_buffers en un máximo del 25% de la memoria total.
  ## se establecerá automáticamente por bootstrap según la RAM detectada, o puedes sobrescribirlo
  db_shared_buffers: "128MB"

  ## puede mejorar el rendimiento de clasificación, pero añade uso de memoria por conexión
  #db_work_mem: "40MB"

  ## ¿Qué revisión de Git debe usar este contenedor? (predeterminado: tests-passed)
  #version: tests-passed

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## ¿Cuántas solicitudes web simultáneas se admiten? Depende de la memoria y los núcleos de CPU.
  ## se establecerá automáticamente por bootstrap según los CPUs detectados, o puedes sobrescribirlo
  UNICORN_WORKERS: 2

  ## TODO: El nombre de dominio al que responderá esta instancia de Discourse
  ## Obligatorio. Discourse no funcionará con una dirección IP desnuda.
  DISCOURSE_HOSTNAME: community.mysite.com

  ## Descomenta si deseas que el contenedor se inicie con el mismo
  ## nombre de host (opción -h) que se especificó anteriormente (predeterminado "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Lista de correos electrónicos separados por comas que serán administradores y desarrolladores
  ## en el registro inicial, ejemplo 'usuario1@ejemplo.com,usuario2@ejemplo.com'
  DISCOURSE_DEVELOPER_EMAILS: 'miemail'

  ## TODO: El servidor de correo SMTP utilizado para validar nuevas cuentas y enviar notificaciones
  ## Se requieren dirección, nombre de usuario y contraseña de SMTP
  ## ADVERTENCIA: el carácter '#' en la contraseña de SMTP puede causar problemas
  DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: mi-nombre-de-usuario-smtp
  DISCOURSE_SMTP_PASSWORD: "mi-contraseña-smtp"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (opcional, predeterminado true)

  ## Si agregaste la plantilla de Let's Encrypt, descomenta abajo para obtener un certificado SSL gratuito
  LETSENCRYPT_ACCOUNT_EMAIL: miemail

  ## La dirección http o https de CDN para esta instancia de Discourse (configurada para extraer)
  ## consulta https://meta.discourse.org/t/14857 para más detalles
  #DISCOURSE_CDN_URL: https://discourse-cdn.ejemplo.com

## El contenedor Docker no tiene estado; todos los datos se almacenan en /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Los plugins van aquí
## consulta https://meta.discourse.org/t/19157 para más detalles
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Cualquier comando personalizado para ejecutar después de la construcción
run:
  - exec: echo "Inicio de comandos personalizados"
  ## Si deseas establecer la dirección de correo electrónico 'De' para tu primer registro, descomenta y cambia:
  ## Después de recibir el primer correo electrónico de registro, vuelve a comentar la línea. Solo necesita ejecutarse una vez.
  #- exec: rails r "SiteSetting.notification_email='info@sinconfigurar.discourse.org'"
  - exec: echo "Fin de comandos personalizados"

¿Alguien puede decirme dónde me equivoqué con esto o qué podría estar faltando? ¡Gracias!

Tendrás mucha más suerte usando nginx como proxy inverso.

Si tu sistema lo permite, considera usar nginx en lugar de apache2

2 Me gusta

Entonces, la comunidad no redirige a tu dominio, sino que apunta a tu IP. ¿Está presente el enlace simbólico en /etc/apache2/sites-enabled/?

¿Está cargado el módulo proxy?
apache2ctl -M

1 me gusta

No hay enlace simbólico.

Sí. Afortunadamente, ese es uno de los pasos del tutorial al que enlacé.

a2enmod proxy
a2enmod proxy_http
a2enmod proxy_balancer
a2enmod lbmethod_byrequests

el paso

a2ensite community.yoursite.com

quizás no se haya ejecutado correctamente; es posible que necesites sudo.

sudo ln -s /etc/apache2/sites-available/community.yoursite.com.conf /etc/apache2/sites-enabled/

también debería funcionar.
Luego,

sudo apachectl configtest

y cruzar los dedos

sudo systemctl restart apache2

Estimado @OrbitStorm,

He echado un vistazo rápido a tu configuración de hosts virtuales de Apache2 y a tu archivo yml para Discourse, y parece que no están configurados correctamente.

Aquí tienes algunas pistas:

En primer lugar, cuando ejecutas Discourse detrás de un proxy inverso, no debes habilitar SSL LETSENCRYPT en la configuración del archivo yml de Discourse (véase el ejemplo funcional más abajo). Discourse solo necesita un único puerto para comunicarse con el proxy inverso, y esa conexión no está cifrada con SSL.

En segundo lugar, si observas tu configuración principal del host virtual, que es el puerto 443 en el proxy inverso:

<IfModule mod_ssl.c>
<VirtualHost *:443>
	ServerAdmin webmaster@localhost
	ServerName mysite.com
	ServerAlias www.mysite.com
	DocumentRoot /var/www/mysite.com
	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

       Include /etc/letsencrypt/options-ssl-apache.conf
       SSLCertificateFile /etc/letsencrypt/live/mysite.com/fullchain.pem
       SSLCertificateKeyFile /etc/letsencrypt/live/mysite.com/privkey.pem
</VirtualHost>
</IfModule>

La configuración anterior carece de toda la información necesaria para el proxy inverso (véanse las configuraciones funcionales adjuntas más abajo).

Aquí tienes una configuración funcional para ti, que es básicamente la misma que se describe en los diversos tutoriales de meta (muy bien documentada en este sitio en otros mensajes, por lo que esto es básicamente duplicar otra documentación aquí en meta):

<VirtualHost *:80>
        ServerName discourse.your-great-web-site.com
        ServerAdmin webmaster@localhost
        ProxyPreserveHost On
        ErrorLog ${APACHE_LOG_DIR}/discourse_errors.log
        CustomLog ${APACHE_LOG_DIR}/discourse.log combined
        ModPagespeed Off
        RewriteEngine on
        RewriteCond %{SERVER_NAME} =discourse.your-great-web-site.com
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

Ten en cuenta que en la configuración del puerto 80, las directivas principales requeridas son ServerName, RewriteEngine y las reglas de reescritura para redirigir al puerto 443.

Además, si estás ejecutando Apache2 mod_pagespeed, deberías deshabilitarlo, ya que aún no he logrado que mod_pagespeed funcione con Discourse (y no veo ninguna razón para intentarlo).

Aquí está la configuración principal, donde se realiza el “trabajo real”:

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName discourse.your-great-web-site.com
        ServerAdmin webmaster@localhost
        SSLProxyEngine on      # habilitar esto solo después de que Let's Encrypt esté configurado y funcionando
  	    RewriteEngine on
  	    ProxyPreserveHost On
  	    ProxyRequests Off
  	    RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
 	    RequestHeader set X-Real-IP expr=%{REMOTE_ADDR}

        #ProxyPass / http://127.0.0.1:8888/           # no usamos el puerto, usamos sockets de your-great-web-site
        #ProxyPassReverse / http://127.0.0.1:8888/    # no usamos el puerto, usamos sockets de your-great-web-site
        ProxyPass / your-great-web-site:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/
        ProxyPassReverse  / your-great-web-site:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/

        ErrorLog ${APACHE_LOG_DIR}/discourse_errors_ssl.log
        #CustomLog ${APACHE_LOG_DIR}/discourse_ssl.log combined   #registro de acceso deshabilitado para producción

        ModPagespeed Off
        SSLCertificateFile /etc/letsencrypt/live/discourse.your-great-web-site.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/discourse.your-great-web-site.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

Todas nuestras configuraciones de Discourse utilizan sockets de dominio Unix, por lo que deberás modificar la configuración para que coincida con tu configuración deseada.

El punto principal a entender (en resumen) es que debes deshabilitar LETSENCRYPT en la configuración de tu compilación de Discourse (yml) y solo exponer un único punto de entrada a Discourse; en nuestro caso, un socket de dominio Unix, y en tu caso, un único socket TCP/IP.

Luego, configuras el proxy inverso hacia ese punto de entrada desde el archivo de host virtual del puerto 443 (no desde el host virtual del puerto 80). El host virtual del puerto 80 simplemente redirige al 443. Todo el SSL del puerto 443 lo realiza LETSENCRYPT en el proxy inverso. No se requiere SSL en tu archivo yml de Discourse (véase el ejemplo funcional más abajo).

Aquí tienes uno de nuestros archivos yml funcionales (para la configuración anterior) para que lo revises:

/var/discourse/containers$ cat socket-only.yml
# IMPORTANTE: ESTABLECE UNA CONTRASEÑA SECRETA en Postgres para el usuario Discourse
# TODO: cambia SOME_SECRET en esta plantilla

templates:
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
  - "templates/web.socketed.template.yml"
#  - "templates/sshd.template.yml"
## Descomenta estas dos líneas si deseas agregar Let's Encrypt (https)
  #- "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

## ¿Qué puertos TCP/IP debe exponer este contenedor?
## Si deseas que Discourse comparta un puerto con otro servidor web como Apache o nginx,
## consulta https://meta.discourse.org/t/17247 para obtener detalles
expose:
#  - "80:80"   # http
#  - "443:443" # https

# Usa la clave 'links' para vincular contenedores, es decir, usa la bandera Docker --link.
links:
  - link:
      name: data
      alias: data

# ¿Algunos argumentos extra para Docker?
# docker_args:

params:
  ## ¿Qué revisión de Git debe usar este contenedor? (predeterminado: tests-passed)
  #version: latest
  db_shared_buffers: "4GB"

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8

  # DISCOURSE_DEFAULT_LOCALE: en

  ## ¿Cuántas solicitudes web simultáneas se admiten? Depende de la memoria y los núcleos de CPU.
  ## se establecerá automáticamente durante el arranque según los CPUs detectados, o puedes sobrescribirlo
  #UNICORN_WORKERS: 3
  UNICORN_WORKERS: 8

  ## TODO: El nombre de dominio al que responderá esta instancia de Discourse
  DISCOURSE_HOSTNAME: 'discourse.your-great-web-site.com'

  ## Descomenta si deseas que el contenedor se inicie con el mismo
  ## nombre de host (opción -h) que se especificó arriba (predeterminado "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Lista de correos electrónicos separados por comas que serán administradores y desarrolladores
  ## en el registro inicial, ejemplo 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'tim@discourse.your-great-web-site.com'

  ## TODO: El servidor de correo SMTP utilizado para validar nuevas cuentas y enviar notificaciones
  # Se requieren dirección SMTP, nombre de usuario y contraseña
  # ADVERTENCIA: el carácter '#' en la contraseña SMTP puede causar problemas
  DISCOURSE_SMTP_ADDRESS: smtp.gmail.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: not_for_reply@discourse.your-great-web-site.com
  DISCOURSE_SMTP_PASSWORD: my_super_secret_cool_password
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (opcional, predeterminado true)

  ## Si agregaste la plantilla de Let's Encrypt, descomenta lo siguiente para obtener un certificado SSL gratuito
  #LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

  ## TODO: configurar la conectividad a las bases de datos
  DISCOURSE_DB_SOCKET: ''
  #DISCOURSE_DB_USERNAME: discourse
  DISCOURSE_DB_PASSWORD: another_super_secret_cool_password
  DISCOURSE_DB_HOST: data
  DISCOURSE_REDIS_HOST: data

  DISCOURSE_MAXMIND_LICENSE_KEY: my_max_mind_key
  ## La dirección http o https del CDN para esta instancia de Discourse (configurada para extraer)
  ## consulta https://meta.discourse.org/t/14857 para obtener detalles
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

volumes:
  - volume:
      host: /var/discourse/shared/socket-only
      guest: /shared
  - volume:
      host: /var/discourse/shared/socket-only/log/var-log
      guest: /var/log

## Los plugins van aquí
## consulta https://meta.discourse.org/t/19157 para obtener detalles
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-bbcode.git
          - git clone https://github.com/discourse/discourse-sitemap.git
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/discourse/discourse-whos-online.git
          - git clone https://github.com/unixneo/legacy-info.git

## Recuerda, esta es sintaxis YAML: solo puedes tener un bloque con un nombre
run:
  - exec: echo "Inicio de comandos personalizados"

  ## Si deseas configurar el inicio de sesión con contraseña para root, descomenta y cambia:
  ## Usa solo una de las siguientes líneas:
  #- exec: /usr/sbin/usermod -p 'PASSWORD_HASH' root
  #- exec: /usr/sbin/usermod -p "$(mkpasswd -m sha-256 'RAW_PASSWORD')" root

  ## Si deseas autorizar usuarios adicionales, descomenta y cambia:
  #- exec: ssh-import-id username
  #- exec: ssh-import-id anotherusername

  - exec: echo "Fin de comandos personalizados"
  #- exec: awk -F\# '{print $1;}' ~/.ssh/authorized_keys | awk 'BEGIN { print "Claves SSH autorizadas para este contenedor:"; } NF>=2 {print $NF;}'

Es realmente fácil una vez que comprendes los conceptos básicos; y entender los fundamentos ayuda bastante :slight_smile:

Ten en cuenta que en nuestras configuraciones de Discourse, no ejecutamos un único contenedor (de hecho, rara vez operamos en modo de contenedor único), por lo que nuestro archivo yml no funcionará en una configuración de contenedor único (independiente). Te lo proporciono como referencia para ayudarte, mostrándote cómo se ve una configuración completamente funcional detrás de Apache2.

Ejecutamos Discourse detrás de proxies inversos tanto de Apache2 como de nginx. De hecho, solo usamos proxies inversos por muchas razones. Una de ellas es que podemos usar el proxy inverso para filtrar bots maliciosos, etc. (un tema totalmente diferente).

No hay nada difícil en ejecutar Discourse con Docker (tantos sitios como quieras, uno o 100) detrás de un proxy inverso en un sitio con Apache2; pero ayuda comprender los conceptos básicos.

Espero que proporcionarte tanto los conceptos básicos como los archivos de configuración funcionales te ayude a avanzar y poner Discourse en funcionamiento.

Saludos cordiales…

1 me gusta

@neounix Agradezco enormemente esa respuesta tan detallada, pero parece que la mayoría de los problemas que estoy encontrando se deben a no poder encontrar un tutorial actualizado adecuado. Varios tutoriales aquí indican que se debe habilitar SSL para Discourse en el archivo yml, y uno de ellos afirma que no es necesario agregar información de proxy a mis archivos VirtualHost porque Let’s Encrypt debería hacerlo automáticamente. Tus ejemplos son radicalmente diferentes incluso de mis configuraciones predeterminadas, lo que los hace tan confusos como intentar combinar una configuración de CentOS con Ubuntu.

Tienes toda la razón al decir que entender lo básico ayuda mucho, pero el problema es que lo básico no se cubre adecuadamente y, cuando se hace, está desactualizado desde hace tres años y sin considerar que alguien pueda usar Apache en lugar de Nginx o Ubuntu en lugar de CentOS. También vale la pena mencionar que Discourse es la única razón por la que tengo algún uso para Docker.

Después de pasar cuatro días intentando instalar la aplicación junto con Apache, he terminado. Gratis o no, esto no vale el dolor de cabeza y no voy a seguir buscando en los foros solo para encontrar una y otra vez enlaces copiados y pegados a los mismos dos tutoriales desactualizados e incompletos. Nunca había tenido una experiencia tan frustrante simplemente instalando software de foro hasta Discourse. Eso dice mucho. XenForo e Invision son dos plataformas con las que tengo una experiencia inmensa y son un juego de niños de instalar y usar.

Realmente aprecio el esfuerzo que has puesto en tu respuesta, pero no voy a pedirte que hagas el trabajo por mí, ni debería tener que hacerlo si existiera una documentación adecuada. Es simplemente increíble para mí que mis circunstancias específicas, que no son tan específicas para mí, no hayan sido destacadas en un nuevo tutorial que hiciera este proceso más fácil para los nuevos usuarios.

Sea como sea, te deseo mucha suerte.

3 Me gusta

A pesar de tener toda la intención de dejar Discourse debido a la absoluta falta de documentación actual que no esté hiperenfocada en CentOS/Nginx, una persona increíblemente generosa y paciente de DigitalOcean respondió a un hilo que había creado allí y, tras algunos ensayos y errores, ayudó a elaborar un tutorial sencillo de seguir para usuarios potenciales de Discourse que se encuentran en las mismas circunstancias que yo.

Como recordatorio, esas circunstancias son:

Instalar Discourse en el mismo servidor que Apache | Usando Ubuntu 18.04 | DigitalOcean

créditos a Bobbyiliev @ DigitalOcean
Install Discourse on a droplet with WordPress served by Apache ? | DigitalOcean (primera respuesta)

Requisitos previos

  • Por precaución, asegúrate de hacer una copia de seguridad de tu Droplet, para que, si algo sale mal, puedas volver a una versión funcional.
  • Conéctate por SSH a tu Droplet.
  • Apache instalado; puedes seguir los pasos para hacerlo aquí:

Paso 1: Instalar Docker

Para instalar Docker, sigue los pasos aquí:

Paso 2: Descargar Discourse

Primero, crea un directorio donde almacenarás los archivos de Discourse:

mkdir /var/discourse

Después, clona la imagen oficial de Docker de Discourse en /var/discourse:

git clone https://github.com/discourse/discourse_docker.git /var/discourse

Paso 3: Configurar Discourse para escuchar en el puerto 8080

Usaremos la plantilla standalone.yml, que incluye todos los servicios necesarios como PostgreSQL, Redis, etc.

Copia el archivo de muestra con el siguiente comando:

cp /var/discourse/samples/standalone.yml /var/discourse/containers/app.yml

Después, edita el archivo con tu editor favorito. Abre /var/discourse/containers/app.yml y actualiza los puertos en las líneas 23 y 24:

## ¿Qué puertos TCP/IP debe exponer este contenedor?
expose:
  - "8080:80"   # reenvía el puerto 8080 del host al puerto 80 del contenedor (HTTP)
  - "8443:443"   # reenvía el puerto 8443 del host al puerto 443 del contenedor (HTTPS)

Además, si aún no tienes un certificado SSL, asegúrate de comentar la línea 16:

  #- "templates/web.ssl.template.yml"

Simplemente añade el símbolo # al principio de la línea - "templates/web.ssl.template.yml"; de lo contrario, Discourse no se iniciará.

Paso 4: Configurar Discourse

Cambia de directorio:

cd /var/discourse

Luego, inicia Discourse (ya que es la primera vez que inicias el servicio, se realizará el arranque de la aplicación con los nuevos cambios que tengas en tu archivo app.yml):

./discourse-setup

Nota: Asegúrate de proporcionar una configuración válida del servidor de correo; de lo contrario, la configuración podría fallar.

Paso 5: Configurar Apache

En tu /etc/apache2/sites-available/, crea un nuevo archivo llamado forum.example.com.conf y agrega el siguiente contenido de Vhost:

<VirtualHost *:80>
  ServerName forum.example.com
  ServerAlias www.forum.example.com

  <IfModule proxy_module>
    ProxyPreserveHost on
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
  </IfModule>
</VirtualHost>
  • Habilita el Vhost con el siguiente comando:
a2ensite forum.example.com
  • Habilita el módulo proxy:
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_balancer
a2enmod lbmethod_byrequests
  • Reinicia Apache:
systemctl restart apache2

Después de esto, podrás acceder a Discourse directamente mediante tu nombre de dominio.


Nota 1: Al instalar Discourse, es posible que app.yml se sobrescriba y las líneas 16/17 (SSL) se descomenten. Tendrás que volver a comentar esas líneas y luego reconstruir la aplicación (no olvides cambiar de directorio): ./launcher rebuild app

Nota 2: SSL no está habilitado para Discourse con esta guía. Como era de esperar, parece que no existe documentación para habilitar SSL de Let’s Encrypt si ya lo tienes habilitado para Apache. Si alguien encuentra una solución para esto, por favor, comunícate.

4 Me gusta

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.