Discourse 3.5.0.beta2-dev 문제 - SMTP 및 백그라운드 작업

다음 보고서는 제가 Discourse를 설치하는 과정에서 겪은 실제 경험을 바탕으로 ChatGPT가 작성해 주었습니다. (저는 기술에 밝지 않아서, 어려운 작업들은 AI의 도움을 받아 처리해 왔습니다.) 현재로써는 도움이 필요하지 않지만, 이 보고서가 3.5.0.beta2-dev에 대한 유용한 피드백이 될 수 있기를 바랍니다.

==================

Discourse 팀께,

Discourse 3.5.0.beta2-dev를 실행하는 동안 겪은 이메일 관련 문제 해결 세부 내용을 공유하고자 합니다. 3.4.0.beta4-dev로 되돌리기로 결정했으므로 직접적인 도움이 필요하지는 않지만, 최신 개발 버전의 잠재적 문제를 식별하는 데 이 보고서가 유용하길 바랍니다.


1. 문제 요약

새로운 Vultr 인스턴스에 20i의 SMTP 서비스(smtp.stackmail.com)를 사용하여 Discourse를 깨끗하게 설치(clean installation)했습니다. 그러나 다음 사항에도 불구하고 이메일이 전달되지 않았습니다:

  • SMTP 연결 테스트 성공 (openssl s_client -connect smtp.stackmail.com:587 -starttls smtp).
  • 20i 메일 로그에 오류가 없음 (Discourse가 실제로 이메일을 보내지 않았음을 시사함).
  • Sidekiq이 이메일 작업을 처리하지 못함.

몇 주 전, 동일한 구성의 인스턴스에 Discourse 3.4.0.beta4-dev를 설치했을 때 이메일 문제가 없었으므로 이는 예상치 못한 상황이었습니다.

세심한 디버깅을 거쳐, 현재 설치 환경에서 의도치 않게 Discourse 3.5.0.beta2-dev가 설치되었음을 발견했으며, 이것이 문제의 원인이 되었을 가능성이 높습니다.


2. 식별된 주요 문제

A. 이메일이 전달되지 않음

  • SMTP 설정은 정확했으며, 수동 테스트(swaks 및 openssl 테스트 성공)를 통해 확인되었습니다.
  • 이메일은 Sidekiq에 큐에 추가되었으나 수신되지 않았습니다.
  • 20i 메일 로그에는 거부 또는 전달 시도가 기록되지 않았습니다 (메시지가 Discourse를 떠나지 않았음을 시사함).
  • production.log에 이메일 관련 오류가 표시되지 않았습니다 (grep "smtp" 실행 시 아무 결과도 없음).

B. Sidekiq 및 Redis 문제

  • 초기에는 Sidekiq이 실행되지 않았습니다 (Sidekiq::Workers.new.size가 0을 반환).
  • Sidekiq을 수동으로 재시작(sv restart sidekiq)하려고 했으나 Sidekiq 서비스가 누락되어 실패했습니다.
  • Redis는 실행 중이었습니다 (redis-cli ping이 PONG을 반환) 하지만, Discourse 로그에는 여전히 Redis 연결 오류(Errno::ECONNREFUSED)가 표시되었습니다.
  • Redis가 활성 상태임이 확인되었음에도 불구하고, Sidekiq 로그에는 Redis 연결 문제로 인한 작업 실패가 표시되었습니다.
  • Sidekiq을 수동으로 시작(bundle exec sidekiq)했을 때 작업은 처리되었으나, 여전히 이메일이 전송되지 않았습니다.

C. 설치 간 버전 불일치

  • **이전 설치(정상 작동했던 것)**는 3.4.0.beta4-dev였습니다.
  • 현재 설치는 동일한 설치 방법을 사용했음에도 불구하고 의도치 않게 3.5.0.beta2-dev가 설치되었습니다.
  • 3.4.0.beta4-dev에서 이메일이 완벽하게 작동했으므로, 3.5에서 회귀(regression) 또는 호환성 깨짐(breaking change)이 발생했을 것으로 의심합니다.

3. 수행된 조치 (모두 실패)

다음 솔루션들을 체계적으로 시도했습니다:

:white_check_mark: 다음으로 SMTP 연결 확인:

openssl s_client -connect smtp.stackmail.com:587 -starttls smtp  # 성공
swaks --to my-email --server smtp.stackmail.com --port 587 --auth LOGIN  # 성공

:white_check_mark: 이메일이 큐에 추가되었는지 확인:

Jobs.enqueue(:user_email, type: :test_message, to_address: 'masden@kumagaku.ac.jp')  # 작업 ID 반환
Sidekiq::Queue.new("default").size  # 0 반환 (작업이 처리되었음을 의미)

