Installation von Discourse mit installiertem Apache2

Hallo!
Ich betreibe einen Ubuntu 18.04-Server mit installiertem Apache. Ich möchte Discourse auf einem anderen Port installieren und dann über einen Reverse-Proxy via Apache über eine URL zugänglich machen. Ich habe versucht, eine app.yml zu erstellen, die Einstellungen darin zu ändern und dann ./launcher rebuild app auszuführen. Alles läuft gut, bis am Ende ein ‘Failed’-Fehler auftritt:

FAILED

Pups::ExecError: cd /var/www/discourse && su discourse -c ‘bundle exec rake themes:update assets:precompile’ fehlgeschlagen mit Rückgabewert #<Process::Status: pid 3801 exit 134>
Ort des Fehlers: /pups/lib/pups/exec_command.rb:112:in `spawn’
exec fehlgeschlagen mit den Parametern {“cd”=>“$home”, “hook”=>“assets_precompile”, “cmd”=>[“su discourse -c ‘bundle exec rake themes:update assets:precompile’”]}
2beda643ff51279f145c96cdede83a1d6b65f67e00225be74100c8fb9fe3f790
** BOOTSTRAP FEHLGESCHLAGEN ** Bitte scrollen Sie nach oben und suchen Sie nach früheren Fehlermeldungen; es kann mehr als eine geben.
./discourse-doctor kann bei der Diagnose des Problems helfen.

Ich habe discourse-doctor versucht, aber das hat mir nichts gebracht. Hat jemand eine Lösung dafür? Außerdem verwende ich Apache, da ich es einfacher finde und mehr Erfahrung damit habe. Ein Wechsel zu Nginx ist also keine Option.
Hier sind einige Logs aus dem Bereich vor dem Fehler:

MaxMind IP-Datenbank-Updates erfordern eine Lizenz
Bitte setzen Sie DISCOURSE_MAXMIND_LICENSE_KEY auf einen von Ihnen generierten Schlüssel unter https://www.maxmind.com
MaxMind IP-Datenbank-Updates erfordern eine Lizenz
Bitte setzen Sie DISCOURSE_MAXMIND_LICENSE_KEY auf einen von Ihnen generierten Schlüssel unter https://www.maxmind.com
98765.375844045 Komprimieren: 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’”
<— Letzte GCs —>

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

<— JS-Stacktrace —>

FATAL ERROR: NewSpace::Rebalance Zuweisung fehlgeschlagen - JavaScript-Heap Speicher voll
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]
Aborted (core dumped)
rake aborted!
Errno::ENOENT: No such file or 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
(Siehe vollständigen Trace, indem Sie die Aufgabe mit --trace ausführen)
I, [2021-07-21T16:25:26.467914 #1] INFO – : Herunterladen von MaxMindDB…
Komprimieren von Javascript und Erstellen von Source Maps

I, [2021-07-21T16:25:26.469702 #1] INFO – : Beenden asynchroner Prozesse
I, [2021-07-21T16:25:26.469947 #1] INFO – : Senden von INT an 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 – : Senden von TERM an 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: schneller Shutdown angefordert
174:signal-handler (1626884726) SIGTERM erhalten, Shutdown geplant…
2021-07-21 16:25:26.473 UTC [56] LOG: Abbruch aller aktiven Transaktionen
174:M 21 Jul 2021 16:25:26.473 # Benutzer angefordertes Herunterfahren…
174:M 21 Jul 2021 16:25:26.474 * Speichern des letzten RDB-Snapshots vor dem Beenden.
2021-07-21 16:25:26.479 UTC [56] LOG: Hintergrundarbeiter “logical replication launcher” (PID 65) beendet mit Exit-Code 1
174:M 21 Jul 2021 16:25:26.480 * DB auf Festplatte gespeichert
2021-07-21 16:25:26.480 UTC [60] LOG: Herunterfahren
174:M 21 Jul 2021 16:25:26.480 # Redis ist jetzt bereit zum Beenden, tschüss…
2021-07-21 16:25:26.515 UTC [56] LOG: Datenbanksystem heruntergefahren

Vielen Dank,
Kian

Kannst du bitte

? Wir brauchen wirklich frühere Logzeilen, um sinnvoll helfen zu können.

Einfach angehängt, sorry :slight_smile:

Ihr Server verfügt nicht über genügend RAM, um Discourse zu installieren.

Wie hoch sind Ihre Speicherkapazität und die Swap-Kapazität?

Es verfügt über 8 GB Arbeitsspeicher und 10 GB Swap-Speicher. Wie es scheint, nutzt mein System den Swap-Speicher nicht.

Verwendet die aktuelle Anwendung den gesamten verfügbaren Speicher, und ist Swappiness so konfiguriert, dass sie nie auftritt?

Da ich keine weiteren Berichte sehe, denke ich, liegt das Problem an Ihrem Server.

Hallo!
Ich habe 8 GB RAM und 10 GB Swap. Ich führe ./launcher rebuild app aus, und der RAM liegt bei 3,4 GB, während kein Swap verwendet wird. Ich benutze htop, und bei Swap steht nur OK/10,00G. Ich bin mir nicht sicher, ob das bedeutet, dass der Swap funktioniert oder nicht.

In HTOP steht bei Swap OK/10,00 G. Ich bin mir nicht sicher, was das bedeutet. Und der RAM liegt bei etwa 3,4 G, während ./launcher rebuild app ausgeführt wird.

Ich denke, es hat funktioniert. Ich habe Clamd mit sigterm über htop beendet. Am Ende steht eine Docker-ID. Also nehme ich an, es hat geklappt.

Edit: Es scheint gut zu funktionieren. Ich habe es über IP und Port geladen, und es wird korrekt angezeigt! Ich muss nur noch den Reverse-Proxy einrichten, und dann ist alles erledigt. Danke für die Hilfe @Falco & @pfaffman :slight_smile:

Außerdem möchte ich SSL auf Discourse deaktivieren, damit kein spezieller Port erforderlich ist. Kann ich SSL auf Discourse deaktivieren und stattdessen auf einem Reverse-Proxy aktivieren, wo ich das Zertifikat auf meinem eigenen Rechner habe?

Ja, du musst einfach die ersten paar Zeilen in der Datei app.yml entfernen. Die mit ssl und die mit letsencrypt.

Wie würde ich das mit einem Apache-Reverse-Proxy unter Verwendung von SSL machen? Und kann ich auch die Zeile 443:443 in app.yml entfernen?

Ja. Normalerweise möchten Sie bei einem Reverse-Proxy Ihren Dienst über einen Unix-Socket betreiben. Fügen Sie dazu die Zeile

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

zur Liste der Vorlagen in der app.yml hinzu. Der Socket wird unter /var/discourse/shared/standalone/nginx.http.sock erstellt.

Wie würde meine Reverse-Proxy-Datei .conf aussehen? Oder sind Sie sich nicht so sicher?

Zwar gibt es einige Beispiele von Community-Mitgliedern wie Configure Apache proxy with Let's Encrypt, doch dies fällt nicht in den Rahmen des offiziellen Supports, den wir hier leisten. Beachten Sie zudem Sams Warnung:

Ich habe Apache schon einmal als Proxy betrieben, daher kenne ich den Stress :smiley:

Hallo!
Ich frage mich nur, ob das für E-Mails korrekt ist? Ich bekomme nämlich keine.

Rendered layouts/email_template.html.erb (Dauer: 0,4 ms | Zuordnungen: 30)
E-Mail übermittelt 2d4e2472-28bc-4eba-a9d6-4ca666feb9d1@forum.domain.com (6,7 ms)
Job-Ausnahme: Ende der Datei erreicht

Der E-Mail-Server ist mail.domain.com, nicht forum.domain.com. Soll das dort so stehen?

Wenn du die Test-E-Mail unter /admin/email nicht erhältst, stimmt etwas nicht :wink:. Du kannst die SMTP-Einstellung in der app.yml ändern und etwaige Fehler beheben.