Gracias por la retroalimentación, realmente aprecio el tiempo dedicado. No quiero ser ese sabihondo, pero:
[2/5] Preparando configuración
✓ Los puertos 80 y 443 están libres para su uso
En realidad, al principio dice “libres para su uso”. Dicho esto, ahora tengo mi instancia en funcionamiento, con la ayuda de Gemini (principalmente sobre el uso de Docker, por todas esas cosas, lol). Me gustaría ofrecer mi “manual de procedimientos” para cualquier otro usuario de Virtualmin, porque: “liberar el puerto 443” no es la solución aquí. El resto de mi publicación será eso; si debería publicarlo en otro lugar, como un nuevo hilo, por favor díganme a dónde ir; creo que no soy el único con esta configuración y podría ser útil para otros. ¡Gracias de nuevo!
Si estás en un VPS gestionado por Webmin/Virtualmin y usando un subdominio:
El manual definitivo de Virtualmin + Discourse *
-
(1) Limpieza de restos (si estás reintentando, como yo):
rm -rf /var/discourse/shared/standalone/ssl/*rm -rf /var/discourse/shared/standalone/letsencryptrm -rf /var/discourse/shared/standalone/state -
(2) Eliminación de plantillas:
Debes eliminar completamente las líneas
templates/web.ssl.template.ymlytemplates/web.letsencrypt.ssl.template.ymldeapp.yml. El analizador personalizado del lanzador las evaluará incluso si están precedidas por#. -
(3) Configuración de correo y variables:
Cambia
DISCOURSE_SKIP_EMAIL_SETUPde'1'a'0', porque tu Discourse no podrá conectarse y verificar DiscordID;Agrega
DISCOURSE_FORCE_HTTPS: truepara que el backend genere URLs seguras.Recordatorio amigable: Asegúrate de que
DISCOURSE_SMTP_USER_NAMEesté configurado con el nombre de tu cuenta de buzón tal cual (por ejemplo,'logophilia'), no la dirección de correo completa (por ejemplo,'logophilia@logophilia.eu'), y envuelve las credenciales entre comillas simples (') para evitar posibles errores de análisis de caracteres YAML. -
(4) Configuración del bloque expose:
Asegúrate de que tu bloque
expose:en app.yml contenga una asignación HTTP; asignar443=>8443es opcional/redundante, ya que Virtualmin finaliza la lógica SSL antes de pasarla:expose: - 8080:80Ahora puedes comenzar a reconstruir:
cd /var/discourse ./launcher rebuild app -
(5) Configuración de subdominio y ruta de proxy:
- Crea tu subdominio en Virtualmin como de costumbre y asegúralo con un certificado SSL de Let’s Encrypt (se hace automáticamente, solo digo: asegúrate de que no falle por alguna razón no relacionada).
- Navega a Rutas de proxy (Virtualmin → tu subdominio → Configuración web → Rutas de proxy), crea una nueva asignación
/ahttp://localhost:8080/, deja “servir localmente” desmarcado, pero activa Proxy WebSocket a Sí para permitir actualizaciones en tiempo real y flujos de notificaciones.
-
(6) Directivas de encabezado CSRF:
- En Webmin ➔ Servidores ➔ Servidor web Apache ➔ [encuentra tu configuración de subdominio aquí y haz clic en la configuración para 443] ➔ Editar directivas, coloca las siguientes líneas justo encima del bloque de proxy propio de Virtualmin para Let’s Encrypt (usualmente “ProxyPass /.well-known !”) para facilitar el reenvío del token CSRF:
ProxyPreserveHost On RequestHeader set X-Forwarded-Proto "https" RequestHeader set X-Forwarded-For %{REMOTE_ADDR}sProxyPreserveHost On: Le dice a Discourse tu nombre de dominio real en lugar de “localhost”.
RequestHeader set X-Forwarded-Proto "https": Le indica explícitamente a Discourse que el usuario está usando una conexión segura, coincidiendo con tu configuraciónDISCOURSE_FORCE_HTTPS: true.
RequestHeader set X-Forwarded-For: Pasa la dirección IP real del visitante al contenedor para que funcionen los registros de seguridad. -
(7) Handshake limpio del contenedor:
Mientras termina el proceso de reconstrucción (lo siento… pero es cierto;-), asegúrate de borrar cualquier plano de contenedor potencialmente atascado con
docker rm -f apppara que ejecutar./launcher start appinicie una instancia completamente nueva vinculada al puerto8080. Verifica quedocker psmuestre algo bajo “puertos” similar a:# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d21772a21e36 local_discourse/app "/sbin/boot" 45 minutos atrás Up 45 minutos 0.0.0.0:8080->80/tcp, [::]:8080->80/tcp, 0.0.0.0:8443->443/tcp, [::]:8443->443/tcp app(Como puedes ver, dejé la directiva 443=>8443 en mi app.yml, funciona de cualquier manera.)
-
(8) Monitoreo e inicio:
Sigue el flujo de arranque con
docker logs -f apphasta que terminen las migraciones de la base de datos y los workers comiencen a procesar solicitudes. Básicamente, un montón de líneas “INFO” en rápida sucesión. -
(9) Finalización:
Carga tu subdominio en un navegador, haz clic en Registrarse y deja que el sistema envíe un correo de validación a tu buzón.
*) hasta que se demuestre lo contrario ![]()