우리는 이른바 ‘선도자의 불리함(First Mover Disadvantage)’을 겪었습니다
이 런처 스크립트는 docker-compose, docker-swarm, kubernetes 같은 것들이 존재하기도 전에 만들어졌고, 여전히 잘 작동합니다. 다른 시스템으로 전환할 만한 결정적인 이유가 없습니다. 이러한 시스템들이 가진 ‘장점’은 Discourse 셀프호스팅의 1위 사용자층인 클라우드 VPS 기반의 예산형 설치 환경에서는 장점이 되지 않기 때문입니다.
네, Discourse Docker 이미지를 저장소로 push하고, 아래 토론에서 언급된 것처럼 /var/discourse의 나머지 부분을 아카이브로 처리할 수 있습니다. 하지만 이는 효율적인 방법이 아니며 공식적으로 지원되지 않습니다. 최근 이 과정을 완전히 테스트해 보았습니다:
하지만 이 경우 bootstrap 단계는 프로덕션 머신에서 수행되어야 합니다. 제가 아는 한, 이는 컨테이너 레지스트리에 기본 이미지를 푸시하는 목적을 무색하게 만듭니다(이는 프로덕션에서 이미지를 bootstrap하지 않기 위한 의도였기 때문이며, DB 마이그레이션 단계나 유사한 작업을 실행하는 경우는 예외일 수 있습니다).
제가 호스팅하는 비(Discourse) 사이트에서는 보통 flyway를 사용하여 DB 마이그레이션을 실행하고, Redis 캐시 비우기 등 다른 작업도 수행하지만, 외부 서비스에 의존하는 업데이트(예: HTTPS 인증서 업데이트)나 코드베이스 변경(이미지 내에서 패키지, 라이브러리 등과 같이 정적으로 유지되는 것)과 같은 다른 집약적인 프로세스는 실행하지 않습니다. 인증서 업데이트는 첫 번째 경우를 제외하고는 cronjob으로 수행하면 됩니다. Discourse는 rake를 사용하는데 이는 문제가 없지만, gem 설치, 자산 생성, maxmind DB 업데이트 및 기타 서비스(예: 서비스가 다운되어 있거나 API가 변경되면 재빌드 단계가 깨질 수 있음. 이는 드물지만 발생할 수 있음)와 같은 다른 작업도 수행합니다.
물론 Discourse가 그렇게 해야 한다고 주장하는 것은 아닙니다. 하지만 CI 환경에서 이미지를 생성하고, 스테이징/프로덕션 서버에서 DB 마이그레이션 단계와 환경 변수 정의만 수행하는 방식이 제가 기대하는 바이며, WordPress, MediaWiki, RocketChat 등 다른 소프트웨어로는 쉽게 달성할 수 있습니다. Discourse는 포럼 소프트웨어 중 최고라고 생각하며(IMO), 그들이 그렇게 하는 데에는 좋은 이유가 있을 수 있지만, 현재로서는 재빌드 과정에서 문제가 발생하지 않기를 바라며 두통을 피하기 위해 표준 설치(또는 멀티컨테이너 설치)만 사용할 것입니다.
bootstrap은 스테이징 및 프로덕션 환경 모두에서 사용할 기본 이미지를 생성하기 위해 CI 환경이 아니라 프로덕션 환경에서 수행되어야 하는 것으로 보입니다. 게다가, **표준 설치가 아니라는 것은 큰 경고 신호(red flag)**이며, 소프트웨어가 업데이트를 받으면서 미래에 두통을 유발할 수 있습니다.