Sidekiq 실행되지 않음. Sidekiq 하트비트 테스트 실패, 재시작 중

Redis를 플러시하거나 업데이트하는 방식으로 이 문제를 해결할 수 있을지 궁금합니다. 지난 8개월 이상 건드리지 않았거든요. 저는 개인적으로 Redis를 다뤄본 적이 없지만, 저희의 Tests-Pass Discourse 인스턴스는 현재 이 포럼에서 권장되는 Discourse Docker가 아니라 local_discourse를 사용하여 설정되었습니다. 제가 겪고 있는 문제는 사용자에게 이메일이 전송되지 않는 것과 관련이 있습니다. 도움과 조언을 부탁드립니다!

Sidekiq이 실행되지 않고 있습니다. 이메일 전송과 같은 많은 작업은 sidekiq에 의해 비동기적으로 실행됩니다. 적어도 하나의 sidekiq 프로세스가 실행 중인지 확인하십시오.

Sidekiq 하트비트 테스트 실패, 재시작 중

config/unicorn.conf.rb:147:in `check_sidekiq_heartbeat
config/unicorn.conf.rb:164:in `master_sleep'
unicorn-5.5.4/lib/unicorn/http_server.rb:296:in `join'
unicorn-5.5.4/bin/unicorn:128:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/bin/unicorn:23:in `load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/bin/unicorn:23:in `<main>'

마이그레이트가 합리적이라면, 제안에 열려 있습니다.

현재 설치 환경의 백업을 만들고, Discourse 공식 표준 설치 가이드에 따라 완전히 새로운 설치를 진행하는 것을 권장합니다.

최소 지난 4년 동안 권장되어 온 방식입니다.

라파엘의 제안을 두 번째로 지지합니다.

redis 컨테이너를 재구축하거나 재시작하기 위해 launcher를 사용하는 것이 도움이 될까요?

사용법: launcher COMMAND CONFIG [–skip-prereqs] [–docker-args STRING]
명령어:
start: 컨테이너 시작/초기화
stop: 실행 중인 컨테이너 중지
restart: 컨테이너 재시작
destroy: 컨테이너 중지 및 삭제
enter: 컨테이너 내부에서 명령어를 실행하기 위해 셸 열기
logs: 컨테이너의 Docker 로그 보기
bootstrap: 템플릿을 기반으로 설정에 따라 컨테이너 부트스트랩
run: 마지막에 부트스트랩된 이미지의 컨텍스트에서 설정과 함께 지정된 명령어 실행
rebuild: 컨테이너 재구축 (기존 컨테이너 삭제, 부트스트랩, 새 컨테이너 시작)
cleanup: 24시간 이상 중지된 모든 컨테이너 삭제
start-cmd: 컨테이너 시작에 사용되는 docker 명령어 생성

옵션:
–skip-prereqs launcher 사전 요구 사항 확인 안 함
–docker-args docker 실행 시 전달할 추가 인자
–skip-mac-address MAC 주소 할당 안 함
–run-image 컨테이너 실행에 사용되는 이미지 재정의

Discourse 공식 표준 설치 가이드에 따라 설치하셨나요, 아니면 다른 방식으로 설치하셨나요? 표준 설치 환경이라면 ./launcher rebuild app 명령을 실행하면 현재 문제가 해결될 가능성이 높습니다.

아직은 아니지만, 마이그레이션 시간을 잡을 예정입니다. 저희 디스코urs가 거의 3년째 운영되고 있어서 불필요한 다운타임을 만들고 싶지 않거든요. :slight_smile: 인스턴스는 전적으로 자원봉사자들에 의해 관리되고 있어서, 지난 한 달 동안 스스로 유지보수 방법을 배우고 있습니다. 빠른 리디스 수정이 도움이 된다면(해당 컨테이너는 1년 동안 손대지 않고 실행 중이었거든요) 적용하고 싶습니다.

처음부터 표준 설치를 하지 않았다면, 현재 문제를 해결할 수 있는 방법이 무엇인지 알기 어렵습니다.

새로운 VM을 설정하고 그곳에서 테스트 설치를 수행하여 정상적으로 작동하는지 확인하는 것이 좋습니다. 이전 작업을 수행할 때, 기존 포럼을 읽기 전용 모드로 설정하고 백업을 받은 후, 새 VM에 복원하고 DNS를 변경하면 거의 다운타임 없이 전환할 수 있습니다. (실제로는 DNS를 변경한 후 Let’s Encrypt 인증서를 설치하기 위해 재구축 과정을 거치므로, 약간의 다운타임이 발생할 것입니다.)

감사합니다. Let’s Encrypt는 실제로 꽤 쉬울 것입니다. nginx 리버스 프록시 설정을 간단히 수정하면 되기 때문입니다. 좋습니다. 잠시 동안의 다운타임이 발생할 것으로 예상됩니다. 다만, 사람이 적은 시간대에 이 작업을 예약하면 됩니다.

곧 공식 이미지로 마이그레이션하고 백업을 복원할 예정입니다. Sidekiq 등이 정상적으로 작동하게 되면, 백업된 이메일 등을 정리하는 과정에서 사용자에게 스팸이 전송되지 않도록 주의해야 할 사항이 있는지 알려주시면 감사하겠습니다.

sidekiq 작업 대기열이 이전되지 않아 많은 이메일이 누락될 것이며, 다이제스트는 정상적으로 전송을 재개합니다.

공식 Discourse Docker 이미지를 설치하는 방법에 대한 문서를 따르려다 문제가 발생했습니다. 기존 Docker 환경에서 사용하던 redis 컨테이너, mail-receiver 컨테이너, data 컨테이너가 빠져 있는 것 같다는 결론을 내렸습니다.

기존 설치 환경에는 다음 파일들이 포함되어 있었습니다:
app.yml
data.yml
mail-receiver.yml
redis.yml

이러한 멀티 컨테이너 구성은 기본 설치 지침과 다릅니다. 참고용으로 기존 /var/discourse 디렉토리의 백업은 보유하고 있습니다.

FAILED                                                                                                                                                        │················································································································
--------------------                                                                                                                                          │················································································································
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 645 exit 1>                 │················································································································
Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'                                                                                            │················································································································
exec failed with the params {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}                                   │················································································································
bbf0e57ac69f1febe2a5f149aa7e6e12541c3c23aaf199188fdf19d507254b58                                                                                              │················································································································
** 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.

./launcher bootstrap data 단계를 놓친 것 같습니다.
./launcher start redis

[Mon 11 May 2020 12:53:20 AM UTC] Run reload cmd: sv reload nginx                                                                                             │················································································································
fail: nginx: runsv not running                                                                                                                                │················································································································
[Mon 11 May 2020 12:53:20 AM UTC] Reload error for :                                                                                                          │················································································································
[Mon 11 May 2020 12:53:21 AM UTC] Domains not changed.                                                                                                        │················································································································
[Mon 11 May 2020 12:53:21 AM UTC] Skip, Next renewal time is: Thu 09 Jul 2020 11:33:04 PM UTC                                                                 │················································································································
[Mon 11 May 2020 12:53:21 AM UTC] Add '--force' to force to renew.                                                                                            │················································································································
[Mon 11 May 2020 12:53:21 AM UTC] Installing key to:/shared/ssl/discuss.noisebridge.info_ecc.key                                                              │················································································································
[Mon 11 May 2020 12:53:21 AM UTC] Installing full chain to:/shared/ssl/discuss.noisebridge.info_ecc.cer                                                       │················································································································
[Mon 11 May 2020 12:53:21 AM UTC] Run reload cmd: sv reload nginx                                                                                             │················································································································
fail: nginx: runsv not running                                                                                                                                │················································································································
[Mon 11 May 2020 12:53:21 AM UTC] Reload error for :                                                                                                          │················································································································
run-parts: executing /etc/runit/1.d/remove-old-socket                                                                                                         │················································································································
Started runsvdir, PID is 626                                                                                                                                  │················································································································
ok: run: redis: (pid 636) 0s                                                                                                                                  │················································································································
chgrp: invalid group: ‘syslog’                                                                                                                                │················································································································
ok: run: postgres: (pid 639) 0s                                                                                                                               │················································································································
rsyslogd: imklog: cannot open kernel log (/proc/kmsg): Operation not permitted.                                                                               │················································································································
rsyslogd: activation of module imklog failed [v8.1901.0 try https://www.rsyslog.com/e/2145 ]                                                                  │················································································································
supervisor pid: 640 unicorn pid: 667

좋아요, 이전 Discourse 인스턴스를 성공적으로 복원했습니다! 이제 다음이 표시됩니다:

관리자에 의해 모든 발신 이메일이 전역적으로 비활성화되었습니다. 어떤 종류의 이메일 알림도 전송되지 않습니다.

맞습니다. 이는 마이그레이션 후 50,000통의 이메일이 한꺼번에 발송되는 것을 방지하기 위해 가져오기(importer) 측에서 그렇게 설정한 것입니다. 사이트 설정에서 이메일 기능을 신중하게 활성화해 주세요.