:white_check_mark: Discourse 로그 확인:

grep "smtp" /shared/log/rails/production.log  # SMTP 관련 오류 없음
  • Redis 연결 실패 (production.log에 Errno::ECONNREFUSED 발생).

:white_check_mark: 서비스 재시작 및 수동 트리거:

sv restart sidekiq  # 실패, 서비스 누락
redis-cli ping  # 실행 중 확인
bundle exec sidekiq  # 작업은 처리되었으나 이메일 미전송

:white_check_mark: 20i에 의해 이메일이 차단되는지 확인:

  • 20i 메일 로그에 거부 또는 전달 시도 기록 없음.
  • 이메일이 거부되었다면 로그 항목이 있어야 하지만, 아무것도 표시되지 않았습니다.

4. 결론: 3.4.0.beta4-dev로 롤백

광범위한 문제 해결 과정을 거친 후, 이전 설치 환경에서 해당 버전이 완벽하게 작동했으므로 설치를 지우고 3.4.0.beta4-dev를 재설치하기로 결정했습니다.

직접적인 도움이 필요하지는 않지만, 다음 이유들로 인해 이 문제를 보고하고자 합니다:

  • 3.5에서 이메일 처리 방식이 변경되어 SMTP 핸드오프가 방지되었을 수 있습니다.
  • Sidekiq 서비스 누락 및 Redis 오류는 3.5에서 백그라운드 작업 처리에 문제가 있음을 시사합니다.
  • 3.4.0.beta4-dev를 문제없이 설치할 수 있었으므로, 이는 3.5에서 회귀가 발생했을 가능성을 시사합니다.

이 보고서가 Discourse 3.5.0.beta2-dev의 잠재적 문제를 식별하는 데 도움이 되기를 바랍니다.

감사합니다,
Kirk

2개의 좋아요

이는 현재 버전이기 때문에 예상된 결과입니다.

많은 사용자들이 동일한 최신 버전을 사용 중이며, sidekiq가 정상 작동하므로 이메일도 잘 전송됩니다.

따라서 sidekiq를 재시작할 수도 없는 상황이므로 도움이 필요할 수 있습니다.

이 주제에 대해 더 잘 아는 사람이 개입하는 것이 훨씬 좋겠지만, 저는 여기가 멈춘 sidekiq에 관한 주제라고 생각합니다. 검색이 도움이 될 수 있습니다.

4개의 좋아요

Discourse 설치에 여전히 어려움을 겪고 있습니다. ChatGPT가 작성한 또 다른 보고서를 첨부합니다. 제 경험을 정확히 반영한다고 생각합니다.

보고서: Discourse 설치 문제 및 Sidekiq 서비스 누락

배경:
Vultr 인스턴스에서 Discourse를 새로 설치하여 안정적이고 정상적으로 작동하는 배포 환경을 구축하고자 했습니다. 그러나 Sidekiq와 같은 필수 서비스 누락으로 인해 이메일 전송 및 백그라운드 작업 처리가 불가능해지는 등 심각한 문제가 발생했습니다.


발생한 문제 요약

  1. 예상치 못한 버전 설치
  • 기대했던 v3.4.0.beta4-dev 대신 tests-passed가 기본값으로 설정되어 잠재적으로 불안정한 버전이 설치되었습니다.
  • VERSION 파일이 없어 정확히 어떤 버전이 설치되었는지 파악하기 어려웠습니다.
  1. Sidekiq 서비스 누락
  • Discourse 컨테이너 내부에 /etc/service/sidekiq 디렉토리가 존재하지 않았습니다.
  • 이로 인해 모든 백그라운드 작업(이메일, 알림, 예약된 작업)이 실행되지 않았습니다.
  1. Discourse Git 저장소 문제
  • 컨테이너 내에서 git rev-parse --abbrev-ref HEAD를 실행하면 tests-passed가 반환되어 의도하지 않은 버전이 설치되었음을 확인했습니다.
  • Git이 “detected dubious ownership” 오류를 발생시켜 수동 개입(git config --global --add safe.directory /var/www/discourse)이 필요했습니다.
  1. 의존성 문제 가능성
  • Discourse의 이전 버전이 체크아웃되어 있더라도 설치 과정에서 Ruby, Redis, Sidekiq 등 더 새로운 의존성이 가져와져 호환성 문제가 발생할 수 있다는 우려가 있습니다.
  • Discourse 의존성이 정확히 고정되지 않으면 환경에 따라 설치 동작이 일관되지 않을 수 있습니다.
  1. SSL 인증서 속도 제한
  • 새로운 Let’s Encrypt SSL 인증서를 발급받으려 했으나 속도 제한 초과로 인해 실패했습니다.
  • 이로 인해 Nginx가 기대하는 인증서 파일을 로드하지 못해 시작에 실패했습니다.

