Discourse를 위한 통합 오프라인/유지보수 상태 및 페이지 유틸리티 생성

현재 유지보수(단순 업데이트 제외)를 수행할 때 사이트를 오프라인으로 전환하거나 읽기 전용으로 설정하더라도, 방문자에게 현재 진행 중인 작업이나 시스템이 접근 불가능할 것으로 예상되는 시간을 알리는 방법이 없습니다.

여기에 소개된 Nginx 방법을 통해 오프라인 페이지를 이미 생성했습니다(여기와 여기의 단계를 참고하여 개선했습니다)만…

이런 다운타임 동안 방문자에게 상태 업데이트와 메시지를 전달할 수 있는 포괄적인 오프라인 모드가 있으면 좋겠습니다. 이를 통해 방문자의 기대치를 관리하고, 무슨 일이 일어나고 있는지 궁금해하는 것보다 상황에 대해 긍정적인 인식을 가질 수 있도록 도울 수 있습니다.


@jomaxro의 요청에 따라 이 분리를 촉발한 원본 코멘트를 기록으로 남깁니다:

여기서 실제로 필요한 것은 이 방법론을 통합하고, 시스템이 오프라인 및/또는 유지보수 모드일 동안 사용자에게 맞춤형 메시지를 전달할 수 있는 기능을 갖춘 통합 오프라인/유지보수 모드입니다.

이는 업그레이드 매니저에 통합될 수 있는 부분입니다(업그레이드 매니저를 "Discourse System Manager"로 이름 변경하고, 업그레이드, 로그, 프로세스, 백업을 이 영역에 모두 통합).

이로 인해 시스템이 더 견고해지고, 관리자 및 사용자 모두에게 더 친근하고 유용해질 것입니다.

6개의 좋아요

업그레이드를 위해 우리가 공식적으로 지원하는 플러그인인 Docker Manager는 어떤 다운타임도 발생시키지 않습니다. 이 플러그인은 이미 무중단 업그레이드를 지원하므로 변경이 필요하지 않아야 합니다. 이 #howto에서 다루는 문제는 커맨드 라인에서 수행되는 업그레이드(리빌드)에 관한 것입니다. 이러한 작업은 Ruby 버전이나 Postgres와 같은 기반 의존성을 업그레이드할 필요가 있을 때만, 즉 연간 몇 번 정도만 필요한 경우에만 수행됩니다.

Docker Manager와 같은 모든 Discourse 구성 요소는 리빌드 동안 중단되므로, Docker Manager가 이러한 업그레이드를 처리하도록 만드는 것은 불가능합니다. 따라서 이 토픽에서 제공하는 Nginx 프록시 솔루션과 같이 Discourse 외부의 솔루션이 필요합니다.

7개의 좋아요

음, 여기에는 Discourse의 특성과 더 통합된 다른 옵션들이 있을 것 같습니다. 이 개념을 바로 기각하기보다는, 특히 관리자가 어떤 이유로 사이트를 유지보수를 위해 중단해야 할 때를 고려하여 전반적인 경험을 개선하는 방법에 대해 이야기해 보죠.

떠오르는 아이디어 중 하나는 다음과 같습니다: OP(원글 작성자)가 제안한 Nginx 프록시 솔루션을 Docker 설정에 통합하여, 여기에서 제시된 것처럼 분리된 솔루션을 다루는 것 대신, Discourse 사용자/관리자 및 지원(이 포럼에서 여러분 같은 분들) 모두에게 더 예측 가능하고, 관리하기 쉬우며 일관된 환경을 만드는 것은 어떨까요?

1개의 좋아요

이 개념을 일축하려는 의도는 아니며, 단순히 Discourse 플러그인을 사용하여 이 문제를 해결하는 것은 작동하지 않는다는 점을 말씀드리고자 합니다. 이 논의는 적절한 토론을 위해 전용 Contribute > Feature 토픽으로 이동하겠습니다.

@mreach님, 원하시는 내용과 작동 방식을 자세히 설명하도록 OP를 수정해 주세요. 필요에 따라 제목도 자유롭게 수정해 주시면 됩니다.

1개의 좋아요

./launcher rebuild app 실행 중 장애를 최소화하려면 멀티 컨테이너 구성이 필요합니다.

이미 관련 문서가 작성되어 있습니다. 보다 복잡한 구성입니다.

단일 컨테이너 모드에서 launcher rebuild를 실행할 때 “오프라인” 페이지를 표시하려면, 컨테이너를 “사이트 오프라인” 전용 특수 컨테이너로 교체해야 합니다. 불가능한 일은 아니지만, 완벽하게 작동하려면 약 2주간의 엔지니어링 작업이 필요합니다. 컨테이너 재빌드가 매우 드물게 발생하고, 이미 장애 없는 재빌드 방법을 문서화해 두고 있으므로, 현재로서는 이 작업을 위한 비용을 감당하기 어렵다고 생각합니다.

9개의 좋아요

샘의 의견에 동의합니다. '사이트가 다운되었습니다’라는 페이지를 만들 수 있을 만큼의 여유가 있다면, 그 시간을 사이트가 다운되지 않도록 만드는 데 쓰는 것이 더 좋습니다. 하지만 Add an offline page to display when Discourse is rebuilding or starting up 을 참고하고 싶을 수도 있습니다.

두 컨테이너 방식의 설치 환경은 대부분의 경우 최소한의 다운타임으로 업그레이드를 가능하게 합니다. 다만 새로운 컨테이너를 빌드하는 과정에서 마이그레이션이 실행되어 현재 실행 중인 사이트가 충돌하는 경우가 있습니다. 이를 우회하는 방법이 있지만 꽤 복잡하며, 이러한 업데이트는 비교적 드물게 발생합니다.

또는 DNS를 다시 가리키거나(또는 Digital Ocean이 이를 어떻게 부르든, 탄력적 IP를 사용하거나) 웹 서버에 상태 메시지를 담아 두어 AWS에서 이를 어떻게 부르든 드롭렛(또는 해당 인스턴스)을 시작하는 방법도 있습니다.

2개의 좋아요

참고로 @jomaxro, 내 게시물을 이 새 주제로 분리하는 방법은 무엇이었나요? 어떤 단계를 따랐는지 궁금합니다. 이걸 알면 꽤 유용할 것 같은데… 표준 Discourse에서는 이런 방법론을 찾을 수 없거든요.

1개의 좋아요
5개의 좋아요

오, 좋네요. 해당 주제가 완료된 후 이 부분을 살펴보다 5번이나 놓치고 있었네요.

1개의 좋아요