Community supported official docker image

Awesome! I’ve bookmarked this post, and if anybody asks how to run Discourse in Kubernetes or Swarm, I’ll be sure to point them at your images :+1:. Advantage of being not-an-employee: my word doesn’t have to carry the weight of being Official™.

They, on the other hand, benefit immensely from having One Official™️ Way of deploying Discourse. CDCK is not going to take on the load of maintaining a deployment system that they themselves don’t use and is massive overkill for most self-hosters. And if they don’t maintain it, they ain’t endorsing it. Brand protection demands it.

Thanks for creating this thread @pierreozoux!

I recently reached critical appreciation for discourse and got interested in hosting a deployment. I’m currently hosting JupyterHub, GitLab and Mattermost - everything through Helm charts and would very much like to do the same with Discourse.

Some background about Helm / Kubernetes:
A Helm chart is a set of configurable Kubernetes resources, and Kubernetes resources are for example a Deployment Kubernetes resource that makes a given docker image run at all time. Installing something can end up becoming a single line command + some configuration.

I would be happy to at least review code and make some PRs to fix various things in a Helm chart for discourse if it would be developed. I’m currently a maintainer of JupyterHub’s Helm chart and have various contributions to other charts.

I think it’s actually possible / feasible to break up Discourse into a set of kube pods, but have fun sizing the resource requirements for the web and sidekiq runners :slight_smile:

If insane levels of infrastructure failure tolerance is not a business requirement for you, just use the singleton fat container, it’s going to be order of magnitude cheaper & easier for the same level of steady state service.

여러분 안녕하세요!

저는 Discourse를 포럼 도구로 사용하는 이탈리아의 상당히 큰 커뮤니티에서 왔습니다.
우리는 Discourse를 매우 좋아하지만, 일종의 “표준” 절차에 따라 Kubernetes에 배포하는 데 몇 가지 어려움도 관찰했습니다.

유지보수 담당자들의 고충을 잘 이해합니다 :slight_smile: 저는 수년 동안 Open Networking Foundation에서 근무했으며, 가장 큰 과제 중 하나는 가장 큰 플랫폼 중 하나인 CORD를 스크립트 기반 설치 방식에서 Dockerfile/docker-compose 및 DockerHub에 호스팅된 Docker 이미지 + helm-charts 방식으로 전환하는 것이었습니다. 이 과정에서 상당한 두려움이 따르며, 모든 경우에 적합한 단일 솔루션이 실제로 존재하지는 않지만, 첫 배포부터 그 이점을 확실히 확인할 수 있었습니다.

보통 가장 큰 걸림돌은 기존 도구가 가장 잘할 수 있는 일을 맡기도록 마인드셋을 전환하는 것입니다. :slight_smile: Docker에는 표준적이고 쉽고 이미 잘 문서화된 설치 절차가 있습니다. 반면 스크립트는 커스텀 요소가 많아 종종 맞춤화와 유지보수가 필요합니다.
또한 Discourse의 종속성(예: unicorn, postgres, redis 등)으로 원래의 Docker 이미지/helm-charts를 사용할 수 없는 데에는 정말 이유가 없습니다.

우선 기본 사항을 해결하는 것을 제안합니다(예: 각 컴포넌트에 대해 Dockerfile, docker-compose, 그리고 DockerHub 자동 빌드를 갖추는 것). 이것이 완료된 후(적절한 소프트웨어 및 문서 수정과 함께), helm-charts 개발은 가장 쉬운 부분입니다.

제안된 솔루션들의 장단점을 논의하기 위해 함께 통화하는 것까지 포함하여, 도움을 드릴 수 있다면 매우 기쁩니다.

