Installazione di Discourse con Apache2 installato

Ciao!
Sto eseguendo un server Ubuntu 18.04 con Apache installato. Vorrei installare Discourse su una porta diversa e utilizzare un reverse proxy tramite Apache per renderlo accessibile tramite un URL. Ho provato a creare un file app.yml, modificato le impostazioni al suo interno e poi eseguito: ./launcher rebuild app. Tutto sembra procedere bene fino alla fine, dove ricevo un errore ‘Failed’ con questo messaggio:

FAILED

Pups::ExecError: cd /var/www/discourse && su discourse -c ‘bundle exec rake themes:update assets:precompile’ fallito con return #<Process::Status: pid 3801 exit 134>
Posizione dell’errore: /pups/lib/pups/exec_command.rb:112:in `spawn’
exec fallito con i parametri {“cd”=>“$home”, “hook”=>“assets_precompile”, “cmd”=>[“su discourse -c ‘bundle exec rake themes:update assets:precompile’”]}
2beda643ff51279f145c96cdede83a1d6b65f67e00225be74100c8fb9fe3f790
** FALLITO L’AVVIO ** si prega di scorrere verso l’alto e cercare messaggi di errore precedenti; potrebbero essercene più di uno.
./discourse-doctor potrebbe aiutare a diagnosticare il problema.

Ho provato a usare discourse-doctor, ma non mi ha fornito alcuna informazione utile. Qualcuno ha un modo per risolvere questo problema? Inoltre, sto utilizzando Apache perché lo trovo più facile da usare e ho più esperienza con Apache. Quindi, passare a Nginx non è un’opzione.
Ecco alcuni log dalla parte precedente alla sezione fallita:

Gli aggiornamenti del database IP di MaxMind richiedono una licenza
Si prega di impostare DISCOURSE_MAXMIND_LICENSE_KEY su una chiave generata su https://www.maxmind.com
Gli aggiornamenti del database IP di MaxMind richiedono una licenza
Si prega di impostare DISCOURSE_MAXMIND_LICENSE_KEY su una chiave generata su https://www.maxmind.com
98765.375844045 Compressione: vendor-9297d3b5d396b76cde3e1a19c960cf10c5edf8be99b1f5aeff21012e3ae57a34.js
terser ‘/var/www/discourse/public/assets/_vendor-9297d3b5d396b76cde3e1a19c960cf10c5edf8be99b1f5aeff21012e3ae57a34.js’ -m -c -o ‘/var/www/discourse/public/assets/vendor-9297d3b5d396b76cde3e1a19c960cf10c5edf8be99b1f5aeff21012e3ae57a34.js’ --source-map “base=‘/var/www/discourse/public/assets’,root=‘/assets’,url=‘/assets/vendor-9297d3b5d396b76cde3e1a19c960cf10c5edf8be99b1f5aeff21012e3ae57a34.js.map’”
<— Ultime GC —>

[3798:0x4872980] 2679 ms: Scavenge 108.1 (126.5) → 97.8 (129.8) MB, 9.0 / 0.0 ms (average mu = 1.000, current mu = 1.000) fallimento di allocazione
[3798:0x4872980] 2823 ms: Scavenge 111.4 (129.8) → 101.3 (132.8) MB, 8.4 / 0.0 ms (average mu = 1.000, current mu = 1.000) fallimento di allocazione
[3798:0x4872980] 2964 ms: Scavenge 114.8 (133.0) → 104.8 (135.3) MB, 32.7 / 0.0 ms (average mu = 1.000, current mu = 1.000) fallimento di allocazione

<— Stack trace JS —>

ERRORE FATALE: NewSpace::Rebalance Allocazione fallita - memoria heap JavaScript esaurita
1: 0xa89e60 node::Abort() [node]
2: 0x9ade29 node::FatalError(char const*, char const*) [node]
3: 0xc7583e v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [node]
4: 0xc75bb7 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [node]
5: 0xe3f6d5 [node]
6: 0xe7ec67 [node]
7: 0xe90b11 v8::internal::MarkCompactCollector::CollectGarbage() [node]
8: 0xe4c9d8 v8::internal::Heap::MarkCompact() [node]
9: 0xe4e368 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [node]
10: 0xe5190c v8::internal::Heap::AllocateRawWithRetryOrFailSlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [node]
11: 0xe157da v8::internal::factory::NewFillerObject(int, bool, v8::internal::AllocationType, v8::internal::AllocationOrigin) [node]
12: 0x116d5e8 v8::internal::Runtime_AllocateInOldGeneration(int, unsigned long*, v8::internal::Isolate*) [node]
13: 0x15045f9 [node]
Interrotto (core dumped)
rake abort!
Errno::ENOENT: Nessun file o directory @ rb_file_s_size - /var/www/discourse/public/assets/vendor-9297d3b5d396b76cde3e1a19c960cf10c5edf8be99b1f5aeff21012e3ae57a34.js
/var/www/discourse/lib/tasks/assets.rake:293:in size' /var/www/discourse/lib/tasks/assets.rake:293:in block (4 levels) in ’
/var/www/discourse/lib/tasks/assets.rake:182:in block in concurrent?' /var/www/discourse/lib/tasks/assets.rake:284:in block (3 levels) in ’
/var/www/discourse/lib/tasks/assets.rake:273:in each' /var/www/discourse/lib/tasks/assets.rake:273:in block (2 levels) in ’
/var/www/discourse/lib/tasks/assets.rake:182:in concurrent?' /var/www/discourse/lib/tasks/assets.rake:270:in block in ’
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/exe/rake:27:in <top (required)>' /usr/local/bin/bundle:23:in load’
/usr/local/bin/bundle:23:in `’
Tasks: TOP => assets:precompile
(Vedi traccia completa eseguendo il task con --trace)
I, [2021-07-21T16:25:26.467914 #1] INFO – : Download di MaxMindDB in corso…
Compressione di Javascript e generazione delle mappe sorgente

I, [2021-07-21T16:25:26.469702 #1] INFO – : Terminazione dei processi asincroni
I, [2021-07-21T16:25:26.469947 #1] INFO – : Invio di INT a HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 56
I, [2021-07-21T16:25:26.470157 #1] INFO – : Invio di TERM a exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 174
2021-07-21 16:25:26.470 UTC [56] LOG: ricevuta richiesta di arresto rapido
174:signal-handler (1626884726) SIGTERM ricevuto, pianificazione dell’arresto…
2021-07-21 16:25:26.473 UTC [56] LOG: interruzione di eventuali transazioni attive
174:M 21 Jul 2021 16:25:26.473 # Arresto richiesto dall’utente…
174:M 21 Jul 2021 16:25:26.474 * Salvataggio dell’ultimo snapshot RDB prima dell’uscita.
2021-07-21 16:25:26.479 UTC [56] LOG: worker di background “logical replication launcher” (PID 65) terminato con codice di uscita 1
174:M 21 Jul 2021 16:25:26.480 * DB salvato su disco
2021-07-21 16:25:26.480 UTC [60] LOG: arresto in corso
174:M 21 Jul 2021 16:25:26.480 # Redis è pronto per uscire, arrivederci…
2021-07-21 16:25:26.515 UTC [56] LOG: il sistema di database è spento

Grazie,
Kian

Puoi

? Abbiamo davvero bisogno delle righe di registro precedenti per poter fornire un aiuto significativo.

Li ho appena allegati, scusa :slight_smile:

Il tuo server non ha abbastanza RAM per installare Discourse.

Qual è la tua capacità di memoria e swap?

Ha 8 GB di memoria e 10 GB di swap. A giudicare dall’aspetto, il mio sistema non sta utilizzando lo swap.

L’applicazione attuale sta utilizzando tutta la memoria disponibile e la swappiness è configurata per non verificarsi mai?

Poiché non vedo altri rapporti, penso che il problema sia sul tuo server.

Ciao!
Ho 8 GB di RAM e 10 GB di swap. Sto eseguendo ./launcher rebuild app e la RAM è stabile a 3,4 GB, senza uso di swap. Sto usando htop e la voce swap mostra solo OK/10,00G. Non sono sicuro se questo significhi che lo swap stia funzionando o meno.

Su HTOP, lo swap indica OK/10,00 G. Non sono sicuro di cosa significhi. E la RAM è ferma a circa 3,4 G mentre eseguo ./launcher rebuild app.

Penso che abbia funzionato. Ho chiuso Clamd con sigterm usando htop. Alla fine c’è un ID Docker. Quindi immagino che abbia funzionato.

Modifica: Sembra che stia funzionando bene. L’ho caricato tramite IP e porta e viene visualizzato correttamente! Devo solo configurare il reverse proxy ed è tutto fatto. Grazie per l’aiuto @Falco & @pfaffman :slight_smile:

Inoltre,
vorrei disabilitare SSL su Discourse in modo che non richieda una porta specifica. Posso disabilitarlo su Discourse e abilitarlo su un reverse proxy, dove ho il certificato sul mio server, ecc.?

Sì, devi solo rimuovere le prime righe del file app.yml. Quella con ssl e quella con letsencrypt.

Come procederei per farlo con un reverse proxy Apache che utilizza SSL? E posso rimuovere anche la riga 443:443 in app.yml?

Sì. Normalmente, per configurare un reverse proxy, è necessario che il servizio sia in esecuzione su un socket Unix. Puoi aggiungere la riga

  - "templates/web.socketed.template.yml" 

all’elenco dei template nel file app.yml. Il socket verrà creato in /var/discourse/shared/standalone/nginx.http.sock

Come sarebbe il mio file .conf per il reverse proxy? O non ne sei troppo sicuro?

Sebbene esistano alcuni esempi forniti da membri della community, come Configure Apache proxy with Let's Encrypt, ciò esula dall’ambito del supporto che forniamo ufficialmente qui. Tieni inoltre presente l’avvertimento di Sam:

Ho già usato Apache come proxy, quindi conosco lo stress :smiley:

Ciao!
Mi chiedevo solo se questo sia corretto per le email? Poiché non ne ricevo nessuna.

Rendered layouts/email_template.html.erb (Durata: 0,4ms | Allocazioni: 30)
Email consegnata 2d4e2472-28bc-4eba-a9d6-4ca666feb9d1@forum.domain.com (6,7ms)
Eccezione del job: fine file raggiunta

Il server di posta è mail.domain.com e non forum.domain.com, oppure dovrebbe essere quello?

Se non ricevi l’email di prova in /admin/email, qualcosa non va :wink:. Puoi modificare le impostazioni SMTP in app.yml e correggere eventuali errori.