Yo no apostaría por ningún sistema hecho en php porque siempre vamos a tener el problema del uso de recursos desmedidos cuando vengan ataques ddos, php se hecha a memoria todo el framework del sistema cms por cada petición http, en cambio un lenguaje ejecutado en memoria como node, java o ruby consumen únicamente las funcionalidades necesarias y no tiene que cargar todo el core por cada petición, esto ahorra mucha memoria ram y hace que todo ande muchisimo mas rápido y no depende de la velocidad del uso de disco.
Es más bien un problema de arquitectura realmente, no es un problema especifico con PHP. Y realmente no se que tan escalable sea Discourse si esa es una consideración. Por ejemplo, ahora mismo estoy corriendo Discourse dentro de un contenedor e inspeccionando el contenedor te das cuenta que TODO está dentro del contenedor. Postgress, Rail, Nginx, Redis, etc. Así que por lo menos el contenedor que tengo no es escalable. Ahora no veo razón por la cual estos no puedan estar en sus contenedores correspondientes...
Al final, da lo mismo si remplazamos RoR con PHP o NodeJS (excepto quizás por websockets y aún así). Es más importante ver como diseñaron el foro antes que cualquier otra cosa.
He estado jugando un poco con Discourse para ver que tan fácil podemos adoptarlo, que es nuevo, que es diferente, etc. Hasta ahora en general, ha sido algo sencillo manejar el software. Su instalación fue un poco complicada casi estrictamente por el método de instalación que elegí. De entrada necesitas tener un dominio y un servidor de correo. Tengo mi dominio por supuesto pero el servidor de correo no es exactamente algo que se utilice para esto aunque no tuve problemas para configurarlo. Estoy utilizando WSL2 con docker para instalar discourse y su script de instalación comprueba que el servidor sea accesible por el dominio dado. Un autentico dolor de cabeza porque el script tiene un bug que he "tenido" que corregir. Sin embargo, la ip de mis contenedores de docker no es la misma que la ip de mi instancia WSL2 entonces obviamente la prueba no va a funcionar. Así que después de arreglar el susodicho error ahora resulta que tengo que optar fuera de este chequeo porque simplemente no iba a funcionar. Por suerte saltarse el chequeo es muy fácil. La herramienta de configuración procede, los contenedores se crean exitosamente pero ahora nginx empieza a fallar porque no tiene un certificado de SSL. El mismo contenedor puede crear el certificado por tí con Lets Encrypt pero para eso necesito hacer el portfowarding correcto del puerto 80 a mi equipo. Mi proveedor de internet se queja porque ellos usan ese puerto para su servicio de cable pero me deja. Nginx ahora arranca pero no puedo acceder al sitio por el puerto 80, la aplicación regresa 301s hacia https (puerto 443). Mi proveedor de internet ahora si que no me deja usar ese puerto por las mismas razones. Discourse no me deja cambiar el puerto de la aplicación (en mi opinión, una tontería pero es lo que hay). Encontré una forma de deshabilitar SSL en los foros de discourse (realmente la encontré yo porque lo que dicen ellos es "simplemente desactivala en este archivo" *surprised pikachu*). Y por problemas con mi proveedor de internet al final tuve que acabar poniendo una entrada en /etc/hosts... pero finalmente logre instalar discourse. Instalar discourse no ha sido sencillo, es cierto, pero yo también tengo la culpa por no usar un stack normal (una vm con algún proveedor).
Configurar discourse ha sido relativamente sencillo pero si me he topado con algunos problemas. Antes quiero mostrar algunas de las cosas que he visto que me han agradado bastante. Primero, los onebox por ejemplo el de twitter:
Lo único que hecho es copiar el link de twitter y listo me arma todo el html por mi.
Fiddles de Codepen, aquí uno que tenía de hace mucho tiempo:
Podemos hacerlo con cualquier link también, pero ciertamente no es lo mismo. Debe haber servicios con sandboxs para VMs o así (por ejemplo para correr node.js).
Después su sistema para crear posts... Digamos que quiero contestar citas en especifico, incluso a traves de varios temas...
Con lo difícil que es recrear citas para un solo mensaje y este hace mucho más. Y la ventana a la derecha también tiene una vista previa (lastima que no haya hecho el gif bien).
Tiene un sistema de likes que es precisamente como lo querían para el foro (sin poder dar dislike pero sin remover el like creo). No he probado extensivamente las funcionalidades de moderación pero tiene unas cosas interesantes. Por ejemplo, hay un registro visible de una acción de moderación. Es decir, si cierro un tema, dice ahí que fuí yo el que ha cerrado el tema.
Como dicen en mis tierras ya no hay más que a chuchita la bolsearon. La moderación es pública y cada quien puede saber quien cerro o borro algún tema. Es posible dejar un mensaje de porque se llevo acabo la acción de moderación. Por otro lado, también se pueden ocultar estas acciones a miembros que no son moderadores.
Las cosas que no me han gustado hasta ahora:
1) El índice no es muy bonito que digamos. Aquí unas cuantas tomas dependiendo de como se muestren las categorías:
Y bueno, yo intente darle una apariencia parecida al foro en cuanto a colores y así (no mucho realmente). Me imagino que tocará leer más acerca de como crear un tema en discourse porque realmente lo único que hice fue modificar una paleta de colores. Yo creo que debe ser posible tener un índice mucho más vistoso.
2) La traducción no es la mejor y hay muchas partes que no están traducidas. Por ejemplo, los menus de administración tienen todas las configuraciones en ingles (las descripciones por lo menos están en español). Alguna que otra palabra que está mal traducida (por ejemplo, "uploads" son "subidos"). No creo que sea mucho problema.
3) Cuando estaba configurando las categorías, llego un momento en el que no se como termine creando dos categorías del mismo nombre y una vino siendo una subcategoría de la otra. Tenía "Dudas Generales" dentro de "Dudas Generales". No me dejaba borrar ninguna de las dos categorías hasta que me di cuenta de mi error. Perdí como unos 10 minutos aquí y realmente no encontré ayuda en ninguna parte de lo que estaba pasando.
4) Cuando estaba configurando las categorias, configure una url con una ñ. No pude editar la categoría ni borrarla a la hora de tratar de acceder a su menu correspondiente. Decía que no existía. Tuve que meterme a la aplicación desde una terminal para poder reconfigurar la url para quitar la ñ. Batalle un poco en encontrar la razón y la explicación no es muy intuitiva fuera de que tienes que correr código en la terminal (tienes que usar ruby).
5) Estaba intentando configurar mi perfil para usar un link de imgur para mi perfil. Simplemente no he podido hacer eso. Como tengo entendido discourse te provee un avatar o tu tienes que subir al sistema tu propio avatar. No puedes enlazarlo con un sistema externo como imgur o similar.
6) Estaba queriendo revisar los logs de errores y me sale una pantalla donde efectivamente hay errores pero realmente no se si lo que se muestran son errores al tratar de acceder a los logs o si son realmente logs de errores. Como no sigue el mismo tema que las demas partes del sitio yo quiero creer que en efecto, tratar de acceder a los logs de errores provoca un error (pero no estoy muy seguro de eso).
Me gustaría poder compartir esta instancia con ustedes pero por desgracia mi proveedor de internet simplemente no me dejará mostrar nada por el puerto 443. Quizás alguien quiera compartir una VM con unos 2 o 4GB de RAM para probar. Creo que también podría probar con ngrok... en fin, si están muy interesados veré por ahí que puedo hacer. Por lo pronto si tienen alguna pregunta acerca de esta instancia de discourse me pueden preguntar por aquí.