--- title: "Cómo instalar el foro Discourse en Ubuntu 24.04 con Docker" description: "Instala Discourse en Ubuntu 24.04 con el instalador oficial basado en Docker, con HTTPS de Let's Encrypt, correo SMTP, plugins, copias y actualizaciones." category: "Hosting de Aplicaciones Web" language: es source: https://cubepath.com/es/docs/hosting-de-aplicaciones-web/instalacion-del-foro-discourse updated: 2026-09-25 --- # Cómo instalar el foro Discourse en Ubuntu 24.04 con Docker Discourse es una plataforma de foros de código abierto escrita en Ruby on Rails, con PostgreSQL y Redis por debajo. La única instalación que el proyecto soporta oficialmente es la basada en Docker: un contenedor llamado `app` que incluye la aplicación, la base de datos, el servidor web y el certificado TLS. En este tutorial instalarás Discourse en Ubuntu 24.04 con el asistente oficial, crearás la cuenta de administración y verás cómo añadir plugins, hacer copias de seguridad y actualizar. ## Requisitos previos Para seguir esta guía necesitas: - Un servidor con Ubuntu 24.04 LTS dedicado solo a Discourse, por ejemplo un VPS de CubePath. El mínimo oficial es 1 GB de RAM con swap, 1 vCPU y 10 GB de disco; para un foro real conviene partir de 2 GB de RAM, 2 vCPU y 20 GB. - Un usuario no root con privilegios `sudo`. - Un nombre de dominio o subdominio (en esta guía, `foro.example.com`) con un registro DNS **A** que apunte a la IP pública del servidor. Sustituye `foro.example.com` por tu dominio en todos los pasos. - Los puertos 80 y 443 libres: no instales Nginx ni Apache en el mismo servidor, porque el contenedor necesita esos puertos para servir el foro y obtener el certificado. - Opcional pero recomendable: credenciales SMTP de un proveedor de correo transaccional (servidor, puerto, usuario y contraseña) para enviar notificaciones, resúmenes y correos de registro. ## Paso 1: Preparar el servidor Actualiza el sistema e instala `git`, que se usa para descargar la configuración de Discourse: ```bash sudo apt update && sudo apt upgrade -y sudo apt install -y git ca-certificates curl ``` Si tienes UFW activado, permite SSH, HTTP y HTTPS antes de continuar: ```bash sudo ufw allow OpenSSH sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw status ``` ```output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80/tcp ALLOW Anywhere 443/tcp ALLOW Anywhere ``` Comprueba que el dominio ya resuelve a la IP del servidor. El asistente lo verifica y Let's Encrypt fallará si el registro A no está propagado: ```bash dig +short foro.example.com ``` ```output 203.0.113.10 ``` ## Paso 2: Instalar Docker Engine El asistente de Discourse se ejecuta dentro de un contenedor y se detiene si Docker no está instalado. Instala Docker Engine desde el repositorio oficial de Docker en lugar del paquete `docker.io` de Ubuntu. Añade la clave GPG del repositorio: ```bash sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc ``` Añade el repositorio: ```bash echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null ``` Instala Docker: ```bash sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin ``` Comprueba que el servicio está activo: ```bash sudo systemctl is-active docker sudo docker version --format '{{.Server.Version}}' ``` ```output active 28.4.0 ``` La versión exacta puede ser distinta; lo importante es que el servicio responda. ## Paso 3: Descargar discourse_docker Discourse se gestiona desde el repositorio `discourse_docker`, que contiene el script `launcher` y las plantillas del contenedor. La ubicación estándar es `/var/discourse`: ```bash sudo git clone https://github.com/discourse/discourse_docker.git /var/discourse cd /var/discourse sudo chmod 700 containers ``` El directorio `containers` guardará `app.yml`, que contiene contraseñas y credenciales SMTP, por eso se restringe al usuario root. ## Paso 4: Ejecutar el asistente de instalación Lanza el asistente oficial. Necesita root porque habla con Docker y escribe en `/var/discourse`: ```bash sudo ./discourse-setup ``` El asistente comprueba la memoria, el disco y que los puertos 80 y 443 estén libres, y después te pregunta: 1. **Correos de administración**: una o varias direcciones. Solo quien se registre con una de ellas obtendrá permisos de administrador. 2. **Dominio**: indica que usas tu propio dominio y escribe `foro.example.com`. El asistente comprueba que el DNS apunta al servidor. 3. **SMTP**: servidor, puerto (normalmente 587), usuario, contraseña y dirección de envío. Puedes omitirlo; en ese caso Discourse activa el inicio de sesión mediante Discourse ID (correo o cuentas sociales a través de id.discourse.com) y podrás configurar SMTP más adelante. Si el servidor tiene poca memoria, el asistente ofrece crear un archivo de swap de 2 GB. Acepta la oferta en servidores de 1 o 2 GB de RAM. Al confirmar, el asistente genera `/var/discourse/containers/app.yml` y construye el contenedor. Tarda entre 5 y 10 minutos. Cuando termina, comprueba que el contenedor `app` está en marcha: ```bash sudo docker ps --filter name=app --format '{{.Names}}\t{{.Status}}\t{{.Ports}}' ``` ```output app Up 2 minutes 0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp ``` Verifica también que el foro responde por HTTPS con un certificado válido: ```bash curl -sI https://foro.example.com | head -n 1 ``` ```output HTTP/2 200 ``` > Nota: el certificado de Let's Encrypt se solicita al arrancar el contenedor y se renueva automáticamente dentro de él. No necesitas instalar Certbot en el servidor. ## Paso 5: Crear la cuenta de administración Abre `https://foro.example.com` en el navegador y pulsa **Registrarse** (o **Iniciar sesión** si usas Discourse ID). Usa exactamente una de las direcciones que diste como correo de administración. - Con SMTP configurado, recibirás un correo de activación. Al confirmarlo entrarás como administrador. - Con Discourse ID, inicia sesión con esa dirección a través de id.discourse.com. Tras el primer inicio de sesión aparece el asistente de configuración del sitio, donde defines el nombre del foro, el idioma, si el foro es público o privado y el logotipo. Después puedes ajustar el resto desde **Admin** en `https://foro.example.com/admin`. Si el correo de activación no llega, puedes crear el administrador desde la consola del contenedor: ```bash cd /var/discourse sudo ./launcher enter app ``` Dentro del contenedor, ejecuta la tarea de creación de administradores y responde a las preguntas (correo, contraseña y confirmación): ```bash rake admin:create ``` Escribe `exit` para salir del contenedor. ## Paso 6: Cambiar la configuración del contenedor Cualquier cambio de dominio, SMTP o plugins se hace en `app.yml` y se aplica reconstruyendo el contenedor. Abre el archivo: ```bash sudo nano /var/discourse/containers/app.yml ``` Las variables de correo están en la sección `env`. Un ejemplo con SMTP en el puerto 587: ```yaml env: DISCOURSE_HOSTNAME: foro.example.com DISCOURSE_DEVELOPER_EMAILS: 'admin@example.com' DISCOURSE_SMTP_ADDRESS: smtp.your_provider.com DISCOURSE_SMTP_PORT: 587 DISCOURSE_SMTP_USER_NAME: your_smtp_user DISCOURSE_SMTP_PASSWORD: "your_smtp_password" DISCOURSE_NOTIFICATION_EMAIL: noreply@example.com LETSENCRYPT_ACCOUNT_EMAIL: admin@example.com ``` El ejemplo muestra solo las claves más habituales: no borres el resto de variables que generó el asistente. Guarda el archivo y reconstruye: ```bash cd /var/discourse sudo ./launcher rebuild app ``` La reconstrucción deja el foro fuera de servicio unos minutos. Para comprobar que el correo sale, ve a **Admin > Correo electrónico** y envía un correo de prueba a tu dirección. ## Paso 7: Instalar plugins Muchos plugins oficiales, como Solved, Reactions, Assign, Chat o Data Explorer, ya vienen incluidos en Discourse. Revisa **Admin > Plugins** antes de instalar nada: si el plugin aparece en la lista, basta con activarlo desde su configuración. Los plugins que no vienen incluidos se añaden en `app.yml`, en la sección `hooks`, clonando su repositorio. Abre el archivo: ```bash sudo nano /var/discourse/containers/app.yml ``` Añade una línea `git clone` por plugin bajo la línea de `docker_manager`, que ya está presente: ```yaml hooks: after_code: - exec: cd: $home/plugins cmd: - git clone https://github.com/discourse/docker_manager.git - git clone https://github.com/your_org/your_plugin.git ``` Sustituye la URL por la del repositorio del plugin que quieras instalar y reconstruye el contenedor: ```bash cd /var/discourse sudo ./launcher rebuild app ``` Cuando termine, el plugin aparecerá en **Admin > Plugins**. Si la reconstrucción falla por un plugin incompatible, elimina su línea y vuelve a reconstruir. ## Paso 8: Copias de seguridad Discourse genera copias de seguridad completas (base de datos y, opcionalmente, archivos subidos) desde **Admin > Copias de seguridad**. Ahí puedes lanzar una copia manual y ajustar la frecuencia automática y el número de copias conservadas con los ajustes `backup_frequency` y `maximum_backups`. Las copias se guardan en el host, en `/var/discourse/shared/standalone/backups/default/`: ```bash sudo ls -lh /var/discourse/shared/standalone/backups/default/ ``` ```output -rw-r--r-- 1 1000 www-data 48M Sep 25 03:30 foro-2026-09-25-033000-v20260915120000.tar.gz ``` Una copia que solo vive en el mismo servidor no protege frente a la pérdida del disco. La opción más sencilla es enviar las copias a un almacenamiento compatible con S3, que Discourse admite de forma nativa: elige S3 como ubicación de las copias en los ajustes de copias de seguridad e indica el bucket y las credenciales en los ajustes de S3 del panel. Si prefieres copiarlas por SSH, sincroniza ese directorio desde otra máquina con `rsync` usando una cuenta con permiso de lectura sobre él. ## Paso 9: Actualizar Discourse La forma recomendada es la interfaz web: abre `https://foro.example.com/admin/upgrade` y pulsa **Actualizar**. Cuando la actualización requiere una nueva imagen base, la página te pedirá hacerlo por línea de comandos: ```bash cd /var/discourse sudo git pull sudo ./launcher rebuild app ``` Mantén también el sistema operativo al día. Activa las actualizaciones de seguridad automáticas de Ubuntu: ```bash sudo apt install -y unattended-upgrades sudo dpkg-reconfigure -plow unattended-upgrades ``` ## Solución de problemas **Los puertos 80 o 443 están ocupados.** El asistente se detiene si otro servicio usa esos puertos. Averigua cuál es y desactívalo: ```bash sudo ss -tlnp | grep -E ':(80|443) ' sudo systemctl disable --now nginx ``` **Falla la verificación de DNS o el certificado.** Comprueba con `dig +short foro.example.com` que el registro A apunta a la IP del servidor y que no hay un proxy delante (por ejemplo, el modo proxy de Cloudflare) durante la instalación. **Errores durante la construcción.** Revisa los registros del contenedor y el log de Rails: ```bash cd /var/discourse sudo ./launcher logs app sudo tail -n 50 /var/discourse/shared/standalone/log/rails/production.log ``` **No llegan los correos.** Verifica las credenciales SMTP en `app.yml`, reconstruye y envía un correo de prueba desde **Admin > Correo electrónico**. Si el proveedor lo rechaza, revisa que el dominio remitente tenga SPF y DKIM configurados. ## Conclusión Tienes un foro Discourse funcionando en Ubuntu 24.04 dentro de un contenedor Docker, con HTTPS automático y la cuenta de administración creada. Todos los cambios de infraestructura pasan por `app.yml` y `./launcher rebuild app`, y el resto se configura desde el panel de administración. Como siguientes pasos, configura el almacenamiento de copias en S3, añade inicio de sesión con Google o GitHub desde **Admin > Inicio de sesión** y crea las categorías y niveles de confianza de tu comunidad.