Ciao,
Ho installato Discourse su un server Fedora 31 seguendo la guida di installazione consigliata, ma ho utilizzato podman invece di Docker per eseguire il container. All’inizio, questa mattina, tutto è andato perfettamente, ma ho avuto problemi a far funzionare HTTP semplice sul mio Nginx sull’host e ho dovuto utilizzare i certificati SSL su entrambe le istanze di Nginx. Ho configurato Discourse e tutto è stato ok.
Più tardi ho deciso di ricostruire Discourse disattivando SSL e costruendolo con un account utente non root. HTTP semplice sull’host ha funzionato correttamente, ma ho ottenuto una pagina bianca (il titolo era corretto e l’icona favicon funzionava).
root@xena-app:/var/www/discourse# ls public/assets -al
total 15640
drwxr-xr-x. 2 discourse discourse 10 Jan 11 13:54 .
drwxr-xr-x. 3 discourse discourse 29 Jan 11 13:57 ..
-rw-r--r--. 1 discourse discourse 595 Jan 11 13:49 _activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js
-rw-r--r--. 1 discourse discourse 250 Jan 11 13:54 activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js.br
-rw-r--r--. 1 discourse discourse 420 Jan 11 13:54 activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js.gz
-rw-r--r--. 1 discourse discourse 695 Jan 11 13:54 activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js.map
-rw-r--r--. 1 discourse discourse 990519 Jan 11 13:50 _admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js
-rw-r--r--. 1 discourse discourse 83903 Jan 11 13:54 admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.br
-rw-r--r--. 1 discourse discourse 106465 Jan 11 13:54 admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.gz
-rw-r--r--. 1 discourse discourse 366446 Jan 11 13:54 admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.map
drwxr-xr-x. 2 discourse discourse 4096 Jan 11 13:54 admin-login
...
I file richiesti sono effettivamente mancanti, come conferma anche Nginx:
2020/01/11 13:59:49 [error] 60#60: *20 open() "/var/www/discourse/public/assets/plugins/poll-57c9059384e3daeaee3d974c985d85a2b8462bb2629eb0b1834451056d1e1459.js" failed (2: No such file or directory), client: 10.0.2.2, server: _, request: "GET /assets/plugins/poll-57c9059384e3daeaee3d974c985d85a2b8462bb2629eb0b1834451056d1e1459.js HTTP/1.0", host: "idlerpg.xyz", referrer: "https://idlerpg.xyz/"
Pensavo che si trattasse di un problema della mia installazione, dato che stamattina erano presenti nell’installazione precedente eseguita come root sull’host! Ho cancellato la cartella condivisa e ricostruito come utente non root, ottenendo sempre gli stessi risultati. Poi ho riprovato, stavolta come root con impostazioni identiche a quelle di stamattina, ma ho riscontrato gli stessi problemi.
Un’installazione come utente non root mostra sempre la pagina “Congratulations, you have installed Discourse!”, ma dopo aver completato l’installazione ottengo una pagina vuota perché i file delle risorse sono mancanti.
Esiste un modo per risolvere il problema delle risorse mancanti?
Ho modificato questo come un bug. Non riesco a ottenere una versione con tutte le risorse durante la compilazione di tests-passed. Ho provato ad entrare nel contenitore ed eseguire rake assets:precompile, ma le stesse risorse risultano ancora assenti.
Ok, dopo alcuni test, posso confermare che mostra sempre una pagina vuota dopo ogni rebuild. Se eseguo RAILS_ENV=production bin/rake assets:precompile, funziona sempre dopo. Non ho idea del perché, dato che dovrebbe comunque compilarli durante un rebuild?
Siamo qui perché qualcosa non funziona. Dovrebbe e funziona sono stati diversi.
Stai affermando con sicurezza che Podman non è coinvolto. Sarebbe utile dimostrarlo per eliminarlo chiaramente come fattore. Per quanto ne so, non hai completato il metodo di installazione ufficiale con Docker per verificare se questo risolve il problema.
Interessante, quindi i file vengono creati correttamente, ma la persistenza fallisce?
Dovresti verificare come funziona il volume di Podman e quale driver lo supporta. Nel mondo Docker abbiamo avuto tantissimi problemi strani con i driver di archiviazione nel corso degli anni, tanto che abbiamo persino mantenuto un elenco di driver “approvati” nel nostro script di avvio.
Per essere chiari, i miei esperimenti con Podman stavano testando davvero launcher, non Discourse. Almeno al momento dei test, dipendeva dai dettagli dell’output di Docker che Podman non cerca di emulare.
@Adriany, immagino tu stia utilizzando il driver di archiviazione predefinito, che è lo stesso raccomandato per Discourse, ovvero “overlay2” in Docker — ma non so se sia effettivamente questo il tuo caso.
Sto utilizzando overlayfs, che è l’equivalente di overlay2.
È interessante notare che, dopo alcuni build con asset mancanti quando ho provato ad aggiungere plugin, è stato costruito correttamente senza alcun asset mancante. Quando ho ricostruito senza plugin, tutto è andato liscio come il burro. Strano?
Modifica: Ha funzionato per me e ora gli asset sono memorizzati nella cache qui. Durante l’esecuzione, ha smesso di funzionare per altri utenti.
Modifica 2: Un’altra ricostruzione ha fatto rompere gli asset come prima e la soluzione è stata ricostruire come prima.
Se i file vengono creati correttamente dal nostro asset pipeline e il sistema operativo non segnala errori, ma scompaiono dopo la ricompilazione (che di fatto riavvia il container), punterei di nuovo (o nuovamente) sul driver di storage di Podman.
A meno che qualcuno non riesca a riprodurre lo stesso comportamento usando Docker (e in tal caso ci sarebbero diversi argomenti da trattare), temo che dobbiate aprire un ticket sul progetto Podman per questo problema.
Ciao,
ho fatto ulteriori indagini e sembra che mi fossi sbagliato sulle mie ipotesi su dove siano archiviati i file, o semplicemente non sono stato bravo a trovarli.