간단한 조사 과정에서, Docker 분야에서 매우 유명한 Bitnami가 몇 가지 이미지를 내놓았다는 것도 알게 되었습니다(https://github.com/bitnami/bitnami-docker-discourse#how-to-use-this-image). 이것이 그들이 단독으로 진행한 별도의 작업인지, 아니면 여러분과 조율된 것인지를 궁금해했습니다. 이는 매우 좋은 출발점이 될 수 있습니다. 만약 그들과의 파트너십이 없었다면, 이를 가능한 방향으로 제안하고 싶습니다. 무료일지는 확실하지 않지만, 가능성이 있을 수 있습니다.
참고로, 수행된 작업에 대해 더 자세히 알아보기 위해 그들의 저장소에 이슈를 열었습니다(https://github.com/bitnami/bitnami-docker-discourse/issues/132).

여러분의 생각을 듣고, 제가 어떻게 도움을 드릴 수 있는지 알려주세요.

안녕하세요 @Luca_Prete, 위에 있는 @pierreozoux님의 작업과 팀의 답변을 확인해 보셨나요?

대부분의 Docker 패키징 작업은 launcher가 백그라운드에서 수행하는 pups의 동작과 일치시키는 것이며, 여기에는 Postgres, Sidekiq 등에 대한 일부 사용자 지정 구성 설정이 포함됩니다. @unteem은 Discourse의 이전 버전에서 pups가 수행한 과정을 따라가며 자신의 필요를 충족시켰습니다. 공식 릴리스와 Docker 이미지를 최신 상태로 유지하는 것은 어려운 일입니다. 전체 과정을 표준 Docker 방식으로 풀어 보고 그 경로를 따라가 보는 것은 흥미로울 것입니다. 표준 설정을 사용할 수 있는 실행 가능한 경로가 있다면, 여기 있는 많은 분들이 매우 기뻐할 것이라 생각합니다.

@hellekin 감사합니다.

아직 해본 적이 없습니다. 분명히 많은 부분이 있을 거라고 생각하지만, 개인적으로 작업에서는 단일 사용자(커뮤니티 지원과 대조적으로) 기반의 작업을 피하는 편입니다. 나중에 유지보수가 어려워질 수 있다는 단순한 이유 때문입니다.

구체적인 경로는 플랫폼의 세부 사항에 따라 달라집니다.

저의 관점에서 당신의 경우에 가능한 해결책은, 특정 커스터마이징 없이 표준 이미지(Postgres, Redis, …)가 Discourse와 어떻게 작동하는지 이해하는 것부터 시작하는 것입니다. 이 부분이 중요하다고 생각하는 이유는, Discourse를 설치하는 어디에서든 외부의 표준 서비스(물리 하드웨어, VM, 컨테이너, k8s의 차트 의존성 형태로 설치 가능)에 의존할 수 있게 해주기 때문입니다.
이러한 각 서비스는 일반적으로 db 생성 등을 위해 시작 스크립트를 사용할 수 있게 허용합니다… 그렇게 어렵지 않을 것입니다.

그 다음으로 적절한 Dockerfile을 생성하겠습니다. (이것은 자동으로 Docker 없이 Discourse를 설치하기를 원하는 사용자를 위한 빠른 시작 가이드가 됩니다.)

그리고 docker-compose.yaml이 이어집니다. (이것은 bitnami가 자신의 github에 공개하는 것과 거의 동일합니다.)

이 시점에는 커스텀 스크립트 없이, 표준 의존성 이미지를 사용하여, 몇 초 만에, 하나의 명령어로, “마이크로” 서비스 형태로 노트북에서 Discourse를 띄울 수 있어야 합니다.

마지막으로, 하지만 가장 중요하지 않은 것은 아닙니다. Kubernetes 관련 작업이 있습니다. (몇 개의 yaml 파일, 아마도 helm-charts 형태로 패키징될 것입니다) 이는 공식 안정 버전 저장소에 게시되거나, 아니면 최소한 프로세스의 초기 단계에서는 자체 호스팅된 저장소에 게시될 것입니다.

@unteem은 혼자가 아닙니다 :slight_smile: 우리는 함께 일하고 있습니다.
여러 개의 Discourse 인스턴스를 호스팅하기 때문에 이렇게 하고 있습니다.
Docker로 시작했고, 지금은 Kubernetes를 사용하고 있습니다.

우리의 작업은 https://lab.libreho.st/ (커뮤니티 노력의 일환이며, @hellekin도 이에 참여하고 있습니다) 아래로 이동했습니다. 앞으로 몇 주/몇 달 내에 우리의 작업을 더 많이 홍보할 계획입니다.

이것을 유지보수하는 것은 정말 고역입니다… 빌드를 수정한 이 커밋에 저는 정말로 수 시간, 어쩌면 며칠을 보냈습니다:
https://lab.libreho.st/libre.sh/docker/discourse/commit/27160ed54871ff3d987332fbcb47a4785d9fcca3

어쨌든, 우리는 실제로 Kubernetes 오퍼레이터 작업에 집중하고 있습니다. Nextcloud로 시작했고, 그 다음 RocketChat이었으며, 다음은 아마도 Discourse가 될 것입니다.

그동안 우리가 사용하는 도커 이미지 코드는 여기서 찾을 수 있습니다:
https://lab.libreho.st/libre.sh/docker/discourse
https://lab.libreho.st/libre.sh/docker/discourse-web

이미지 자체는 여기에 있습니다:

보시는 것처럼 최근 꽤 시간을 들여 작업해 왔습니다. 그래서 태그와 파이프라인이 있습니다. 주간 빌드를 위해 자동화를 추가해야 합니다.

거기에 Helm 차트가 있습니다:
https://git.indie.host/indiehost/helm-discourse
하지만 보시는 것처럼 제대로 유지보수되고 있지는 않습니다.

제가 할 수 있는 말은, 우리에게 잘 작동한다는 것입니다 :slight_smile: 함께 나누고 모험을 감수할 마음이 있다면, 자유롭게 합류하세요 :slight_smile: 우리는 재미있게 일하고 있습니다 :slight_smile:

우리는 지원을 제공하지 않습니다. 시간이 부족해서입니다. 하지만 PR을 보내주시면 환영합니다. 정말로 공식 Discourse 우산 아래에서 이 작업을 수행할 수 있기를 바랍니다. 그렇게 하면 훨씬 쉬울 것입니다.
하지만 결국, 저는 Discourse 팀을 점점 이해하게 됩니다. 그들은 커뮤니티를 위해 지원하는 도구가 하나뿐이며, 그것이 잘 작동합니다. 기술적으로 숙련되지 않은 사용자에게도 좋은 지원을 제공하며, 이는 정말 좋습니다. 문제가 생기면 git pull && 재빌드하면 99%의 문제가 해결됩니다 :slight_smile: 다른 도구를 지원하는 것은 큰 위험이라는 것을 이해합니다. 제대로 지원되지 않거나 잘 수행되지 않으면 프로젝트에 어떤 식으로든 해를 끼칠 수 있습니다. 다시 한번, Discourse 팀의 힘든 노력에 감사드립니다 :slight_smile:
제 유일한 문제는 우리가 각자 자체 솔루션을 개발하는 경우가 많다는 것이며, 협업할 수 있는 유일한 방법은 여기서 업스트림으로 협업하는 것입니다.

실제로 한 가지 방법은 discourse_docker에 runit/anacron/nginx/postgres 없이 super_base라고 불리는 다른 이미지를 가지고, base가 super_base에 기반을 두도록 해서, 이를 우리의 k8s 배포에 재사용하는 것입니다. 이것이 작동할 것 같습니다 :slight_smile:

어떻게 생각하시나요?

Discourse는 Kubernetes를 사용하고 있나요? 궁금합니다 :slight_smile:

@pierreozoux 답변해 주셔서 감사합니다!

여러분이 정말 훌륭한 일을 하셨다고 생각합니다. 제 능력范围内에서 기여할 수 있다면 기꺼이 하겠습니다 :slight_smile:

또한 Bitnami 팀이 한 작업을 더 자세히 살펴볼 시간을 가졌습니다. 좋은 소식은 이미 컨테이너를 분리해 놓았다는 점입니다. 혹시 그 부분을 살펴보셨나요? 어떻게 생각하시나요?

웹 컨테이너와 sidekiq 컨테이너 양쪽에 사용된 Dockerfile은 다음과 같습니다: bitnami/discourse Dockerfile

docker-compose에 대한 링크는 붙여넣을 수 없지만, 스레드에서 이전 게시물에 추가한 링크를 따라가면 쉽게 찾으실 수 있습니다.

같은 저장소에는 kubernetes yaml 파일도 있습니다: https://github.com/bitnami/bitnami-docker-discourse/blob/master/test.yaml

Docker 이미지부터 시작해서 어떤 문제가 보이나요? 소프트웨어가 충분히 "업데이트"되었나요?

빠진 것 같아 보이는 것은 helm-chart입니다. 이는 stable charts에 적용된 모범 사례를 따라 작성되어야 합니다.

여러분은 어떻게 생각하시나요? 노력을 합쳐서 여러분의 파일을 그들의 작업에 통합하는 것이 가치가 있을까요?

이는 DEV: Bump uglifyjs · discourse/discourse_docker@c87937d · GitHub 에서 이루어진 변경 사항과 정확히 동일합니다. 이미지를 포크하고 있다면, 해당 리포지토리의 변경 사항을 동시에 업스트림으로 보내는 것도 고려해 볼 수 있습니다.

이것이 바로 우리가 현 상태를 유지하는 주요 동기입니다.

내부에서 사용하지 않는 것을 추가하는 것은 곧 그것이 깨지고 곧바로 비추천(deprecated) 상태가 되어, 이를 의존하고 있던 모든 사람에게 더 큰 고통을 초래한다는 것을 의미합니다. 프로젝트에서 이러한 사례가 여러 번 있었습니다.

커뮤니티가 이 작업을 진행하기를 원한다면 그것은 괜찮습니다.

아니요, 우리는 k8s를 사용하지 않습니다.

그냥 따라잡아야 할 의존성이 꽤 많다는 점이 문제입니다.

사람들이 정기적으로 여기에 포스트를 올리며, 그것들이 여기저기서 제대로 작동하지 않는다고 합니다.

제가 해온 일은 launcher를 사용해 이미지를 빌드한 후, 그 이미지를 리포지토리에 푸시하고 kubernetes로 배포하는 것입니다. 그리고 제로 다운타임 업그레이드도 스크립트로 만들어두었습니다. 제가 설정해준 클라이언트들에게는 이 정도가 과도한 투자(overkill)에 가깝습니다. 저는 (거의) 표준적인 설정(traefik이 여러 사이트를 리버스 프록시하는 것만 추가했을 뿐)으로 일반 하드웨어에서 월 300만 페이지뷰를 호스팅하고 있습니다.

다양한 플러그인 세트를 포함한 이미지 세트를 공개하는 것도 고려해봤지만, 문제는 그것들에 문제가 발생하면 여기서 지원을 받을 수 없다는 점입니다.

해당 주제에 대해 변경 사항이 있나요? Kubernetes 배포에 쉽게 사용할 수 있는 공식 Discourse 이미지가 있거나, 앞으로 나올 예정인가요?

그렇지 않습니다. 제가 사용하는 해결 방법은 새 이미지를 부트스트랩한 후 리포지토리에 푸시하고, 그 다음에 시작하며, 새 포드가 시작되면 업그레이드 후 마이그레이션을 수행하는 것입니다.

업데이트 소식 있나요? 여전히 Kubernetes에 Discourse를 설치하기 위한 공식 Helm Chart가 없나요?

네, 없습니다. 그리고 우리 로드맵에도 해당 사항이 없습니다.

상세한 배경은 Can Discourse ship frequent Docker images that do not need to be bootstrapped? 를 참고하세요.

이러한 오퍼를 제공하는 것을 고려해 보고 있습니다(물론 ‘공식적인’ 것은 아닙니다). 하지만 여기에서 추가적인 지원 문제를 일으키지 않도록 해야 하고, 유지보수와 지원을 위해 들이는 시간에 대한 보상을 받아야 합니다. 이 두 가지 문제를 어떻게 해결해야 할지 잘 모르겠지만, 예산이 있으시다면 편하게 연락 주십시오.

몇 달 전부터 우리는 자체 Docker 이미지를 사용하여 Helm로 Discourse를 성공적으로 호스팅하고 있습니다.
(이전에도 Compose와 함께 자체 이미지를 사용했습니다.)

S3/Minio 지원도 가능합니다.

https://forge.liiib.re/indiehost/tech/infrastructure/charts/-/tree/master/discourse
https://lab.libreho.st/libre.sh/docker/discourse/

(하지만 문서화가 부족하고, 계정 생성 및 기여를 위한 "개방성"도 다소欠缺합니다.
여기서나 개인 메시지로 수요가 있다면, 기꺼이 개방하겠습니다 :slight_smile: )

@pfaffman 님, 시간을 지원해 줄 의향이 있는 분들을 찾아주시면, 우리는 기꺼이 협력하겠습니다!

우리는 주로 프랑스의 작은 커뮤니티들을 위해 Discourse를 호스팅하고 있으며, 이들은 'common movement’의 일부입니다.
(가장 규모가 큰 프로 보노 호스팅 사이트는 https://forum.chatons.org/ 입니다.)