Configuración de servidor de alta disponibilidad 3

¿Discourse admite múltiples máquinas (cada una con un único contenedor Docker) detrás de un balanceador de carga independiente?

Necesito una configuración de Discourse que maneje la falla de un servidor, por lo que mi respuesta estándar es configurar 3 servidores detrás de un balanceador de carga (con el balanceador manejando el certificado SSL).

He configurado servidores externos independientes de PostgreSQL y Redis para Discourse. (Todo esto está en Google Cloud Platform). Estoy utilizando el lanzador de Discourse para configurar el contenedor Docker solo para la web.

  1. ¿Discourse admite ejecutar múltiples contenedores cuando cada contenedor está en una máquina diferente?
  2. ¿Debería simplemente copiar el contenedor Docker creado desde la primera máquina a las otras máquinas?
  3. ¿Cómo se manejan los logotipos cargados?
  4. ¿Los logotipos cargados, los favicons, etc., se almacenan en la base de datos?

Muchas gracias por la ayuda.

5 Me gusta

Sí, así es como lo ejecutamos en nuestro servicio de alojamiento.

  1. Deberías configurar Usar almacenamiento de objetos para las cargas (S3 y clones)
  2. No, van al almacenamiento de objetos como se indica en el punto 3.
7 Me gusta

Gracias, Rafael. Muy agradecido.

He encontrado un problema con la terminación SSL en el balanceador de carga. Discourse especifica todos sus enlaces como HTTP.

¿Hay alguna forma de que Discourse sepa que sus enlaces deberían ser HTTPS?

Sí, baja a una consola de Rails y configúrala en https con:

cd /var/discourse
./launcher enter app
rails c
SiteSetting.force_https = true
2 Me gusta

Excelente. Gracias de nuevo.

Supongo que podría añadirlo al app.yml:
- exec: rails c "SiteSetting.force_https = true"

No tengo ni idea de Rails. En mi comando anterior, ¿debería ser ‘rails c’ o ‘rails r’?

2 Me gusta

Sí, tenemos un ejemplo de cómo cambiar la configuración del sitio en bootstrap en nuestro archivo de muestra:

3 Me gusta

Sí, de ahí es donde copié mi comando.

Una última pregunta. ¿Se supervisa el contenedor de Docker? Si el contenedor de Docker se detiene por alguna razón, ¿ha configurado launcher algo para reiniciarlo?

Sí, launcher le pide a Docker que reinicie automáticamente los contenedores.

2 Me gusta

De acuerdo. Ahora tengo un Discourse funcional en una sola máquina. Tengo otras dos máquinas. El volumen compartido del contenedor Docker está apuntando a un directorio NFS para permitir que todas las máquinas accedan a las subidas (especialmente logotipos, etc.).

He copiado las imágenes de Docker a las máquinas 2 y 3 (docker save -o app-image local_discourse/app y luego docker load -i app-image).

Tenía la impresión de que un simple ./launcher start app funcionaría, pero intenta verificar containers/app.yml.

¿Tendré problemas si permito que el app.yml sea verificado (y se realicen cambios) en la base de datos desde las máquinas 2 y 3?

¿Existe una mejor manera de tener tres máquinas ejecutando una sola configuración?

1 me gusta

Tienes dos opciones:

  • Usa – creo que es ./launcher start-command app – en la máquina completamente configurada (la “máquina de compilación”) para obtener una línea de comandos completa de Docker.
  • Copia el archivo app.yml y realiza lo que acabas de intentar (launcher start).
5 Me gusta

Configura la variable de entorno DISCOURSE_FORCE_HTTPS: true.

6 Me gusta