He intentado instalar una instancia privada de Discourse, siguiendo las instrucciones oficiales en discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub. A pesar de que los scripts parecen extremadamente complejos, tuve que modificar manualmente los archivos container.yml y discourse-setup para establecer mi propia configuración…
1er problema: a pesar de su complejidad, ¡el script de instalación no permite modificar el puerto expuesto! Los puertos 80/443 no se pueden usar en mi servidor, ya que están siendo utilizados por nginx. Así que tuve que modificar nuevamente el script de configuración para establecer los puertos 3080/3443 como los puertos requeridos para acceder a Discourse.
Luego logré que todos los contenedores funcionaran. Al observar la pila con Portainer, descubrí que la aplicación se inicia y se detiene silenciosamente, y los registros no brindan mucha información sobre la razón. Dado que redis y postgres no publican ningún puerto, ¿podría fallar la aplicación de Discourse porque no puede conectarse a estos componentes? ¿Qué me perdí o hice mal?
Hola Richard, ¡gracias por la rápida respuesta! No soy un profesional de TI, solo me gusta jugar con las herramientas: ¿cuál sería la solución para este problema?
Parece que se ha desviado de la instalación estándar al configurar contenedores separados para Redis y Postgres, por lo que me temo que no tengo una respuesta inmediata para usted. ¿Cómo configuró los ajustes de Redis dentro de Discourse?
Otra cosa: veo redis:4-alpine. Me temo que deberá pasar a una versión más reciente de Redis, ya que Discourse requiere la versión 6.20 o superior. Sin embargo, no creo que esta sea la causa de su problema.
El script de configuración solo funciona para una configuración estándar. Si estás haciendo algo más complejo, tendrás que editar el yml manualmente. Eso es mucho más simple que modificar el script.
Si no vas a usar el postgres y redis proporcionados, entonces tendrás que averiguar por tu cuenta por qué el tuyo no funciona. Hay demasiadas cosas que podrían ser que no podemos adivinar o inferir. Recomendaría una instalación estándar en una máquina virtual separada para ver cómo funcionan las cosas antes de intentar una configuración muy compleja.
¡No realicé ninguna instalación ‘no estándar’! Como se describe en la documentación, descargué todo desde Github, solo cambié los puertos expuestos y ejecuté el script:
No cambié nada en la configuración de redis, ni en la de postgres.
No cambié nada para la versión de redis.
Estas piezas de software han sido instaladas por el script genuino discourse-setup.
@pfaffman ¿a qué te refieres con “editar el yml a mano”? ¿De qué yml hablas? Hay muchos archivos .yml en “containers”…
Por cierto, actualmente tengo un proxy inverso en la máquina, que parece tener una configuración simple: múltiples archivos subdomain.conf que definen la redirección subdomain:80 → puerto XXX. ¿Es eso lo que se requiere?
Recomendaría una instalación estándar en una VM separada para ver cómo funcionan las cosas antes de intentar una configuración muy compleja.
No quiero una configuración compleja , solo necesito ejecutar Discourse junto con otros contenedores, que es para lo que está diseñado Docker…
En general, discourse-setup no instala instancias separadas de postgres y redis y ciertamente no las versiones 12 y 4.
¿Podrías publicar tu configuración y los cambios que hiciste en container.yml y los scripts? Asegúrate de redactar cualquier configuración confidencial.
Además, por favor, indícanos en qué commit del repositorio discourse_docker te encuentras.
Editaste tanto discourse-setup como un archivo que se sobrescribirá cuando actualices discourse-docker. Cambiar cualquier cosa que no sea tu app.yml es decididamente no estándar.
¿Por qué? Y sea lo que sea que necesitabas cambiar allí, esa no es la forma de hacerlo. Necesitarás poner esos cambios en tu app.yml.
Discourse no funcionará en un puerto no estándar, por lo que esta no es una instalación estándar.
La instalación estándar incluye postgres y redis en el contenedor único. Como se señaló, estás utilizando versiones no compatibles de redis y postgres. También puedes hacer una instalación de dos contenedores como se describe aquí Mover de un contenedor independiente a contenedores web y de datos separados (y puedes usar ./discourse-setup --two-container para que discourse-setup cree contenedores de datos y web separados, aunque es un poco más complicado de mantener (tienes que saber cuándo actualizar el contenedor de datos).
OK, entonces necesito:\n- borrar todo el software que se instaló con los scripts modificados (espero que esto sea fácilmente reversible).\n- descargar el script de nuevo. Usé git clone https://github.com/discourse/discourse_docker.git /var/discourse para la instalación actual: ¿está bien?\n- cambiar posiblemente algunas configuraciones solo en el archivo app.yml, antes de ejecutar ./discourse-setup.\n- ejecutar el script de instalación para la instalación estándar (prefiero un solo contenedor).\n- configurar el proxy nginx para dirigir discourse.example.com:80/443 al contenedor adecuado. ¿La documentación da pistas para esta parte?\n\n¡Por favor, completa la lista si me salté algún paso!\n\n¡Gracias de nuevo por tu ayuda!
app.yml es creado por discourse-setup. No puedes ejecutar discourse-setup si no puede acceder a los puertos, pero si lees el código fuente verás que puedes ejecutar ./discourse-setup --skip-connection-test y ejecutarlo de todos modos.
Tu nginx será responsable de Let’s Encrypt, así que querrás comentar la plantilla de Let’s Encrypt. Sospecho que eso se describe en el tema del proxy inverso enlazado arriba y abajo.
No puedes usar ./discourse-setup para configurar Discourse si otro servidor está usando el puerto 80 o 443. Necesitarás copiar y editar samples/standalone.yml con tu editor de texto favorito.
y entiendo que necesito modificar app.ymlantes de ejecutar discourse-setup, como ya se dijo en el preámbulo
No puedes usar ./discourse-setup para configurar Discourse si otro servidor está usando el puerto 80 o 443. Necesitarás copiar y editar samples/standalone.yml con tu editor de texto favorito.
¿Puedes entonces confirmar el siguiente proceso?
descargar todo desde Github
ejecutar discourse-setup una vez con la opción --skip-connection-test → esto creará el archivo containers/app.yml
modificar app.yml como se describe en la documentación anterior
actualizar el software con /var/discourse/launcher rebuild app
crear el sitio nginx para que apunte al socket de Discourse y reiniciar nginx
finalmente, lanzar un navegador para acceder a Discourse en https://discourse.mydomain.com, que simplemente apunta a la IP del servidor.
ejecutar discourse-setup una vez con la opción --skip-connection-test: todo fue bien hasta el final, donde el script devolvió
docker: Error response from daemon: driver failed programming external connectivity on endpoint app (784361985c928eb26b149d829f37882056562d9b1e77ef4ce71fbfe30c5d80b1): Error starting userland proxy: listen tcp4 0.0.0.0:443: bind: address already in use.
Esto me parece normal, ya que el contenedor intenta acceder a los mismos puertos que el servidor web existente. Sin embargo, como no se ha creado ningún contenedor de discourse (según lo devuelto por docker container ls), me gustaría que lo confirmaras antes de continuar con la configuración de nginw…
¿Te refieres a “antes de ejecutar discourse-setup”? En ese caso, ¿qué archivo debería modificar, ya que app.yml no existe antes de ejecutar el script? Quiero instalar una aplicación de 1 contenedor: ¿debería ejecutar de nuevo el mismo script discourse-setup o el comando /var/discourse/launcher rebuild app?
Lamento molestarte, necesito estar 100% seguro ya que definitivamente no soy un experto :
Vuelvo a ejecutar una vez más./discourse-setup --skip-connection-test --skip-rebuild (la ejecución anterior fue sin la opción --skip-rebuild). No necesito eliminar lo que se ha instalado en la ejecución anterior.
Luego edito el archivo app.yml existente y comento los puertos (ya están comentados)
Ya no necesitarás ejecutar discourse-setup nunca más (a menos que, quizás, cambies la cantidad de RAM que tienes y quieras que actualice la configuración de memoria a los valores predeterminados recomendados).
He configurado una entrada DNS para que discourse.mydomain.com apunte a la dirección IP del servidor = OK.
Al abrir un navegador en discourse.mydomain.com me lleva a… la instancia de Nextcloud que se ejecuta en el servidor. Parece que la configuración debería arreglarse, ya que el tráfico no se enruta correctamente al contenedor de discourse…
No quiero instalar NPM ya que leí que no es una herramienta robusta y la configuración para discourse implica codificar IP de forma rígida: ¿debería hacerlo de todos modos?