Установка Discourse при уже установленном Apache2

Привет!
Я запускаю сервер Ubuntu 18.04 с установленным Apache. Хочу установить Discourse на другой порт, а затем использовать обратный прокси через Apache, чтобы сделать его доступным по URL. Я попытался создать файл app.yml, изменил там настройки и выполнил: ./launcher rebuild app. Всё идёт хорошо до самого конца, где я получаю ошибку ‘Failed’ с таким сообщением:

FAILED

Pups::ExecError: cd /var/www/discourse && su discourse -c ‘bundle exec rake themes:update assets:precompile’ failed w ith 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 t hemes:update assets:precompile’”]}
2beda643ff51279f145c96cdede83a1d6b65f67e00225be74100c8fb9fe3f790
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.

Я попробовал использовать discourse-doctor, но он ничего не сказал. Есть ли у кого-нибудь способ это исправить? Также я использую Apache, так как считаю его более удобным и имею больше опыта работы с ним. Поэтому переход на Nginx не вариант.
Вот некоторые логи из раздела выше ошибки:

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

Спасибо,
Кьян

Можете

? Нам действительно нужны более ранние строки лога, чтобы оказать какую-либо существенную помощь.

Только что прикрепил(а), извините :slight_smile:

На вашем сервере недостаточно оперативной памяти для установки Discourse.

Какой объём оперативной памяти и подкачки у вас имеется?

У него 8 ГБ оперативной памяти и 10 ГБ файла подкачки. Судя по всему, моя система не использует файл подкачки.

Использует ли текущее приложение всю доступную память, и параметр swappiness настроен так, чтобы подкачка никогда не происходила?

Поскольку я не вижу других сообщений об ошибках, думаю, проблема на вашем сервере.

Привет!
У меня 8 ГБ оперативной памяти и 10 ГБ файла подкачки. Я запускаю команду ./launcher rebuild app, при этом используется 3,4 ГБ оперативной памяти, а файл подкачки не задействован. Я использую htop, где в строке swap указано OK/10.00G. Не уверен, означает ли это, что файл подкачки работает или нет.

В htop в строке swap указано OK/10.00G. Не совсем понятно, что это значит. А оперативная память занимает около 3,4 ГБ во время запуска команды ./launcher rebuild app.

Думаю, всё сработало. Я завершил Clamd с помощью сигнала SIGTERM через htop. В конце отображается ID Docker-контейнера, так что, полагаю, всё прошло успешно.

Редактирование: Похоже, всё работает нормально. Я подключился через IP и порт, и всё отображается корректно! Осталось только настроить обратный прокси, и всё готово. Спасибо за помощь @Falco и @pfaffman :slight_smile:

Кроме того, я хочу отключить SSL в Discourse, чтобы не требовался порт. Могу ли я отключить его в Discourse и включить на обратном прокси-сервере, где у меня есть сертификат на машине и т.д.?

Да, вам нужно просто удалить первые несколько строк в файле app.yml. Строку с ssl и строку с letsencrypt.

Как мне это сделать, используя обратный прокси Apache с SSL? И могу ли я также удалить строку 443:443 в файле app.yml?

Да. Обычно при настройке обратного прокси вы захотите запустить свой сервис через unix-сокет. Вы можете добавить строку

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

в список шаблонов в файле app.yml. Сокет будет создан по пути /var/discourse/shared/standalone/nginx.http.sock.

Как бы выглядел мой файл конфигурации обратного прокси .conf? Или вы не уверены?

Хотя существуют примеры от участников сообщества, например Configure Apache proxy with Let's Encrypt, это выходит за рамки официальной поддержки, которую мы предоставляем здесь. Также помните о предупреждении Сэма:

Я уже запускал Apache в качестве прокси, так что знаю, что это за нагрузка :smiley:

Привет!
Просто хотел уточнить, правильно ли настроена отправка писем? Я не получаю их.

Отрендерен шаблон layouts/email_template.html.erb (Длительность: 0,4 мс | Выделения памяти: 30)
Письмо доставлено: 2d4e2472-28bc-4eba-a9d6-4ca666feb9d1@forum.domain.com (6,7 мс)
Исключение в задаче: достигнут конец файла

Сервер почты — mail.domain.com, а не forum.domain.com. Или там должно быть forum.domain.com?

Если вы не получили тестовое письмо по адресу /admin/email, значит что-то не так :wink:. Вы можете изменить настройки SMTP в файле app.yml и исправить любые ошибки.