사이트 다운 - 앱이 시작되지 않음, 포트 443 충돌?

표준 설치 지침에 따라 Ubuntu 18.04 VPS에 Discourse를 설치했습니다. 2년가량 잘 작동해 왔는데, 오늘 오후에 사이트를 접속해보니 TLS 인증서가 만료되어 있었습니다. HSTS를 사용하고 있기 때문에 사이트 접근이 완전히 차단된 상태였습니다. 별일 아니겠거니 생각하여 SSH로 서버에 접속하고 업데이트를 설치한 뒤(그냥 습관적으로) ./launcher rebuild app을 실행하면 해결될 줄 알았습니다.

하지만 상황이 그렇게 흘러가지는 않았습니다. “oops” 페이지가 표시되었습니다. 그래서 시스템을 재부팅했는데, 이제 사이트를 브라우저로 접속하려고 하면 502 페이지가 나타납니다. app을 시작할 수 없습니다:

root@talk:/var/discourse# ./launcher start app
x86_64 arch detected.

starting up existing container
+ /usr/bin/docker start app
Error response from daemon: driver failed programming external connectivity on endpoint app (e5db356e19c947c3e1e20a337aea7ee4bdcfa9bc5f3eac485e76439f3ed3a0e9): Bind for 0.0.0.0:443 failed: port is already allocated
Error: failed to start containers: app

…그리고 실제로 포트 443에서 무언가가 리스닝 중입니다:

root@talk:/var/discourse# netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      906/docker-proxy    
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      427/systemd-resolve 
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      918/docker-proxy    
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      892/docker-proxy    
tcp6       0      0 :::9936                 :::*                    LISTEN      578/sshd            
udp        0      0 127.0.0.53:53           0.0.0.0:*                           427/systemd-resolve 

어떻게 해야 할지 막막합니다. 다음으로 무엇을 확인해야 할까요?

재빌드를 한 지 오래되었나요? 에러가 있었나요? PostgreSQL 업그레이드에 대한 메시지가 표시되었나요? 다시 재빌드해 보세요.

확인해 볼 수 있는 또 다른 사항은 다른 Discourse 컨테이너가 실행 중인지 여부입니다. 예를 들어 import 컨테이너가 실행 중인지 확인해 보세요. 다음 명령어를 실행한 후, 추가 컨테이너가 있다면 status 및 ports 열을 확인하면 알 수 있습니다:

docker container ls

사이트를 최신 상태로 유지하고 있습니다. 이전에는 postgres 업그레이드가 있었고 그때 처리했습니다. 이번에는 관련 내용을 본 기억이 없지만, 재빌드를 다시 실행하는 것은 쉬운 일입니다. 그런데 그 과정에서 다음 내용을 보았습니다:

…사실 import 컨테이너가 실행 중이었습니다. 그래서 그것을 중지했고, 재빌드가 완료된 후 사이트가 다시 정상 작동했습니다.

또한 Let’s Encrypt 인증서가 갱신되었습니다(오늘 여러 개가 발급된 것 같아 다소 번거롭긴 했지만), 이제 모든 것이 정상으로 돌아왔습니다. 빠른 답변 감사합니다.

그렇다면 다음을 실행하세요.

  ./launcher destroy import