Instalando Discourse con Apache2 instalado

¡Hola!
Estoy ejecutando un servidor Ubuntu 18.04 con Apache instalado. Quiero instalar Discourse en un puerto diferente y luego usar un proxy inverso a través de Apache para hacerlo accesible mediante una URL. Intenté crear un archivo app.yml, modificar la configuración dentro y ejecutar: ./launcher rebuild app. Todo parece ir bien hasta el final, donde obtengo un error ‘Failed’ con el siguiente mensaje:

FAILED

Pups::ExecError: cd /var/www/discourse && su discourse -c ‘bundle exec rake themes:update assets:precompile’ failed with return #<Process::Status: pid 3801 exit 134>
Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn’
exec failed with the params {“cd”=>“$home”, “hook”=>“assets_precompile”, “cmd”=>[“su discourse -c ‘bundle exec rake themes:update assets:precompile’”]}
2beda643ff51279f145c96cdede83a1d6b65f67e00225be74100c8fb9fe3f790
** FAILED TO BOOTSTRAP ** por favor, desplázate hacia arriba y busca mensajes de error anteriores; puede haber más de uno.
./discourse-doctor podría ayudar a diagnosticar el problema.

Intenté usar discourse-doctor, pero no me dio ninguna información útil. ¿Alguien sabe cómo solucionar esto? Además, estoy usando Apache porque lo encuentro más fácil de usar y tengo más experiencia con él. Por lo tanto, cambiar a Nginx no es una opción.
Aquí hay algunos registros de la sección anterior al fallo:

MaxMind IP database updates require a license
Please set DISCOURSE_MAXMIND_LICENSE_KEY to one you generated at https://www.maxmind.com
MaxMind IP database updates require a license
Please set DISCOURSE_MAXMIND_LICENSE_KEY to one you generated at https://www.maxmind.com
98765.375844045 Compressing: 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’”
<— Last few GCs —

[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) allocation failure
[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) allocation failure
[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) allocation failure

<— JS stacktrace —

FATAL ERROR: NewSpace::Rebalance Allocation failed - JavaScript heap out of memory
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
(See full trace by running task with --trace)
I, [2021-07-21T16:25:26.467914 #1] INFO – : Downloading MaxMindDB…
Compressing Javascript and Generating Source Maps

I, [2021-07-21T16:25:26.469702 #1] INFO – : Terminating async processes
I, [2021-07-21T16:25:26.469947 #1] INFO – : Sending INT to 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 – : Sending TERM to 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: received fast shutdown request
174:signal-handler (1626884726) Received SIGTERM scheduling shutdown…
2021-07-21 16:25:26.473 UTC [56] LOG: aborting any active transactions
174:M 21 Jul 2021 16:25:26.473 # User requested shutdown…
174:M 21 Jul 2021 16:25:26.474 * Saving the final RDB snapshot before exiting.
2021-07-21 16:25:26.479 UTC [56] LOG: background worker “logical replication launcher” (PID 65) exited with exit code 1
174:M 21 Jul 2021 16:25:26.480 * DB saved on disk
2021-07-21 16:25:26.480 UTC [60] LOG: shutting down
174:M 21 Jul 2021 16:25:26.480 # Redis is now ready to exit, bye bye…
2021-07-21 16:25:26.515 UTC [56] LOG: database system is shut down

Gracias,
Kian

¿Puedes

? Realmente necesitamos las líneas de registro anteriores para poder brindar cualquier ayuda útil.

Solo los adjunté, lo siento :slight_smile:

Tu servidor no tiene suficiente RAM para instalar Discourse.

¿Cuál es tu capacidad de memoria y de espacio de intercambio (swap)?

Tiene 8 GB de memoria y 10 GB de espacio de intercambio. A juzgar por lo que se ve, mi sistema no está utilizando el espacio de intercambio.

¿Está la aplicación actual utilizando toda la memoria disponible y está la swappiness configurada para que nunca ocurra?

Como no veo otros informes, creo que se trata de algo en tu servidor.

¡Hola!
Tengo 8 GB de memoria y 10 GB de espacio de intercambio (swap). Estoy ejecutando ./launcher rebuild app y la RAM se mantiene en 3.4 GB, sin usar swap. Estoy usando htop y el swap solo dice OK/10.00G. No estoy seguro de si eso significa que el swap está funcionando o no.

En HTOP, el intercambio (swap) dice OK/10.00G. No estoy seguro de qué significa esto. Y la RAM se mantiene en unos 3.4G mientras se ejecuta ./launcher rebuild app.

Creo que ha funcionado. Cerré Clamd con sigterm usando htop. El final tiene un ID de Docker, así que supongo que ha funcionado.

Edición: Parece que funciona correctamente. Lo he cargado mediante IP y puerto y aparece sin problemas. Solo tengo que configurar el proxy inverso y ya estará todo listo. Gracias por la ayuda @Falco & @pfaffman :slight_smile:

Además, quiero deshabilitar SSL en Discourse para que no requiera un puerto. ¿Puedo deshabilitarlo en Discourse y habilitarlo en un proxy inverso, donde tengo el certificado en mi máquina, etc.?

Sí, solo necesitas eliminar las primeras líneas del archivo app.yml: la que contiene ssl y la que contiene letsencrypt.

¿Cómo podría hacerlo con un proxy inverso de Apache que use SSL? ¿Y puedo eliminar también la línea 443:443 en app.yml?

Sí. Normalmente, para configurar un proxy inverso, querrás que tu servicio se ejecute en un socket Unix. Puedes agregar la línea

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

a la lista de plantillas en el archivo app.yml para ello. El socket se creará en /var/discourse/shared/standalone/nginx.http.sock.

¿Cómo se vería mi archivo .conf de proxy inverso? ¿O no estás tan seguro?

Aunque existen algunos ejemplos de miembros de la comunidad, como Configure Apache proxy with Let's Encrypt, esto queda fuera del alcance del soporte que ofrecemos oficialmente aquí. Además, ten en cuenta la advertencia de Sam:

Ya he usado Apache como proxy antes, así que conozco el estrés :smiley:

¡Hola!
Solo quería saber si esto es correcto para los correos electrónicos, ya que no estoy recibiendo ninguno.

Rendered layouts/email_template.html.erb (Duración: 0.4ms | Asignaciones: 30)
Entregado correo 2d4e2472-28bc-4eba-a9d6-4ca666feb9d1@forum.domain.com (6.7ms)
Excepción del trabajo: fin de archivo alcanzado

El servidor de correo es mail.domain.com, no forum.domain.com. ¿O eso debería estar ahí?

Si no recibes el correo de prueba en /admin/email, algo no está bien :wink:. Puedes cambiar la configuración SMTP en app.yml y corregir cualquier error.