Deploy Discourse senza Docker

Alcuni dettagli sulle mie soluzioni:

  1. Configurazione Nginx:
    Dietro un reverse proxy (haproxy), è necessario copiare /var/discourse/config/nginx-config-sample.conf in /etc/nginx/sites-enabled/discourse.conf o un percorso simile, quindi sostituire listen <yourreverseproxyport> (se necessario) e il _ di server_name con il tuo hostname (subdmain.example.com). Nient’altro deve essere modificato.
  2. Pagine non visualizzate (messaggio “Oops”) e registrazione admin via email non funzionante:
    Magick è stata la causa del mancato caricamento delle pagine dopo le pagine di registrazione admin al primo avvio. Ho seguito il file indicato nel log: /var/www/discourse/lib/letter_avatar.rb:112 alla riga 112, c’erano due comandi magick che effettivamente non rispondevano. convert rispondeva, quindi ho sostituito magick a questa riga con convert. Dopo queste correzioni, è stato registrato un altro errore. Provando la stessa procedura con il comando dato dal file, il comando magick non ha funzionato e convert stava fallendo. NB: magick --version era 7.x e convert --version dava 6.x. La causa è stata che ho installato prima imagemagick con apt, poi magick 7 da sorgente. C’erano alcuni conflitti e magick ha detto al comando convert di essere obsoleto. Quindi ho riavviato il mio script solo con magick 7. Questo ha risolto immediatamente il problema e ho potuto vedere le nuovissime pagine attese da giorni, e anche l’email ha funzionato! Magick è davvero magico.
  3. Rimane il problema del contenuto misto, ma il sito web funziona comunque bene.
    NB: in puma.rb, la riga bind ENV.fetch("PUMA_BIND", "tcp://#{ENV['PUMA_BIND_ALL'] ? '' : '127.0.0.1:'}3000") deve essere così (correzione del primo post.)
  4. EDIT “3.”, riguardo al forzamento https per discourse: Non so esattamente perché, ma i miei browser non mostrano più avvisi di ‘contenuto misto’ (forse a causa dell’aggiornamento della cache), quindi ora va tutto bene. Devo solo finire il mio script.
3 Mi Piace

Funziona!!!
ImageMagick v7 risolve il problema Ooops!
Per quanto ho testato, funziona perfettamente.
Testerò il resto delle funzionalità e vi farò rapporto al più presto.

1 Mi Piace

Quello che ho fatto per testare è stato impostare la variabile d’ambiente PUMA_BIND quando eseguivo puma.

Per quanto riguarda ImageMagick, per qualche motivo Discourse non riesce a eseguire una conversione di immagini nell’interfaccia web, quando carico un’immagine grande gentilmente rifiuta di convertirla… Sto ancora eseguendo il debug del problema.

Ci sono progressi nel debug? Da parte mia, sto lavorando su magick.
Su alcune immagini di circa 50ko, nel browser viene visualizzato un popup:
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 e nessuna immagine viene caricata
Se la dimensione è maggiore, nessun popup ma la rotella di caricamento gira all’infinito senza alcun risultato. Nessun errore viene registrato in /var/www/discourse/log.

Stesso problema anche per me :joy::sob:

L’unico modo in cui sono riuscito a farlo funzionare è stato usando imagemagick dal repository di brew.

MA fallisce quando l’immagine è più di 3MB… forse ho impostato una configurazione di policy molto restrittiva.

Provalo!!!

Sto testando l’installazione di docker ma penso o che sia molto stupido distribuire nginx, unicorn, redis, postgresql e il resto in UN SOLO container… non ha alcun senso. E non c’è documentazione sull’infrastruttura per grandi distribuzioni… Lavoro nell’IT da più di 20 anni e vedo solo problemi arrivare nel prossimo futuro usando tale infrastruttura.

Senza parlare di “docker The Space Eater” (come Dormammu) :rofl::rofl:

Questo problema è scomparso con la seguente soluzione descritta alla fine:

Debug 1: bundle db:create output, anche nei log al primo avvio:


unknown OID 21096: failed to recognize type of ‘embeddings’. It will be treated as String.
pngquant worker: pngquant not found; please provide proper binary or disable this worker (–no-pngquant argument or :pngquant => false through options)
oxipng worker: oxipng not found; please provide proper binary or disable this worker (–no-oxipng argument or :oxipng => false through options)
jhead worker: jhead not found, jpegtran not found; please provide proper binary or disable this worker (–no-jhead argument or :jhead => false through options)
jpegoptim worker: jpegoptim not found; please provide proper binary or disable this worker (–no-jpegoptim argument or :jpegoptim => false through options)

Debug 2: Alcuni comandi magick con output di file:

no decode delegate for this image format

Quest’ultimo problema è menzionato qui.

La soluzione è qui (installa magick con plugin per i formati):

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

Dopo questo, la mia dimensione di caricamento può essere fino a 518KB. Sopra no. Questo è solo per le immagini. Tutti gli altri documenti, audio, video caricati funzionano.

Soluzione temporanea per il problema rimanente:
Ho controllato nelle impostazioni di amministrazione, discourse.conf, nginx/sites-enables/discourse.conf, nella cartella git. Infine in AdminPanel/Parameters/Files ho disabilitato “Composer media optimization image enabled”, poi tutto funziona correttamente. Posso caricare qualsiasi immagine.

Sì, IMEI è quasi la stessa soluzione di usare brew ma sono sicuro che non occuperà circa 2 GB di spazio :rofl::rofl::sob::sob::sob::face_with_symbols_on_mouth::face_with_symbols_on_mouth::face_with_symbols_on_mouth:

Controllerò la tua soluzione per la dimensione massima dei file negli upload.

Sto anche lottando per trovare una soluzione per inviare email “gratis” (sono in una fase iniziale e non voglio stipulare contratti con mailtrap/mailgun/ecc…)

Perché non installi un server di posta? Ne ho uno mio e ho scritto lo script per l’installazione. Fammi sapere se sei interessato.

Certamente! Inviami un DM con le istruzioni o il repository git! :grinning_face_with_smiling_eyes:

Ho smesso di usare server di posta self-hosted molti anni fa…

Quando si esegue rake assets:precompile, viene visualizzato No such file or directory - brotli, basta installarlo con un package manager.

2 Mi Piace

Ho scoperto che genera questo errore:

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 '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 '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 'load'
        from /home/mry/.rbenv/versions/3.4.6/bin/bundle:25:in '<main>'

poi Puma si riavvia da solo. Cosa devo fare per evitarlo?

Modificato: Questo sembra essere un problema di Puma da Ruby 3.4.0. Risolto disabilitando YJIT.

Quindi usa 3.3.7. Questa è la versione che uso.

Sono troppo pigro per scaricare nuovamente le gemme, disabiliterò semplicemente YJIT continuando a usare 3.4.6.