Discourse es una potente plataforma de foros de discusión de código abierto, diseñada para fomentar el intercambio de ideas y el debate entre comunidades. Ofrece una experiencia moderna y dinámica, con notificaciones en tiempo real, integración con redes sociales y un sistema avanzado de gestión de usuarios. Además, su diseño adaptable permite que se ajuste a todo tipo de dispositivos, brindando una experiencia de usuario fluida tanto en móviles como en equipos de escritorio.
En este tutorial, te explicaremos cómo instalar Discourse usando Docker, acompañado de un proxy inverso configurado con Nginx para mejorar la gestión de tráfico y seguridad. Utilizaremos Debian 12 como sistema operativo base, pero si prefieres Ubuntu, los pasos deberían ser prácticamente idénticos. Al final de este proceso, tendrás una instalación robusta y bien optimizada de Discourse, lista para ser utilizada en producción.
Requisitos para la instalación
Para seguir con este tutorial es necesario tener lo siguiente:
- Un dominio o subdominio.
- El dominio o subdominio apuntanto a la IP del servidor.
- Una cuenta de correo para configurar como SMTP.
Tenemos que tener instalado Docker en el servidor, si no lo tienes instalado, te dejo este artículo que explica como hacerlo:

Luego es necesario tener todos los paquetes actualizados y asegurarnos de tener estos otros instalados en el servidor:
apt update
apt upgrade
apt wget curl zip gitInstalación de Discourse
Para instalar Discourse, nos tenemos que descargar el repositorio y lo debemos de hacer en un directorio especifico:
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse
chmod 700 containersCuando tenemos esto, ejecutamos este otro comando para iniciar la descarga de las imágenes y la configuración de los contenedores de Docker:
./discourse-setupCuando inicie la instalación, nos preguntarán varias cosas:
Hostname for your Discourse? [discourse.example.com]:
Email address for admin account(s)? [me@example.com,you@example.com]:
SMTP server address? [smtp.example.com]:
SMTP port? [587]:
SMTP user name? [user@example.com]:
SMTP password? [pa$$word]:
Let's Encrypt account email? (ENTER to skip) [me@example.com]:
Optional Maxmind License key () [xxxxxxxxxxxxxxxx]:El primer apartado es para escribir nuestro dominio o subdominio donde alojaremos discourse, los siguientes apartados es para configurar el correo. Los dos últimos, son importantes, ya que es para configurar el certificado SSL.
La instalación puede tardar entre 2 y 8 minutos en hacer todo el proceso. Una vez finalizada la instalación, se indicará un comando para iniciar todo:
./launcher start appEste proceso levantará todos los servicios necesarios para que Discourse funcione correctamente. Si accedemos al dominio, podremos configurar el admin, pero recomiendo esperar a tener Discourse configurado detrás del Proxy Inverso.
Configuración de Discourse
A continuación deberemos de parar todos los contenedores y reconfigurar la configuración de nuestra APP. Para ello:
./launcher stop appAhora editaremos el fichero /var/discourse/containers/app.yml donde se encuentra la configuración de Discourse.
Tenemos que tener estas dos líneas comentadas en el fichero:
#- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"Y añadir lo siguiente debajo:
- "templates/web.socketed.template.yml"Además, tendremos que comentar también estas líneas:
#expose:
# - "80:80" # http
# - "443:443" # httpsLuego más abajo añadimos también esto:
DISCOURSE_FORCE_HTTPS: trueEl resultado final tiene que ser como este:
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
## Uncomment the next line to enable the IPv6 listener
#- "templates/web.ipv6.template.yml"
- "templates/web.ratelimited.template.yml"
## Uncomment these two lines if you wish to add Lets Encrypt (https)
#- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"
- "templates/web.socketed.template.yml"
## which TCP/IP ports should this container expose?
## If you want Discourse to share a port with another webserver like Apache or nginx,
## see https://meta.discourse.org/t/17247 for details
#expose:
# - "80:80" # http
# - "443:443" # https
DISCOURSE_FORCE_HTTPS: trueFinalmente, tenemos que reconstruir la configuración de Discourse con:
./launcher rebuild appConfiguración de Nginx
Antes de iniciar de nuevo Discourse con la nueva configuración, tendremos que preparar la configuración de Nginx. Para ello es necesario tener instalado Nginx en el servidor.
apt install nginxLuego la configuración será algo similar a esta:
server {
listen 80; listen [::]:80;
server_name [dominio.es];
server_tokens off;
return 301 https://$host$request_uri;
}
# Default server configuration
#
server {
# SSL configuration
#
server_tokens off;
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name 8dec171d-0edf-4753-bbc4-d73fbf55b1b1.clouding.host;
ssl_certificate /etc/letsencrypt/live/[dominio.es]/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/[dominio.es]/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-EC>
ssl_prefer_server_ciphers on;
location / {
#proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
}[dominio.es] por tu dominio.Antes de aplicar esta configuración en Nginx, deberemos de crear el certificado SSL con Let's Encrypt, para ello generaremos el certificado únicamente:
certbot certonlyCuando se haya generado el certificado, podremos recargar la configuración de Nginx:
systemctl reload nginxY con ello levantamos los contenedores:
./launcher start appCon esto, deberíamos de poder acceder a Discourse e iniciar la creación del usuario admin para Discourse.
Creación manual del usuario admin
Por una mala configuración del correo, no me llegaba el correo para validar el e-mail de la cuenta de admin, así que encontré como hacerlo manualmente, os lo dejo aquí por si os sucede lo mismo.
Debéis de ejecutar el siguiente comando:
./launcher enter appCon este comando entraremos directamente dentro de la aplicación y nos aparecerá lo siguiente:
x86_64 arch detected. root@servidor:/var/www/discourseAquí tendremos que ejecutar el comando:
rake admin:createY seguir las instrucciones:
Email: usuario@email.com
User with this email already exists! Do you want to reset the password for this email? (Y/n) n Ensuring account is active! Account updated successfully! Do you want to grant Admin privileges to this account? (Y/n) y Your account now has Admin privileges! Más sobre ./voidNull
- 📖 Aprende todos sobre los comandos de GNU/Linux en nuestro Diccionario "De la A a la Z: Los comandos de GNU/Linux"
- 💪 ¡Forma parte de la Comunidad de ./voidNull!
- 🤖 Disfruta de todos nuestros Cursos sobre Ansible, Proxmox, Home Assistant entre otros.
- 📩 Mantente actualizado con lo último en GNU/Linux y Software Libre. Recibe nuestra Newsletter mensual.

Comentarios