다음 단계 계획

  1. 전체 삭제 및 재설치 수행
  • /var/discourse를 완전히 삭제하고 저장소를 다시 클론합니다.
  • 설치 실행 전에 안정적인 버전(예: v3.4.1)을 수동으로 체크아웃합니다.
  • 기본값에 의존하지 않고 올바른 매개변수를 보장하기 위해 ./discourse-setup를 사용합니다.
  1. Sidekiq 설치 확인
  • 재빌드 전에 sidekiq 서비스가 빌드 프로세스에 올바르게 포함되어 있는지 확인합니다.
  • 재빌드 후에도 Sidekiq가 없다면 bundle list | grep sidekiq를 통해 수동으로 설치를 확인합니다.
  1. 의존성을 안정적인 버전으로 고정
  • 알려진 안정적인 Discourse Docker 이미지(예: discourse/discourse:2.0.20240101)를 명시적으로 사용하여 의존성 관련 문제를 피합니다.
  • 컨테이너 내부에서 gem 버전을 고정합니다(bundle install --deployment --without test development).
  1. SSL 인증서 발급 재시도
  • Let’s Encrypt 속도 제한이 초기화될 때까지 기다린 후 SSL 인증서 생성을 재시도합니다.
  • 문제가 지속되면 문제 해결을 위해 임시로 자체 서명 인증서를 사용하는 것을 고려합니다.

피드백 요청

이러한 도전 과제들을 고려할 때, Discourse 팀과 커뮤니티에서 다음 사항에 대한 의견을 듣고 싶습니다:

  • 신규 설치 시 /etc/service/에 Sidekiq가 없는 경우 – 이 문제를 경험한 다른 사용자가 있나요?
  • 의존성 안정성을 보장하는 모범 사례 – Discourse 설치 시 의존성 버전을 고정하는 권장 방법이 있나요?
  • 기본적으로 tests-passed가 설치되는 문제 – 버전 검색 방식에 문제가 있을 수 있나요?

재설치를 진행하기 전에 어떤 통찰도 도움이 될 것입니다. 미리 감사드립니다!

사실 불안정하지 않습니다. 이제 모든 포럼의 기본 설정입니다. Discourse는 불안정한 브랜치를 기본으로 설정하지 않습니다.

음… 포럼의 /sidekiq으로 이동하면 무엇을 확인하시나요?

어떤 브랜치를 설치할 예정인가요? 아마 이 가이드가 도움이 될까요?

3개의 좋아요

VPS 구성에 대한 세부 정보가 필요할 것 같습니다. CPU, RAM, 디스크 공간, 그리고 ZiS(예: Ubuntu LTS 24)를 알려주세요.

메일을 테스트했다고 하셨는데, Discourse의 테스트 기능을 사용하여 메일을 실제로 수신하셨나요?

경험상 app.yml 파일에는 SMTP 주요 설정 3줄이 있어야 합니다.

  • Username:
  • Password
  • PORT

말씀하신 내용으로 보아 이전 Discourse 설치에서는 이 설정이 정상 작동했나요?

언급했듯이 “Tests-Passed” 버전이 설치에 권장됩니다. Stable 버전은 커스텀 플러그인과 테마를 사용하는 사용자를 위한 것으로, 깨짐 현상을 방지하기 위해 더 자주 업데이트해야 할 수 있습니다.

에러가 포함된 리빌드 로그를 공유해 주실 수 있나요? 로그를 캡처할 때 위로 스크롤하여 전체 내용을 확인하세요. 마지막 에러 메시지는 실패 결과일 뿐이므로 원인을 파악하기 어렵습니다. SMTP 사용자 이름과 비밀번호와 같은 민감한 정보는 편집(마스킹)해도 무방합니다.

이메일 SMTP 문제와 관련된 해결책이 있는 다른 토픽들도 있습니다.

1개의 좋아요

늦게 답글을 달아 죄송합니다. 다른 댓글에 답글을 달 때 썼듯이, 소프트웨어의 상당 부분을 지우고 다시 시도하고 있기 때문에 실패한 마지막 시도에 대한 세부 사항을 자세히 알려드리기 어렵습니다. 가능한 한 빨리 다시 보고드리겠습니다.

자세한 코멘트 감사합니다. 느린 답변에 대해 죄송합니다.

