Apache2가 설치된 상태에서 Discourse 설치하기

안녕하세요!
Apache가 설치된 Ubuntu 18.04 서버를 사용 중입니다. 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’ 실패 (리턴 코드: #<Process::Status: pid 3801 exit 134>)
실패 위치: /pups/lib/pups/exec_command.rb:112:in `spawn’
실행 파라미터: {“cd”=>“$home”, “hook”=>“assets_precompile”, “cmd”=>[“su discourse -c ‘bundle exec rake themes:update assets:precompile’”]} 실패
2beda643ff51279f145c96cdede83a1d6b65f67e00225be74100c8fb9fe3f790
** 부트스트랩 실패 ** 이전 오류 메시지를 확인하기 위해 위로 스크롤하세요. 오류가 하나 이상 있을 수 있습니다.
./discourse-doctor 명령을 사용하면 문제를 진단하는 데 도움이 될 수 있습니다.

discourse-doctor를 시도해 보았지만 아무런 정보가 나오지 않았습니다. 이 문제를 해결할 방법을 아시는 분이 계신가요? 또한, 저는 Apache가 사용이 더 쉽고 경험도 더 많아 Apache를 사용하고 있습니다. 따라서 Nginx로 전환하는 것은 선택지가 아닙니다.
실패 섹션 위의 일부 로그는 다음과 같습니다:

MaxMind IP 데이터베이스 업데이트에는 라이선스가 필요합니다.
https://www.maxmind.com에서 생성한 키를 DISCOURSE_MAXMIND_LICENSE_KEY에 설정하세요.
MaxMind IP 데이터베이스 업데이트에는 라이선스가 필요합니다.
https://www.maxmind.com에서 생성한 키를 DISCOURSE_MAXMIND_LICENSE_KEY에 설정하세요.
98765.375844045 압축 중: 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’”
<— 최근 GC 기록 —>

[3798:0x4872980] 2679 ms: Scavenge 108.1 (126.5) → 97.8 (129.8) MB, 9.0 / 0.0 ms (평균 mu = 1.000, 현재 mu = 1.000) 할당 실패
[3798:0x4872980] 2823 ms: Scavenge 111.4 (129.8) → 101.3 (132.8) MB, 8.4 / 0.0 ms (평균 mu = 1.000, 현재 mu = 1.000) 할당 실패
[3798:0x4872980] 2964 ms: Scavenge 114.8 (133.0) → 104.8 (135.3) MB, 32.7 / 0.0 ms (평균 mu = 1.000, 현재 mu = 1.000) 할당 실패

<— JS 스택 트레이스 —>

치명적 오류: NewSpace::Rebalance 할당 실패 - JavaScript 힙 메모리 부족
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::internal::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]
중단됨 (코어 덤프됨)
rake 중단됨!
Errno::ENOENT: 그런 파일이나 디렉터리가 없습니다 @ 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 `’
작업: TOP => assets:precompile
(전체 트레이스를 보려면 --trace 옵션과 함께 작업을 실행하세요)
I, [2021-07-21T16:25:26.467914 #1] INFO – : MaxMindDB 다운로드 중…
자바스크립트 압축 및 소스 맵 생성

I, [2021-07-21T16:25:26.469702 #1] INFO – : 비동기 프로세스 종료
I, [2021-07-21T16:25:26.469947 #1] INFO – : 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 프로세스에 INT 신호 전송
I, [2021-07-21T16:25:26.470157 #1] INFO – : exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 174 프로세스에 TERM 신호 전송
2021-07-21 16:25:26.470 UTC [56] LOG: 빠른 종료 요청 수신
174:signal-handler (1626884726) SIGTERM 수신, 종료 예약 중…
2021-07-21 16:25:26.473 UTC [56] LOG: 활성 트랜잭션 중단
174:M 21 Jul 2021 16:25:26.473 # 사용자가 종료를 요청했습니다…
174:M 21 Jul 2021 16:25:26.474 * 종료 전 최종 RDB 스냅샷 저장 중.
2021-07-21 16:25:26.479 UTC [56] LOG: 백그라운드 워커 “logical replication launcher” (PID 65)가 종료 코드 1로 종료됨
174:M 21 Jul 2021 16:25:26.480 * 디스크에 DB 저장 완료
2021-07-21 16:25:26.480 UTC [60] LOG: 종료 중
174:M 21 Jul 2021 16:25:26.480 # Redis는 이제 종료 준비가 되었습니다. 안녕…
2021-07-21 16:25:26.515 UTC [56] LOG: 데이터베이스 시스템 종료됨

감사합니다,
Kian

아래의 내용을 확인해 주실 수 있을까요?

의미 있는 도움을 드리기 위해 이전 로그 라인들이 꼭 필요합니다.

방금 첨부했어요, 죄송합니다 :slight_smile:

서버에 Discourse를 설치할 충분한 RAM이 없습니다.

메모리와 스왑 용량은 얼마입니까?

메모리 8GB와 스왑 10GB가 있습니다. 겉보기에는 시스템이 스왑을 사용하지 않는 것 같습니다.

현재 애플리케이션이 사용 가능한 모든 메모리를 사용하고 있으며, 스와핑이 발생하지 않도록 설정되어 있나요?

다른 보고서를 찾을 수 없으므로, 이는 서버 측의 문제라고 생각합니다.

안녕하세요!
저는 8GB의 메모리와 10GB의 스왑을 사용하고 있습니다. ./launcher rebuild app을 실행 중인데, RAM 사용량이 3.4GB에 머물러 있고 스왑은 사용되지 않고 있습니다. htop을 사용 중인데 스왑 항목에는 OK/10.00G라고만 표시되어 있습니다. 이것이 스왑이 정상 작동 중이라는 뜻인지 아니면 작동하지 않는다는 뜻인지 확실하지 않습니다.

HTOP에서 스왑이 OK/10.00G라고 표시되어 있습니다. 이것이 무슨 의미인지 확실하지 않습니다. 그리고 ./launcher rebuild app을 실행하는 동안 RAM 사용량은 약 3.4G로 유지되고 있습니다.

작동한 것 같습니다. htop을 사용해 sigterm으로 Clamd를 종료했습니다. 마지막에 docker ID가 표시되니 잘 된 것으로 추측됩니다.

수정: 제대로 작동하는 것 같습니다. IP와 포트로 접속했는데 정상적으로 표시됩니다! 이제 리버스 프록시만 설정하면 모든 준비가 끝납니다. 도움 주셔서 감사합니다 @Falco & @pfaffman :slight_smile:

또한,
Discourse에서 SSL을 비활성화하여 포트가 필요 없도록 하고 싶습니다. Discourse에서는 SSL을 비활성화하고, 내 머신에 인증서가 있는 리버스 프록시에서 활성화하는 방식으로 설정할 수 있을까요?

네, app.yml 파일의 첫 몇 줄만 삭제하면 됩니다. ssl이 있는 줄과 letsencrypt가 있는 줄을 말이에요.

SSL을 사용하는 Apache 리버스 프록시 환경에서는 어떻게 진행해야 하나요? 그리고 app.yml의 443:443 줄도 삭제할 수 있나요?

네. 리버스 프록시를 설정하려면 일반적으로 서비스가 유닉스 소켓으로 실행되도록 해야 합니다. 이를 위해 해당 app.yml의 템플릿 목록에 다음 줄을 추가할 수 있습니다.

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

소켓은 /var/discourse/shared/standalone/nginx.http.sock 경로에 생성됩니다.

역프록시 .conf 파일은 어떤 모습이어야 하나요? 아니면 너무 확신이 없으신 건가요?

커뮤니티 멤버들이 Configure Apache proxy with Let's Encrypt 와 같은 몇 가지 예시를 제공하긴 하지만, 이는 우리가 공식적으로 제공하는 지원 범위 밖의 사항입니다. 또한 Sam의 경고도 염두에 두시기 바랍니다:

이전에 아파치를 프록시로 사용해보았으니 그 부담이 얼마나 큰지 잘 알고 있습니다 :smiley:

안녕하세요!
이메일에 이 내용이 맞는 건지 궁금합니다. 현재 이메일을 전혀 받지 못하고 있어서요.

Rendered layouts/email_template.html.erb (Duration: 0.4ms | Allocations: 30)
Delivered mail 2d4e2472-28bc-4eba-a9d6-4ca666feb9d1@forum.domain.com (6.7ms)
Job exception: end of file reached

이메일 서버는 forum.domain.com이 아니라 mail.domain.com이어야 하는 건 아닌가요? 아니면 의도적으로 그렇게 설정된 건가요?

/admin/email에서 테스트 이메일을 받지 못한다면 설정이 올바르지 않은 것입니다 :wink:. app.yml에서 SMTP 설정을 변경하여 오류를 수정할 수 있습니다.