elopio
(Leo Arias)
1
안녕하세요,
./launcher rebuild app 명령을 실행했는데 겉으로 보기에는 오류가 없었습니다. 하지만 사이트를 열려고 하면 502 오류가 발생합니다.
nginx 오류 로그(shared/standalone/log/var-log/nginx/error.log)에는 다음과 같은 내용이 표시됩니다:
2020/08/12 05:47:43 [error] 653#653: *7 connect() failed (111: Connection refused) while connecting to upstream, client: [...], server: _, request: "GET / HTTP/2.0", upstream: "http://127.0.0.1:3000/", host: "[...]"
discourse와 nginx 502 오류에 대해 찾은 모든 게시물을 확인해 보았지만, 제 상황에 적용할 수 있거나 이해할 만한 내용을 찾지 못했습니다.
이것이 관련이 있을 수 있는데, 컨테이너에서 실행한 결과입니다:
# netstat -plant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 644/nginx: master p
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 644/nginx: master p
tcp6 0 0 :::6379 :::* LISTEN -
tcp6 0 0 :::5432 :::* LISTEN -
포트 3000에서 실행되어야 할 것이 있나요?
이 문제를 디버깅하기 위해 어디를 확인해야 하는지 알려 주실 수 있을까요?
pura vida 
컨테이너 내부의 서비스가 시작되는 동안 처음에는 502 오류가 표시됩니다. 30초 이내에 사라져야 합니다. 사라지지 않는 경우, 서버 CPU에 극심한 부하가 걸려 지연이 발생하는 것일 수 있습니다.
elopio
(Leo Arias)
3
감사합니다 @itsbhanusharma.
./launcher restart app를 실행하고 top으로 부하를 모니터링했는데, 10%를 훨씬 밑돌고 있습니다.
CPU가 부하를 처리하기에 충분할 것 같습니다:
$ cat /proc/cpuinfo | grep 'name' | uniq
model name : Intel(R) Xeon(R) CPU E5-1650 v3 @ 3.50GHz
$ cat /proc/cpuinfo | grep process | wc -l
4
컨테이너의 시작 과정을 디버깅하는 더 나은 방법이 있을까요?
다른 아이디어가 있으신가요?
Stephen
(Stephen)
4
어떤 플러그인이 설치되어 있나요? 이 서버가 SSD를 사용하고 있나요?
elopio
(Leo Arias)
5
저장소를 클론하고 설정 명령어를 실행했으니, 기본적으로 포함된 플러그인만 있는 것 같습니다. 어디에서 확인해야 하는지 잘 모르겠지만, 제가 직접 추가한 플러그인은 없다고 확신합니다.
서버는 SSD가 아닙니다.
neounix
(Dark Matter)
6
안녕하세요 @elopio
민감한 정보가 없는 ‘yml’ 파일을 공유해 주실 수 있을까요?
elopio
(Leo Arias)
7
Stephen
(Stephen)
8
Discourse에는 SSD가 필요하며, 일반적인 회전 디스크는 충분한 IOPS를 제공하지 못합니다.
elopio
(Leo Arias)
9
그것이 502 오류의 원인인가요? 아니면 SSD가 없으면 웹사이트가 동작은 하지만 매우 느리게 표시되는 걸로 봐야 하나요?
neounix
(Dark Matter)
10
전통적인 하드 드라이브와 SSD 드라이브를 사용하는 것은 502 오류의 원인이 될 수 없습니다. @elopio 님의 질문에서 보듯, 이는 설득력이 부족합니다.
아래에 도움이 될 수 있는 짧은 설명을 첨부합니다:
제 생각에 가장 좋은 방법은 터미널을 열고 Rails와 nginx 로그 파일(오류 로그 및 액세스 로그 포함) 모두에 대해 tail -f 명령을 실행하는 것입니다. 그런 다음 사이트를 접근하여 502 오류가 발생했을 때 로그 파일의 끝부분을 주시하고 있는지 확인하세요.
해당 로그 파일이 어디에 위치해 있는지, 터미널에서 tail -f 명령을 실행하는 방법을 알고 계신가요?
참고로, 이전에 다음과 같이 질문하셨었죠:
Rails는 Docker 컨테이너 내부에서 포트 3000에서 실행되며, 해당 포트는 컨테이너 외부로 노출되지 않습니다. 따라서 컨테이너 외부에서 netstat를 실행할 때 포트 3000이 보이지 않는 이유입니다.
도움이 되셨길 바랍니다.
Stephen
(Stephen)
11
경험을 말씀드리자면, 느린 I/O는 실제로 타임아웃과 502 오류를 유발할 수 있습니다.
SSD 수준의 IOPS는 필수 요건입니다.
elopio
(Leo Arias)
12
우와, 레일스 로그를 살펴보니 유니콘 로그가 엄청나게 컸고, 몇 가지 권한 오류에 대한 경고가 있었어요. rm -rf tmp/cache/bootsnap-compile-cache/를 실행해서 삭제했는데, 이제 축하 화면이 나타났어요!!!
친구들, 고마워요. SSD 서버로 다시 만들지 결정하기 전에 조금 더 이걸로 놀아볼게요.
neounix
(Dark Matter)
13
@elopio 님, 뭘요.
로그에서 문제를 찾아내고 해결하신 것을 기쁘게 생각합니다. 잘하셨습니다.
앞으로도 순풍이 따르시길 바랍니다!
elopio
(Leo Arias)
14
음, 이게 정말 잘 작동하고 있어요. 우리가 하고 있는 일을 보여드릴게요:
https://bunqueer.jaquerespeis.org/
코스타리카 해커스페이스를 텔레그램에서 디스커스로 이관하는 작업이에요
아직 해야 할 일이 정말 많지만, 이번에는 채팅을 확실히 없앨 수 있을 거라고 확신해요. 디스커스 팀 여러분, 정말 감사합니다!