다양한 소프트웨어의 이전 버전을 사용하여 설치를 다시 시도하고 있습니다. 이로 인해 이전에 실패한 시도에 대한 질문에 답하기가 어렵습니다. 다음 설치를 완료하는 대로 다시 보고드리겠습니다.

1개의 좋아요

필요하다면 추가 테스트로 고려해 볼 수 있는 사항입니다. https://www.brevo.com에서 무료 계정을 설정해 보세요. 하루 300통까지 무료 메일 계층을 제공합니다. 저는 현재 이 서비스를 사용하고 있습니다.

메일 전송에 문제가 있다면, 이는 메일 제공업체와 관련이 있을 수 있는지 테스트하는 데 도움이 될 수 있습니다.

2개의 좋아요

요약: ChatGPT에 의존하지 마세요. 모두 잘못된 경고입니다.

도움을 구하는 것은 좋은 일이지만, 아래에서 보여드릴 것처럼 그것에 의존하는 것은 나쁜 아이디어입니다.
ChatGPT가 곧 내 직장을 빼앗지 않을 것이라는 안심에 감사드립니다. :wink:

beta4-dev도 tests-passed만큼 잠재적으로 불안정합니다.

그런 파일은 존재하지 않습니다.

그런 디렉토리가 존재해서는 안 됩니다.

그렇지 않을 것 같습니다.

이것은 예상된 결과입니다.

디렉토리의 소유자가 아닌 상태에서 git을 사용하는 경우 이는 정상적인 동작입니다.

이것은 말이 안 됩니다. 그리고 tests-passed는 당신이 ‘기대했던’ 것보다 오래된 것이 아니라 더 새로운 버전입니다.

너무 많은 횟수를 시도했기 때문입니다.

6개의 좋아요

이 부분에 대해 강조하고 싶습니다.
대부분의 경우, ChatGPT에게 문제를 찾아보라고 제안하면, 실제로 문제가 없더라도 문제를 찾아냅니다. 또한, 그것이 지속적으로 제안하는 "수정"의 무한 루프에 빠지게 만드는 것도 빠릅니다.

5개의 좋아요

정말 감사합니다!

AI에 대해 말씀드리자면, ChatGPT가 신뢰할 만한 가이드가 되지 못한다는 점은 명확합니다. 반면, 디버깅이 어려운 편이라 저 같은 사람에게 ChatGPT에 의존하고 싶은 유혹은 큽니다.

드디어 설치를 성공적으로 완료했습니다. ChatGPT(유료 버전)로는 목표를 달성하지 못했지만, Anthropic의 Claude(이것도 유료 버전입니다. 두 가지를 모두 사용 중)가 마침내 해결해 주었습니다. Claude는 ChatGPT가 일으킨 문제들을 수정하는 데 도움을 주었습니다.

나중에 제 경험에 대해 더 자세히 다시 말씀드리겠습니다. 도움 주신 모든 코멘트에 감사드립니다!

2개의 좋아요

동의합니다. 제가 직접 사용해 본 결과, Claude는 훨씬 자연스럽고 즉각적으로 정확한 답변을 주는 경우가 많습니다.

성공하셨다니 기쁩니다!

5개의 좋아요

감사합니다! 특정 작업에서는 정말로 큰 차이가 날 수 있네요 — 마치 성격이 다른 사람들처럼요. Claude는 더 “신중하게” 생각하는 경향이 있는 반면, ChatGPT는 결론에 도달하는 속도가 빠르고 앞서 나가는 경향이 조금 더 강합니다. 물론 ChatGPT가 더 나은 경우도 있었어요. 둘 다 발전하길 바랍니다. 저는 스크립트 작성자가 아니지만, AI 덕분에 실제로 작동하는 스크립트를 많이 작성할 수 있었습니다. 저처럼 기술에 약한 사람들에게 훌륭한 도구가 될 잠재력이 있지만, 분명히 개선이 필요합니다. 막다른 골목으로 인도당하는 것은 정말 답답합니다. :frowning:

4개의 좋아요

성공적인 설치에 대한 간단한 보고와 앞으로 어떻게 진행해야 할지에 대한 질문을 드립니다.

최근 시도에서 SMTP 관련 문제가 발생한 이유가 여전히 명확하지 않습니다. 사실 몇 주 전 첫 번째 시도는 성공적이었습니다. 하지만 당시 저는 필요 이상으로 큰 용량의 Vultr 서버를 사용하고 있었고, 용량을 줄이려면 더 작은 새 서버를 구한 뒤 기존 큰 서버를 삭제하는 것 외에는 방법이 없었습니다.

