Desplegar Discourse sin Docker

Algunos detalles sobre mis soluciones:

  1. Configuración de Nginx:
    Detrás de un proxy inverso (haproxy), necesitas copiar /var/discourse/config/nginx-config-sample.conf a /etc/nginx/sites-enabled/discourse.conf o un destino similar, luego reemplazar listen <tu_puerto_del_proxy_inverso> (si es necesario) y el _ de server_name por tu nombre de host (subdominio.ejemplo.com). No se debe cambiar nada más.
  2. Páginas no mostradas (mensaje “Oops”) y registro de administrador por correo electrónico no funcionando:
    Magick fue la causa de que las páginas no se mostraran después de las páginas de registro de administrador al arrancar por primera vez. Seguí el archivo indicado en el registro: /var/www/discourse/lib/letter_avatar.rb:112. En la línea 112, había dos comandos magick que efectivamente no respondían. convert respondía, así que reemplacé magick en esta línea por convert. Después de estas correcciones, se registró otro error. Intentando el mismo procedimiento con el comando dado del archivo, el comando magick no funcionó y convert fallaba. Nota: magick --version era 7.x y convert --version daba 6.x. La causa fue que primero instalé imagemagick con apt, y luego magick 7 desde el código fuente. Hubo algunos conflictos y magick indicó que el comando convert estaba desactualizado. Así que volví a ejecutar mi script solo con magick 7. Esto resolvió inmediatamente el problema y pude ver las nuevas páginas esperadas durante días, ¡y el correo electrónico también funcionó! Magick es realmente mágico.
  3. Todavía queda el problema del contenido mixto, pero el sitio web funciona bien.
    Nota: en puma.rb, la línea bind ENV.fetch("PUMA_BIND", "tcp://#{ENV['PUMA_BIND_ALL'] ? '' : '127.0.0.1:'}3000") debe ser así (corrección de la primera publicación).
  4. EDITAR “3.”, sobre la fuerza de https para discourse: No sé por qué exactamente, pero mis navegadores ya no muestran advertencias de ‘contenido mixto’ (quizás debido a la actualización de la caché), así que todo está bien ahora. Solo necesito terminar mi script.
3 Me gusta

¡Funciona confirmado!
¡ImageMagick v7 soluciona el problema Ooops!
Hasta donde he probado, funciona perfectamente.
Probaré el resto de las funciones y os informaré lo antes posible.

1 me gusta

Lo que hice para probar fue establecer la variable de entorno PUMA_BIND al ejecutar puma.

Con respecto a ImageMagick, por alguna razón Discourse no está logrando ejecutar una conversión de imagen en la interfaz web, cuando subo una imagen grande amablemente se niega a convertirla… Todavía estoy depurando el problema.

¿Algún avance en la depuración? Por mi parte, estoy trabajando en magick.
En algunas imágenes de alrededor de 50 ko, en el navegador aparece una ventana emergente:
timeout -k 40.0 20 magick gif:/tmp/RackMultipart20250927-23598-xrrp6e.gif -auto-orient -background white -interlace none -flatten -debug all -quality 90 jpg:/tmp/image20250927-23598-9ujq3d.jpg y no se carga ninguna imagen.
Si el tamaño es mayor, no hay ventana emergente, pero la rueda de carga gira en un bucle infinito sin resultado. No se registran errores en /var/www/discourse/log.

Mismo problema para mí :joy::sob:

La única forma en que pude hacerlo funcionar fue usando imagemagick del repositorio de brew.

PERO falla cuando la imagen es de más de 3 MB… tal vez configuré una política muy restrictiva.

¡¡¡Pruébalo!!!

Estoy probando la instalación de docker, pero creo que es bastante estúpido desplegar nginx, unicorn, redis, postgresql y el resto en UN solo contenedor… no tiene ningún sentido. Y no hay documentación de infraestructura para grandes implementaciones… He trabajado en TI durante más de 20 años y solo veo problemas en el futuro cercano usando tal infraestructura.

Sin hablar de “docker El Devorador de Espacio” (como Dormammu) :rofl::rofl:

Este problema ha desaparecido con la siguiente solución descrita al final:

Depuración 1: bundle db:create muestra, también en los registros al primer arranque:


OID desconocido 21096: no se puede reconocer el tipo de ‘embeddings’. Se tratará como String.
pngquant worker: no se encuentra pngquant; proporcione un binario adecuado o deshabilite este worker (argumento --no-pngquant o :pngquant => false a través de las opciones)
oxipng worker: no se encuentra oxipng; proporcione un binario adecuado o deshabilite este worker (argumento --no-oxipng o :oxipng => false a través de las opciones)
jhead worker: no se encuentra jhead, no se encuentra jpegtran; proporcione un binario adecuado o deshabilite este worker (argumento --no-jhead o :jhead => false a través de las opciones)
jpegoptim worker: no se encuentra jpegoptim; proporcione un binario adecuado o deshabilite este worker (argumento --no-jpegoptim o :jpegoptim => false a través de las opciones)

Depuración 2: Algunos comandos magick con archivos muestran:

no hay delegado de decodificación para este formato de imagen

Este último problema se menciona aquí.

La solución está aquí (instala magick con plugins de formatos):

t=$(mktemp) && \
wget 'https://dist.1-2.dev/imei.sh' -qO "$t" && \
bash "$t" && \
rm "$t"

Después de esto, mi tamaño de carga puede ser de hasta 518 KB. Antes no. Esto es solo para imágenes. Todas las demás cargas de documentos, audio y video funcionan.

Solución temporal para el problema restante:
He buscado en la configuración de administrador, discourse.conf, nginx/sites-enables/discourse.conf, en la carpeta git. Finalmente, en AdminPanel/Parameters/Files, deshabilité “Composer media optimization image enabled”, entonces todo funciona bien. Puedo cargar cualquier imagen.

Sí, IMEI es casi la misma solución que usar brew, ¡pero estoy seguro de que no ocupará alrededor de 2 GB de disco! :rofl::rofl::sob::face_with_symbols_on_mouth::face_with_symbols_on_mouth::face_with_symbols_on_mouth:

Revisaré tu solución para el tamaño máximo de archivo en las cargas.

También estoy luchando con una solución para enviar correos electrónicos “gratis” (estoy en una etapa temprana y no quiero contratar mailtrap/mailgun/etc…)

¿Por qué no instalas un servidor de correo? Yo tengo el mío y escribí un script para la instalación. Dime si te interesa.

¡Claro! ¡Envíame las instrucciones o el repositorio de Git por mensaje directo! :grinning_face_with_smiling_eyes:

Dejé de usar servidores de correo autoalojados hace muchos años…

Al ejecutar rake assets:precompile, apareció el mensaje No such file or directory - brotli, simplemente instálalo con un gestor de paquetes.

2 Me gusta

Encontré que está arrojando este error:

bundler: failed to load command: puma (/home/mry/.rbenv/versions/3.4.6/bin/puma)
/home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/puma-7.0.4/lib/puma/cluster.rb:472:in `Puma::Cluster#run': undefined method `wait_readable' for nil (NoMethodError)

            if read.wait_readable([0, @next_check - Time.now].max)
                   ^^^^^^^^^^^^^^
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/puma-7.0.4/lib/puma/launcher.rb:202:in `Puma::Launcher#run'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/puma-7.0.4/lib/puma/cli.rb:73:in `Puma::CLI#run'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/puma-7.0.4/bin/puma:10:in `<top (required)>'
        from /home/mry/.rbenv/versions/3.4.6/bin/puma:25:in `Kernel#load'
        from /home/mry/.rbenv/versions/3.4.6/bin/puma:25:in `<top (required)>'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in `Kernel.load'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in `Bundler::CLI::Exec#kernel_load'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:23:in `Bundler::CLI::Exec#run'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/cli.rb:452:in `Bundler::CLI#exec'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `Bundler::Thor::Command#run'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `Bundler::Thor::Invocation#invoke_command'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor.rb:538:in `Bundler::Thor.dispatch'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/cli.rb:35:in `Bundler::CLI.dispatch'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `Bundler::Thor::Base::ClassMethods#start'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/cli.rb:29:in `Bundler::CLI.start'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/exe/bundle:28:in `block in <top (required)>'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/friendly_errors.rb:117:in `Bundler.with_friendly_errors'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/exe/bundle:20:in `<top (required)>'
        from /home/mry/.rbenv/versions/3.4.6/bin/bundle:25:in `Kernel#load'
        from /home/mry/.rbenv/versions/3.4.6/bin/bundle:25:in `<main>'

luego Puma se reinicia solo. ¿Qué debo hacer para evitar esto?

Editado: Esto parece ser un problema de Puma desde Ruby 3.4.0. Se solucionó deshabilitando YJIT.

Entonces usa 3.3.7. Esta es la versión que uso.

Soy demasiado perezoso para volver a descargar gemas, solo deshabilitaré YJIT y seguiré usando 3.4.6.