Autonomía digital y tecnológica

Código e ideas para una internet distribuida

Cómo instalar Discourse en Debian Jessie usando Docker

Imago voragine.net
[actualizado el ]

Discourse es un software de foros de segunda generación. Discourse se diferencia de los foros de primera generación en que:

  • Incorpora rigurosamente la idea de archivo: los hilos se pueden clasificar y archivar; el sistema de búsqueda es excelente y los hilos se indexan correctamente en buscadores.
  • Refuerzan la idea de comunidad en torno al foro mediante un sistema de badges. Los badge reflejan la implicación de un usuario pero también sus capacidades: cuanta más implicación, más cosas puede hacer un usuario y más ayudará a mantener la comunidad.
  • Mejora sensiblemente la experiencia de usuario: guarda el punto de lectura de cada hilo, permite edición de texto markdown/WYSIWYG simultáneamente, incrusta contenido automáticamente a partir de URL usando oEmbed y OpenGraph, editor de texto que permanece en pantalla mientras navegamos por los hilos del foro.
  • Consume recursos de hardware de manera voraz.
  • No es sólo un foro. Incorpora lista de correo, mensajes privados entre usuarios, sistema de edición wiki para determinados contenidos, integración con el sistema de comentarios de uno o varios blogs.

Discourse es un sistema potente pero pesado: es un carro de artillería. Merece la pena leer un poco antes de instalarlo para saber si le conviene a uno.

Requisitos del entorno de instalación

Discourse consume bastante recursos de hardware: necesita al menos 1GB de RAM.

Necesita tener acceso a un servicio de envío de correo. Si la maquina que se vaya a usar no tiene un servidor de correo instalado una solución rápida y fácil es usar sSMTP para enviar el correo a un mail relay que lo enviará a su destinatario final.

La instalación manual de Discourse no es trivial. Lo más sencillo es instalarlo usando Docker. Previamente hay que instalar Docker.

En algunos casos hace falta hacer una modificación en la configuración de Docker para asegurar su conexión a internet y la descarga del contenedor Discourse. Para ello se puede añadir la siguiente línea al archivo /etc/defaults/docker:

DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"

Y luego reiniciar Docker:

# ejecutamos como root
service docker restart

También es necesario tener instalado git en el sistema.

Proceso de instalación de Discourse

Descarga de Discourse

Para instalar Discourse usando un contenedor Docker, hay que descargar el contenedor y preparar el lugar donde lo alojaremos:

# ejecutamos como root
mkdir /var/discourse
git clone https://github.com/discourse/discourse_docker.git /var/discourse

Configuración de Discourse

Posteriormente, hay que definir los parámetros de nuestra instalación:

# ejecutamos como root
cp /var/discourse/samples/standalone.yml /var/discourse/containers/app.yml

Y editamos el archivo de configuración app.yml. Cada opción de configuración del archivo está bien comentada. Hay que configurar el dominio y el correo del administrador:

DISCOURSE_HOSTNAME: 'example.net' # dominio
DISCOURSE_DEVELOPER_EMAILS: 'mail@example.net' # mail del administrador

Hay que configurar el envío de correo. Suponiendo que el sistema funcione con sSMTP, hay que incluir los datos del mail relay. Por ejemplo, se puede usar GMail:

# datos del servidor mail relay
DISCOURSE_SMTP_ADDRESS: smtp.gmail.com
DISCOURSE_SMTP_PORT: 587 # (opcional)
DISCOURSE_SMTP_USER_NAME: usuario@gmail.com # (opcional)
DISCOURSE_SMTP_PASSWORD: gmailContraseña # (opcional, CUIDADO: el caracter '#' en una contraseña puede causar problemas)
DISCOURSE_SMTP_ENABLE_START_TLS: true # (optional, default true)

Por último, para un sistema Debian Jessie con 1GB de RAM optimizamos la instalación para que no tumbe el servidor. Indicamos que no utilice más del 25% de RAM y no haya más de dos conexiones simultáneas:

db_shared_buffers: "128MB"
UNICORN_WORKERS: 2

Iniciar Discourse

# ejecutamos como root desde /var/discourse
./launcher bootstrap app

Este comando compila el contenedor de Discourse con las opciones que hemos configurado y si todo va bien iniciará el contenedor.

Para acceder a Discourse basta visitar la URL que se haya definido con la variable DISCOURSE_HOSTNAME en app.yml.

Reconfigurando Discourse

Si se cambia cualquier opción en el archivo app.yml hay que recompilar el contenedor para que tenga efecto la nueva configuración:

# ejecutamos como root desde /var/discourse
./launcher rebuild app

El comando launcher permite las siguientes acciones:

Commands:
    start:      Start/initialize a container
    stop:       Stop a running container
    restart:    Restart a container
    destroy:    Stop and remove a container
    enter:      Enter a container using docker exec
    logs:       Docker logs for container
    bootstrap:  Bootstrap a container for the config based on a template
    rebuild:    Rebuild a container (destroy old, bootstrap, start new)
    cleanup:    Remove all containers that have stopped for > 24 hours

Options:
    --skip-prereqs   Don't check prerequisites
    --docker-args    Extra arguments to pass when running docker

Instalar Discourse en un servidor Apache con otros sitios web

En este escenario hay que configurar Discourse como virtual host de Apache, y configurar ese virtual host para que escuche al contenedor Docker de Discourse en un puerto diferente al 80 mediante un proxy. Así se evita el conflicto de que Apache y Docker intenten usar el mismo puerto.

Edición 3 de diciembre de 2017. Discourse dispone de un script de instalación que permite configurar los parámetros de instalación, discourse-setup. Lo único que hace este script es copiar sample/standalone.yml a containers/app.yml y guardar los parámetros de configuración seleccionados mediante el instalador. En el caso de tener que configurar Discourse compartiendo el sistema con otro servidor web, conviene copiarlo y editarlo manualmente.

Configuración adicional de Discourse

En el archivo app.yml cambiamos el puerto, por ejemplo al 85.

## which TCP/IP ports should this container expose?
expose:
  - "85:80"  # redirige puerto 85 del host al 80 (http) del contenedor Docker

Creación del virtual host para Discourse y configuración de Apache

Creamos un virtual host con las siguientes características:

<VirtualHost *:80>
ServerName example.net
ServerAlias www.example.net

ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://example.net:85/
ProxyPassReverse / http://example.net:85/

DocumentRoot /var/discourse
</VirtualHost>

Hay que habilitar los módulos proxy y proxy_http y reiniciar Apache:

# ejecutamos como root
a2enmod proxy proxy_http
service apache2 restart

Dejar un comentario

No hay comentarios en esta entrada.
*
*

 

No hay trackbacks