alxndr
(Alexander)
9월 14, 2021, 1:17오전
1
배경 정보: 사이트는 lot.almost-dead.net이며, 버전은 2.8.0.beta4이고 Google Cloud/Compute에 호스팅되어 있습니다. 공식 Docker 기반 가이드를 따라 설정했습니다. (저는 브라우저 프론트엔드 기술에 능숙하고 클라우드 호스팅의 큰 그림은 이해하고 있지만, AWS에는 익숙한 반면 Google에는 익숙하지 않습니다.)
예상 원인: VM 인스턴스를 중지했다가 다시 시작했습니다. (Discourse에 노출된 환경 변수를 조정하려는 시도였습니다.)
VM이 다시 시작되고 사이트가 복구된 후, JS 에셋과 일부 사용자 아바타가 타임아웃되는 것을 발견했습니다. 관리 패널의 Community Health(커뮤니티 건강) 영역이 로드되지 않으며, 스피너가 계속 회전합니다. Chrome Dev Tools의 Network 탭을 보면 /message-bus/.../poll 요청이 모두 실패하고 있습니다. 업그레이드 페이지(/admin/upgrade)는 거의 즉시 실패하며 Chrome에서 ERR_FAILED 코드가 표시됩니다. 토픽을 탐색할 때 POST 요청이 ERR_CONNECTION_REFUSED로 실패하고, JS에서 발생한 GET 요청이 ERR_FAILED로 실패하는 것을 확인할 수 있습니다. (이것은 제 관리자 계정에 대한 로그인 쿠키가 설정된 브라우저에서 확인한 내용입니다.)
새로운 브라우저 인스턴스에서 사이트를 로드하면 Chrome의 ERR_CONNECTION_REFUSED 오류가 표시됩니다.
시도해 본 조치:
서버 측 재빌드 — sudo ./launcher rebuild app는 성공적으로 실행되는 것으로 보이지만, 사이트의 동작에는 변화가 없습니다.
플러그인을 주석 처리하고 재빌드해도 여전히 변화가 없습니다.
안전 모드 — /safe-mode를 요청하면 즉시 Chrome의 ERR_FAILED 페이지가 나타납니다.
제안이 있으신가요?
IAmGav
(Gavin Perch)
9월 14, 2021, 5:39오전
2
다음 명령어를 시도해 보셨나요?
apt-get update
apt-get upgrade
그리고 다시 빌드해 보셨나요?
alxndr
(Alexander)
9월 14, 2021, 7:13오전
3
방금 시도해 봤는데, 이전과 같은 것 같습니다.
RGJ
(Richard - Communiteq)
9월 14, 2021, 7:30오전
4
아니요, 당신의 사이트는 다시 올라온 것이 아니라 완전히 다운되어 있습니다. 일부는 캐시를 보고 있는 것입니다. 당신의 사이트를 처음 방문하는 사용자에게는 전혀 응답이 없습니다. 이는 네트워크/방화벽 수준의 문제이거나, nginx가 시작되지 않거나 충돌하고 있기 때문일 가능성이 높습니다.
alxndr
(Alexander)
9월 14, 2021, 9:38오후
5
네, 이해가 됩니다.
sudo ./launcher enter app를 실행한 후 nginx가 실행 중인 것을 확인했습니다…
root@adn-prod-app:/var/www/discourse# ps aux | grep nginx
root 548 0.0 0.0 2156 64 ? Ss 07:04 0:00 runsv nginx
root 558 0.0 0.1 55236 2524 ? S 07:04 0:00 nginx: master process /usr/sbin/nginx
www-data 567 0.0 0.2 55996 5068 ? S 07:04 0:00 nginx: worker process
www-data 568 0.0 0.0 55996 1628 ? S 07:04 0:00 nginx: worker process
www-data 569 0.0 0.0 55792 1680 ? S 07:04 0:00 nginx: cache manager process
root 23179 0.0 0.0 6140 884 pts/1 S+ 21:23 0:00 grep nginx
Google Cloud에 익숙하지 않아 네트워크/방화벽 설정에서 무엇을 확인해야 하는지 잘 모르겠습니다… VM 인스턴스에 "http-server"와 “https-server” 태그가 붙어 있고, Google의 방화벽 시스템이 이 태그를 사용하여 해당 태그가 있는 인스턴스에 "default-allow-http"와 “default-allow-https” 기본 규칙을 적용하는 것으로 보입니다. 이는 제 생각에 올바른 설정인 것 같고, nslookup으로 확인한 결과 제가 사용하는 서브도메인은 Google UI에 표시된 외부 IP 주소로 해석되고 있습니다. 그러나 외부에서는 여전히 인스턴스에 접근할 수 없습니다.
alxndr
(Alexander)
9월 14, 2021, 11:01오후
6
/var/discourse/shared/standalone/log/rails/production.log 파일에서 Redis 연결과 관련된 오류를 확인했습니다. 이를 복구할 방법이 있을까요?
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL) subscribe failed, reconnecting in 1 second. Call stack /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:384:in `rescue in establish_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:365:in `establish_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:117:in `block in connect'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:330:in `with_reconnect'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:116:in `connect'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:403:in `ensure_connected'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:255:in `block in process'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:342:in `logging'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:254:in `process'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:148:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/mini_profiler/profiling_methods.rb:85 :in `block in profile_method'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis.rb:959:in `block in get'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis.rb:70:in `block in synchronize'
/usr/local/lib/ruby/2.7.0/monitor.rb:202:in `synchronize'
/usr/local/lib/ruby/2.7.0/monitor.rb:202:in `mon_synchronize'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis.rb:70:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis.rb:958:in `get'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.6/lib/message_bus/backends/redis.rb:361:in `process_global_backlog'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.6/lib/message_bus/backends/redis.rb:269:in `block in global_subscribe'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.6/lib/message_bus/backends/redis.rb:282:in `global_subscribe'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.6/lib/message_bus.rb:781:in `global_subscribe_thread'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.6/lib/message_bus.rb:729:in `block in new_subscriber_thread'
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
Creating scope :open. Overwriting existing method Poll.open.
Benjamin_D
(Benjamin Decotte)
9월 14, 2021, 11:47오후
7
안녕하세요,
희망은 낮지만, 이전에 Redis 오류를 본 적이 있었는데, SSL 인증서(누락?)와 관련이 있었던 것 같습니다.
./launcher logs app 명령이 도움이 될까요?
alxndr
(Alexander)
9월 14, 2021, 11:52오후
8
아, 여기 nginx 경고가 몇 개 있네요. 그 뒤에 식별자가 빠져 있는 것처럼 보이는 이 메시지가 있습니다: Reload error for :
$ sudo ./launcher logs app
run-parts: executing /etc/runit/1.d/00-ensure-links
run-parts: executing /etc/runit/1.d/00-fix-var-logs
run-parts: executing /etc/runit/1.d/01-cleanup-web-pids
run-parts: executing /etc/runit/1.d/anacron
run-parts: executing /etc/runit/1.d/cleanup-pids
Cleaning stale PID files
run-parts: executing /etc/runit/1.d/copy-env
run-parts: executing /etc/runit/1.d/letsencrypt
[Tue 14 Sep 2021 10:44:41 PM UTC] Domains not changed.
[Tue 14 Sep 2021 10:44:41 PM UTC] Skip, Next renewal time is: Tue Oct 5 00:05:09 UTC 2021
[Tue 14 Sep 2021 10:44:41 PM UTC] Add '--force' to force to renew.
[Tue 14 Sep 2021 10:44:42 PM UTC] Installing key to:/shared/ssl/lot.almost-dead.net.key
[Tue 14 Sep 2021 10:44:42 PM UTC] Installing full chain to:/shared/ssl/lot.almost-dead.net.cer
[Tue 14 Sep 2021 10:44:42 PM UTC] Run reload cmd: sv reload nginx
warning: nginx: unable to open supervise/ok: file does not exist
[Tue 14 Sep 2021 10:44:42 PM UTC] Reload error for :
[Tue 14 Sep 2021 10:44:42 PM UTC] Domains not changed.
[Tue 14 Sep 2021 10:44:42 PM UTC] Skip, Next renewal time is: Mon Oct 4 00:06:04 UTC 2021
[Tue 14 Sep 2021 10:44:42 PM UTC] Add '--force' to force to renew.
[Tue 14 Sep 2021 10:44:43 PM UTC] Installing key to:/shared/ssl/lot.almost-dead.net_ecc.key
[Tue 14 Sep 2021 10:44:43 PM UTC] Installing full chain to:/shared/ssl/lot.almost-dead.net_ecc.cer
[Tue 14 Sep 2021 10:44:43 PM UTC] Run reload cmd: sv reload nginx
warning: nginx: unable to open supervise/ok: file does not exist
[Tue 14 Sep 2021 10:44:43 PM UTC] Reload error for :
Started runsvdir, PID is 546
ok: run: redis: (pid 554) 0s
ok: run: postgres: (pid 560) 0s
chgrp: invalid group: ‘syslog’
supervisor pid: 558 unicorn pid: 579
Shutting Down
run-parts: executing /etc/runit/3.d/01-nginx
ok: down: nginx: 1s, normally up
run-parts: executing /etc/runit/3.d/02-unicorn
(558) exiting
ok: down: unicorn: 0s, normally up
run-parts: executing /etc/runit/3.d/10-redis
ok: down: redis: 0s, normally up
run-parts: executing /etc/runit/3.d/99-postgres
ok: down: postgres: 0s, normally up
ok: down: nginx: 3s, normally up
ok: down: postgres: 1s, normally up
ok: down: redis: 2s, normally up
ok: down: cron: 0s, normally up
ok: down: unicorn: 2s, normally up
ok: down: rsyslog: 0s, normally up
run-parts: executing /etc/runit/1.d/00-ensure-links
run-parts: executing /etc/runit/1.d/00-fix-var-logs
run-parts: executing /etc/runit/1.d/01-cleanup-web-pids
run-parts: executing /etc/runit/1.d/anacron
run-parts: executing /etc/runit/1.d/cleanup-pids
Cleaning stale PID files
run-parts: executing /etc/runit/1.d/copy-env
run-parts: executing /etc/runit/1.d/letsencrypt
[Tue 14 Sep 2021 10:54:00 PM UTC] Domains not changed.
[Tue 14 Sep 2021 10:54:00 PM UTC] Skip, Next renewal time is: Tue Oct 5 00:05:09 UTC 2021
[Tue 14 Sep 2021 10:54:00 PM UTC] Add '--force' to force to renew.
[Tue 14 Sep 2021 10:54:00 PM UTC] Installing key to:/shared/ssl/lot.almost-dead.net.key
[Tue 14 Sep 2021 10:54:01 PM UTC] Installing full chain to:/shared/ssl/lot.almost-dead.net.cer
[Tue 14 Sep 2021 10:54:01 PM UTC] Run reload cmd: sv reload nginx
fail: nginx: runsv not running
[Tue 14 Sep 2021 10:54:01 PM UTC] Reload error for :
[Tue 14 Sep 2021 10:54:01 PM UTC] Domains not changed.
[Tue 14 Sep 2021 10:54:01 PM UTC] Skip, Next renewal time is: Mon Oct 4 00:06:04 UTC 2021
[Tue 14 Sep 2021 10:54:01 PM UTC] Add '--force' to force to renew.
[Tue 14 Sep 2021 10:54:01 PM UTC] Installing key to:/shared/ssl/lot.almost-dead.net_ecc.key
[Tue 14 Sep 2021 10:54:01 PM UTC] Installing full chain to:/shared/ssl/lot.almost-dead.net_ecc.cer
[Tue 14 Sep 2021 10:54:01 PM UTC] Run reload cmd: sv reload nginx
fail: nginx: runsv not running
[Tue 14 Sep 2021 10:54:01 PM UTC] Reload error for :
Started runsvdir, PID is 539
ok: run: redis: (pid 549) 0s
ok: run: postgres: (pid 555) 0s
chgrp: invalid group: ‘syslog’
supervisor pid: 551 unicorn pid: 579
$
Benjamin_D
(Benjamin Decotte)
9월 14, 2021, 11:56오후
9
왜 그런지는 모르겠지만, 이 파일들이 누락된 건 아닐까요?
alxndr
(Alexander)
9월 14, 2021, 11:58오후
10
앱 안에서 그 파일들을 확인하고 있습니다…
root@adn-prod-app:/var/www/discourse# ls -l /shared/ssl/
total 24
-rw-r--r-- 1 root root 5950 Sep 14 22:54 lot.almost-dead.net.cer
-rw-r--r-- 1 root root 5329 Sep 14 22:54 lot.almost-dead.net_ecc.cer
-rw------- 1 root root 302 Sep 14 22:54 lot.almost-dead.net_ecc.key
-rw------- 1 root root 3243 Sep 14 22:54 lot.almost-dead.net.key
alxndr
(Alexander)
9월 18, 2021, 6:48오후
11
제 문제는 VM이 다른 IP 주소로 다시 기동된 것이었고, A 레코드를 새 주소로 수정해야 했습니다.
사이트가 다시 복구되었습니다. 들어주셔서 감사합니다!