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