Ejecutando Discourse docker junto a Apache

Hola.

Estoy intentando configurar Discourse con Docker en mi servidor existente. No tengo ejecutándose ningún otro contenedor de Docker.

Mi servidor ejecuta Apache (sitios web de WordPress) y algunos otros servicios web.

No logro entender cómo enrutar mi subdominio ‘forum.rebelscience.club’ hacia mi contenedor de Docker.

Cuando se me pregunta esto:

Hostname for your Discourse? [discourse.example.com]: forum.rebelscience.club

Esto es lo que veo:

Checking your domain name . . .
WARNING: Port 443 of computer does not appear to be accessible using hostname:  forum.rebelscience.club.
WARNING: Connection to http://forum.rebelscience.club (port 80) also fails.

This suggests that forum.rebelscience.club resolves to some IP address that does not reach this 
machine where you are installing discourse.

The first thing to do is confirm that forum.rebelscience.club resolves to the IP address of this server.
You usually do this at the same place you purchased the domain.

If you are sure that the IP address resolves correctly, it could be a firewall issue.
A web search for "open ports YOUR CLOUD SERVICE" might help.

This tool is designed only for the most standard installations. If you cannot resolve
the issue above, you will need to edit containers/app.yml yourself and then type

./launcher rebuild app

No estoy seguro de cómo configurar esto. Los puertos 80/443 están disponibles, pero están apuntando a mi dominio principal, no a mi subdominio.

Cualquier consejo será muy apreciado.

Hola @rebelCoder

Este tema se ha discutido ampliamente aquí en meta; puedes buscar en meta “apache reverse proxy” y encontrar varios temas exhaustivos y muy detallados.

En resumen, necesitas configurar el host virtual de tu servidor Apache para que funcione como un proxy inverso hacia Discourse.

Las configuraciones exactas de Apache2 para esta configuración han sido publicadas varias veces en meta.

Esperamos que esto te ayude.

3 Me gusta

Lo siento, debería haber mencionado que he consultado y probado varias soluciones de este foro y de Digital Ocean también. Pero aún no logro que funcione. Nunca había configurado Docker antes.

Déjame compartir mis configuraciones actuales:

/etc/hosts:
127.0.0.1       forum.rebelscience.club

El archivo de hosts y el registro DNS funcionan, ya que tenía phpBB ejecutándose allí hoy. Ahora estoy intentando apuntarlo a un contenedor Docker con Discourse.

En containers/app.yml

He actualizado los puertos:

expose:
  - "8081:80"   # http
  - "8443:443" # https

En /etc/apache2/sites-enabled/discourse.conf

<VirtualHost *:80>
  ServerName forum.rebelscience.club
  ServerAlias www.forum.rebelscience.club

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

¿Qué más estoy olvidando? Ejecutar ./discourse-setup sigue fallando con el mensaje del mensaje original.

Creo que deberías tener un virtualhost para el puerto 443; dicho esto, el error en el puerto 80 es extraño. Quizás te falte algo (¿un CNAME?) en tu DNS.

Es extraño. Parece un poco demasiado tedioso configurarlo.

Solo tengo un registro A para forum.rebelscience.club.

He actualizado mis archivos .conf con un certificado también:

cat /etc/apache2/sites-enabled/discourse.conf

<VirtualHost *:80>
  ServerName forum.rebelscience.club
  ServerAlias www.forum.rebelscience.club

  <IfModule proxy_module>
    ProxyPreserveHost on
    ProxyPass / http://localhost:8081/
    ProxyPassReverse / http://localhost:8081/
  </IfModule>
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.forum.rebelscience.club [OR]
RewriteCond %{SERVER_NAME} =forum.rebelscience.club
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

cat /etc/apache2/sites-enabled/discourse-le-ssl.conf

<IfModule mod_ssl.c>
<VirtualHost *:443>
  ServerName forum.rebelscience.club
  ServerAlias www.forum.rebelscience.club

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

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

Ahora veo 503 Servicio no disponible.

Estoy completamente perdido, ¿qué más necesito hacer? setup.sh sigue fallando con el mensaje original.

En el caso (configuración de ejemplo) anterior, solo debes exponer el puerto 8081 en Docker (y no los puertos 80 ni 443).

Los puertos 80 y 443 son expuestos por el proxy inverso fuera del contenedor, y ese tráfico se redirige al puerto 8081 (en tu ejemplo anterior), el puerto que has expuesto dentro (mapeado al 80 dentro).

Esto solo funcionará si has mapeado el puerto 80 dentro del contenedor al puerto 8081 (expuesto al host).

expose:
  - "8081:80"   # http

Espero que esto ayude.

PD: @rebelCoder, tu configuración de apache2 en el lado de SSL carece de mucha información de configuración que necesitas.

Consulta este post:

1 me gusta

Esto ya no es un problema y se puede cerrar.

No puedes usar discourse-setup. Tendrás que editar el archivo app.yml manualmente, como se describe en los temas sobre la ejecución con Apache.