Despliegue de un Foro Discourse en un VPS: Docker, Nginx, SSL y optimización
TL;DR
En esta guía detallada, desplegaremos Discourse, una potente plataforma para comunidades en línea, en su propio servidor VPS. Recorreremos todo el camino desde la elección de la configuración óptima del VPS hasta la configuración de Docker, la automatización de SSL a través de Let's Encrypt, y la garantía de copias de seguridad fiables y mantenimiento básico. Al final del tutorial, tendrá un foro Discourse completamente funcional, seguro y optimizado, listo para recibir a los primeros usuarios, funcionando con la pila tecnológica actual de 2026.
- Aprenderá a elegir el VPS adecuado para Discourse.
- Configurará paso a paso el sistema operativo y las utilidades básicas.
- Desplegará Discourse utilizando Docker, asegurando el aislamiento y una gestión sencilla.
- Automatizará la instalación y actualización de certificados SSL a través de Let's Encrypt.
- Configurará estrategias de copia de seguridad efectivas para proteger los datos de su comunidad.
- Recibirá recomendaciones para la optimización y la resolución de problemas comunes.
Qué configuramos y por qué
Desplegaremos Discourse, una plataforma avanzada para la creación de foros y comunidades en línea. A diferencia de los foros tradicionales, Discourse está diseñado teniendo en cuenta los estándares web modernos y la experiencia del usuario, ofreciendo numerosas funciones como desplazamiento infinito, notificaciones en tiempo real, un sistema de reputación, moderación basada en la confianza y un potente editor de texto. Es la solución ideal para crear una comunidad en torno a un producto, soporte al cliente, discusión interna de equipo o simplemente un foro temático para entusiastas.
Al final, obtendrá un foro completamente funcional, de alto rendimiento y seguro, que estará totalmente bajo su control. Esto significa libertad de las restricciones de plataformas de terceros, personalización completa, acceso directo a los datos y la capacidad de escalar a medida que su comunidad crece.
Alternativas: Cloud-Managed vs. Self-Hosted
Existen dos enfoques principales para usar Discourse:
- Cloud-Managed (Gestionado en la nube): Esto es cuando usted paga directamente al equipo de Discourse (o a otro proveedor) por el alojamiento y mantenimiento de su foro. Las ventajas incluyen no tener que preocuparse por los detalles técnicos, actualizaciones automáticas, copias de seguridad y soporte. Las desventajas son un costo más alto (especialmente a medida que la comunidad crece) y menos control sobre la infraestructura y los datos. Es una buena opción para aquellos que quieren lanzar un foro lo más rápido posible sin complicaciones técnicas.
- Self-Hosted (Alojamiento propio en un VPS): Este es nuestro camino. Usted alquila su propio servidor privado virtual (VPS) e instala Discourse en él. Las principales ventajas son un ahorro significativo de costos a largo plazo, control total sobre el servidor, la posibilidad de una personalización profunda, integración con otros de sus servicios y la propiedad total de los datos. Las desventajas son que requiere ciertos conocimientos técnicos para la instalación, configuración y mantenimiento. Sin embargo, gracias a esta guía, haremos este proceso lo más simple y comprensible posible.
La elección de self-hosted en un VPS es especialmente relevante si usted es un desarrollador, un fundador en solitario de SaaS, un jugador que quiere controlar su servidor o un entusiasta de las criptomonedas que valora la autonomía total. Le permite optimizar los costos, adaptar el entorno a necesidades específicas y garantizar la confidencialidad de los datos.
Qué configuración de VPS se necesita para esta tarea
Discourse, especialmente en una configuración con Docker, requiere suficientes recursos. Es importante no escatimar en ellos para asegurar un funcionamiento estable y rápido del foro, incluso con un pequeño aumento de actividad.
Requisitos mínimos (para una comunidad pequeña ~50-100 usuarios activos)
- CPU: 2 núcleos. Discourse utiliza intensivamente el procesador para renderizar páginas, procesar solicitudes y tareas en segundo plano.
- RAM: 2 GB. Este es el mínimo absoluto, se recomiendan 4 GB. Los contenedores Docker, PostgreSQL, Redis y la propia aplicación Discourse consumen una cantidad significativa de memoria RAM. Si la memoria es insuficiente, el sistema comenzará a usar activamente el swap, lo que ralentizará considerablemente el rendimiento.
- Disco: 25 GB SSD. Discourse almacena la base de datos, los archivos subidos por los usuarios (avatares, imágenes, adjuntos) y los registros. El SSD es críticamente importante para el rendimiento de la base de datos.
- Red: 100 Mbit/s. Para un funcionamiento estable del foro y la carga de contenido.
Plan de VPS recomendado para una comunidad mediana (100-500 usuarios activos)
Para un funcionamiento cómodo y la posibilidad de crecimiento de su comunidad en 2026, recomiendo la siguiente configuración:
- CPU: 4 núcleos
- RAM: 8 GB
- Disco: 50-100 GB NVMe SSD (NVMe es significativamente más rápido que un SSD normal)
- Red: 1 Gbit/s
Esta configuración garantizará un excelente rendimiento, permitirá que Discourse funcione sin ralentizaciones y le dará un margen de seguridad para el futuro. Puede encontrar un VPS con las características indicadas en muchos proveedores. Al elegir un proveedor, preste atención a la calidad de la red, la reputación y la disponibilidad de soporte técnico.
Cuándo se necesita un servidor dedicado, no un VPS
Un servidor dedicado (dedicated server) se vuelve necesario cuando su comunidad supera las capacidades de un VPS, incluso el más potente. Esto ocurre en los siguientes casos:
- Muy alta concurrencia: Miles de usuarios simultáneos, decenas de miles de visitantes únicos diarios.
- Cargas intensivas: Gran cantidad de archivos subidos, videos, personalización compleja o integraciones que cargan fuertemente la CPU/RAM.
- Requisitos de aislamiento: Si necesita un aislamiento físico completo de otros clientes del proveedor, máxima seguridad o hardware específico (por ejemplo, GPU para tareas de IA, lo cual es poco probable para Discourse).
- Necesidad de un enorme espacio en disco: Cientos de gigabytes o terabytes de datos.
Para la mayoría de los foros Discourse en etapas tempranas y medias, un VPS será más que suficiente. La transición a un servidor dedicado es un paso que generalmente se da al escalar, cuando el VPS ya no es suficiente.
Ubicación: en qué influye
La elección de la ubicación del servidor VPS influye en:
- Velocidad de acceso (latency): Cuanto más cerca esté el servidor de su audiencia principal, más rápido se cargará el foro para los usuarios. Una alta latencia puede afectar negativamente la experiencia del usuario, especialmente en la interacción activa con el foro.
- Legislación: Dependiendo del país donde se aloje el servidor, se aplican diferentes leyes sobre almacenamiento de datos, privacidad y derechos de autor. Esto es especialmente importante para los usuarios europeos (GDPR) o al trabajar con datos sensibles.
- Costo: Los precios de los VPS pueden variar según la ubicación debido a los diferentes costos de electricidad, alquiler de centros de datos e impuestos.
Elija una ubicación que esté geográficamente más cerca de la mayoría de sus usuarios para garantizar el mejor rendimiento.
Preparación del servidor
Asumimos que tiene un VPS recién instalado con el sistema operativo Ubuntu Server 24.04 LTS. Esta es una versión actual y estable que será compatible hasta 2029.
1. Conexión SSH y actualización del sistema
Conéctese a su servidor como usuario root o como el usuario proporcionado por el proveedor con permisos sudo.
ssh root@ВАШ_IP_АДРЕС_VPS
Actualice la lista de paquetes y los paquetes instalados a las versiones más recientes.
sudo apt update && sudo apt upgrade -y
2. Creación de un nuevo usuario con permisos sudo
Trabajar como root no es seguro. Crearemos un nuevo usuario y le daremos permisos sudo.
# Reemplace 'su_usuario' con el nombre de usuario deseado
sudo adduser su_usuario
Durante la ejecución del comando, el sistema le pedirá una contraseña e información del usuario. Luego, añada el nuevo usuario al grupo sudo.
sudo usermod -aG sudo su_usuario
Ahora puede salir de la sesión de root e iniciar sesión con el nuevo usuario.
exit
ssh su_usuario@ВАШ_IP_АДРЕС_VPS
3. Configuración de claves SSH (recomendado)
Para mayor seguridad y comodidad, utilice claves SSH en lugar de contraseñas. Si aún no tiene un par de claves, genérelas en su máquina local:
# En su máquina local
ssh-keygen -t rsa -b 4096 -C "[email protected]"
Copie la clave pública al servidor:
# En su máquina local
ssh-copy-id su_usuario@ВАШ_IP_АДРЕС_VPS
Después de esto, podrá conectarse sin introducir una contraseña. Se recomienda deshabilitar la autenticación por contraseña en /etc/ssh/sshd_config, configurando PasswordAuthentication no y reiniciando el servicio SSH, pero solo después de asegurarse de que el inicio de sesión con clave funciona.
4. Configuración del firewall (UFW)
Configuraremos un firewall básico para permitir solo los puertos necesarios: SSH (22), HTTP (80) y HTTPS (443).
sudo ufw allow OpenSSH # Permitir conexiones SSH
sudo ufw allow http # Permitir HTTP (puerto 80)
sudo ufw allow https # Permitir HTTPS (puerto 443)
sudo ufw enable # Habilitar el firewall
sudo ufw status # Comprobar el estado del firewall
Confirme la activación del firewall introduciendo y.
5. Instalación de Fail2Ban
Fail2Ban ayuda a protegerse contra ataques de fuerza bruta bloqueando las direcciones IP que intentan iniciar sesión repetidamente con credenciales incorrectas.
sudo apt install -y fail2ban # Instalación de Fail2Ban
sudo systemctl enable fail2ban # Habilitar el inicio automático
sudo systemctl start fail2ban # Iniciar el servicio
Cree un archivo de configuración local para proteger SSH:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Abra /etc/fail2ban/jail.local y asegúrese de que la sección [sshd] esté activa (enabled = true).
Instalación de software — paso a paso
Discourse utiliza Docker para aislar todos sus componentes (PostgreSQL, Redis, Nginx y la propia aplicación). Esto simplifica significativamente la instalación, actualización y gestión.
1. Instalación de Docker y Docker Compose
Primero, instalaremos las dependencias necesarias para Docker.
sudo apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
Añadiremos la clave GPG oficial de Docker.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Añadiremos el repositorio de Docker a la lista de fuentes de APT.
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Actualizaremos la lista de paquetes e instalaremos Docker Engine, Docker CLI y Containerd. Las versiones actuales para 2026 probablemente estarán alrededor de Docker Engine 26.x - 27.x.
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
Añadiremos su usuario al grupo docker para no tener que usar sudo para cada comando de Docker. Después de esto, deberá cerrar y volver a iniciar sesión en la sesión SSH.
sudo usermod -aG docker ваш_пользователь
Verificaremos la instalación de Docker después de reiniciar la sesión.
docker run hello-world # Ejecutar un contenedor de prueba
Instalaremos Docker Compose (normalmente viene como un plugin de Docker CLI en las nuevas versiones).
sudo apt install -y docker-compose-plugin # Instalación del plugin Docker Compose CLI (relevante para Docker 20.10+ y Ubuntu 24.04)
Verificaremos la versión de Docker Compose.
docker compose version # Verificación de la versión de Docker Compose
2. Instalación de Git
Git es necesario para clonar el repositorio oficial de Discourse Docker.
sudo apt install -y git # Instalación de Git
3. Clonación del repositorio de Discourse Docker
Nos moveremos al directorio /var/discourse, donde se almacenarán todos los archivos de configuración de Discourse. Esta es la ubicación estándar y recomendada.
sudo mkdir /var/discourse # Creación del directorio para Discourse
sudo git clone https://github.com/discourse/discourse_docker.git /var/discourse # Clonación del repositorio
sudo chown -R ваш_пользователь:ваш_пользователь /var/discourse # Cambio de propietario del directorio
cd /var/discourse # Navegar al directorio de Discourse
4. Ejecución del script de instalación de Discourse
Discourse viene con un práctico script interactivo discourse-setup que le guiará a través del proceso de configuración inicial, incluyendo la generación del archivo app.yml y la configuración de SSL a través de Let's Encrypt.
./discourse-setup # Ejecutar el script de instalación interactivo
El script le hará varias preguntas:
-
Hostname for your Discourse? (Nombre de host para su Discourse): Introduzca el nombre de dominio que ha vinculado a la dirección IP de su VPS (por ejemplo,
forum.example.com). Asegúrese de que el registro DNS (registro A) para este dominio ya apunta a la IP de su VPS. - Email address for admin account? (Dirección de correo electrónico para la cuenta de administrador): Introduzca su correo electrónico. Esta será la primera cuenta de administrador en el foro.
-
SMTP server address? (Dirección del servidor SMTP): Por ejemplo,
smtp.sendgrid.net,smtp.mailgun.orgo el suyo propio. Discourse utiliza activamente el correo electrónico para registros, notificaciones y restablecimiento de contraseñas. Esto es críticamente importante. - SMTP username? (Nombre de usuario SMTP): Nombre de usuario para su servidor SMTP.
-
SMTP port? (Puerto SMTP): Normalmente
587para TLS o465para SSL. - SMTP password? (Contraseña SMTP): Contraseña para su servidor SMTP.
- Optional email address for Let's Encrypt? (Dirección de correo electrónico opcional para Let's Encrypt): Introduzca el mismo correo electrónico que para el administrador. Esto es necesario para las notificaciones de certificados.
Después de introducir todos los datos, el script generará el archivo containers/app.yml y comenzará a construir y ejecutar los contenedores Docker. Este proceso puede tardar entre 5 y 15 minutos, dependiendo del rendimiento de su VPS.
# Ejemplo de salida del script:
# ...
# Building Discourse image
# ...
# Starting Discourse app
# ...
# Discourse is now running at forum.example.com
Si todo ha ido bien, verá un mensaje indicando que Discourse está en funcionamiento. Si surgen errores, revise los registros y la configuración, especialmente DNS y SMTP.