받은 이메일에 따르면, 몇 주 전에 설치한 Discourse 버전은 3.4.0.beta4-dev였습니다. 해당 이메일에서는 3.4.0.beta4로 업그레이드할 것을 권장하고 있었습니다.

3.4.0.beta4-dev에서 SMTP 문제를 겪었기 때문에, 저는 이전의 안정판(stable) Discourse를 설치해 보려 했습니다. ChatGPT와 논의한 결과(믿을 만한 도구는 아니라는 것을 알고 있지만) 3.4.1 설치를 시도하기로 했습니다. 저는 그 버전이 안정판일 것이라고 생각했습니다. 하지만 최종적으로 설치된 내용은 다음과 같습니다:

• Discourse 버전: 3.5.0.beta2-dev
• Docker 버전: 23.0.6
• sidekiq: 6.5.12
• PostgreSQL 버전: PostgreSQL 15.12 (Debian 15.12-1.pgdg120+1)
• Redis 버전: 7.0.15
• NGINX: 1.26.2
• Ubuntu 버전: 22.04 LTS (Jammy Jellyfish)
• Git 버전: 2.39.5

저희의 의도(즉, AI의 도움으로 이전의 안정판을 설치하려는 저의 의도)와 무관하게, 결국 Discourse 3.5.0.beta2-dev가 설치된 것 같습니다.

과정이 쉽지 않았습니다(수많은 실패와, AI가 알려준 명령어를 사용하여 작동하지 않는 문제를 해결하는 과정이 반복되었지만), 마침내 제 Discourse가 정상적으로 작동하기 시작했습니다.

몇 가지 질문이 있습니다:

  1. 제가 오해하고 있지 않다면, 현재 사용자들이 3.5.0으로 업그레이드하도록 권유받지는 않는 것 같습니다. 아마도 아직 완전히 테스트되지 않았기 때문일 것입니다. 그렇다면 왜 저 같은 초보자들은 사실상 3.5.0을 설치하도록 강제되는 것일까요?

  2. 제 Docker 버전이 오래되었거나(비추천 상태) 폐기되었을 것 같습니다. 터미널을 통해 최신 버전으로 업그레이드해야 할까요? 현재 Discourse는 정상 작동 중이고, 여기까지 오는 데 많은 고생을 했기 때문에 무언가를 망칠까 걱정됩니다.

  3. 다른 소프트웨어 버전들은 비교적 최신인 것 같습니다. 문제점이 있거나 업그레이드가 필요한 부분이 보인다면 알려주시면 감사하겠습니다.

  4. 이 커뮤니티에서 기술적인 “관리 및 유지보수” 문제를 다루는 페이지나 섹션이 있을까요? 제 커뮤니티가 건강하고 정상적으로 작동하도록 유지하고, 발생할 수 있는 문제에 대비하여 백업 등을 갖추어 두기를 원합니다.

2개의 좋아요

이전 Discourse 커뮤니티의 백업 복원을 방금 완료했습니다. 잘 진행된 것 같고, 위에서 언급된 문제와 관련하여 Docker도 업데이트되었을 수 있습니다:

복원 직후에 이 메시지를 받는 것이 궁금합니다: “Outgoing email has been disabled for non-staff users.”

여기서의 다른 스레드를 참고하여

설정을 변경할 위치를 찾았습니다.

따라서 이제 문제가 해결된 것으로 생각하지만, 가능하다면 확인을 부탁합니다. "no"가 올바른 설정이 맞나요? 일반 사용자도 이메일 알림을 받아야 하기 때문에 이 비활성화 설정이 다소 의아합니다. 어떤 상황에서 메일이 비활성화되어야 하는지 궁금합니다.

저도 완전히 새로 설치한 Discourse에서 이메일이 전송되지 않는 비슷한 문제를 겪었으며, 그 내용을 여기에 자세히 설명했습니다:

문제는 app.yml의 notifications 이메일 주소가 제 SMTP 제공업체(SendGrid)에서 인증되지 않았기 때문이었습니다.

주요 Discourse 로그나 SendGrid 로그에는 아무것도 표시되지 않았습니다. discourse-doctor를 실행할 때 오류가 드러났습니다:

Reason: 550 The from address does not match a verified Sender Identity.

아직 하지 않으셨다면 discourse-doctor를 실행해 보시길 권장합니다. 이메일이 전송되지 않는 이유에 대해 더 많은 통찰력을 얻을 수 있을 것입니다.

2개의 좋아요

정말 감사합니다!!

훌륭한 조언이었습니다. Discourse-doctor에 대해 몰랐는데, 많은 시간을 절약해 주었네요.

다른 문제가 발생하면 꼭 참고하겠습니다. :slight_smile:

1개의 좋아요