app/views/layouts/에서 변경 사항을 어떻게 적용하나요?

간단한 질문 하나만 드리겠습니다.

분명 제가 무언가를 놓치고 있는 것 같습니다!

/var/www/discourse/app/views/layouts 디렉토리의 파일 중 하나에서 몇 가지 수정을 했습니다.

그런 다음 (바보처럼) /var/discourse/launcher rebuild app 명령으로 컨테이너를 다시 빌드하면 된다고 생각했습니다(그렇지 않습니다!). 하지만 이렇게 할 때마다 우리의 수정 사항이 덮어쓰기됩니다.

우리는 Discourse를 포크하고 싶지 않지만, 로컬 수정 사항이 덮어쓰기되지 않도록 launcher를 사용하여 앱을 다시 빌드하는 방법을 알고 싶습니다.

어떻게 해야 하는지 알려주시겠어요?

감사합니다!

재빌드 과정에서 앱에서 파일이 덮어쓰기되는 이유가 무엇이었는지 찾은 것 같습니다:

원인은 launcher가 기본 discourse 이미지를 pull하고, 그 이미지에 .git 디렉터리가 포함되어 있으며, git 설정 파일이 자연스럽게 master discourse 저장소를 가리키기 때문에 우리의 변경 사항이 덮어쓰기되는 것입니다:

launcher

pull_image() {
  # Add a single retry to work around dockerhub TLS errors
  $docker_path pull $image || $docker_path pull $image
}

우리는 launcher가 이미지를 빌드한다고 잘못 생각했습니다(그걸 어떻게 놓쳤을까요?!) 하지만 이제는 docker hub에서 기본 이미지를 pull한다는 것이 명확해졌습니다.

다시 처음부터 시작해야겠네요!

launcher가 기본 이미지를 pull하는 것을 막고 대신 빌드하도록 설정할 수 있는 플래그가 있을까요?

Hi @DBHacker

원하시는 작업은 다음과 같은 것일 수 있습니다:

  1. 기본 컨테이너에 변경 사항 적용 (앞서 언급하신 대로)
  2. 해당 이미지를 태그하고 저장
  3. 해당 이미지를 본인의 Docker 이미지 리포지토리에 푸시
  4. launcher를 수정하여, 본인의 리포지토리에서 수정된 기본 이미지를 docker pull로 가져오도록 설정

이 답변이 조금이나마 도움이 되길 바랍니다.

어쨌든, 이는 Meta에서 공식적으로 지원되지 않습니다(적어도 제 생각에는요). 따라서 모든 것은 본인의 책임 하에 진행하셔야 합니다.

즐거운 해킹 되세요! :slight_smile:

참고: 저는 이 방법을 직접 시도해 보지는 않았습니다… 하지만 재미있게 진행되고 계신 것 같네요! :slight_smile:

이 변경 사항은 플러그인이나 테마 컴포넌트에서 수행해야 합니다.

Hi @pfaffman

플러그인과 테마 컴포넌트가 최선의 방법이라는 데 전적으로 동의합니다! 해당 방식은 완전히 지원되며, 메타 개발 팀과 동기화를 유지하는 데에도 좋습니다.

호기심을 갖고 가능성을 탐구하며 Discourse에 대한 이해를 더 깊이 갖추는 것도 좋은 일입니다. 그리고 어제 이 토픽을 읽은 후, 로컬 Docker 레지스트리를 만들고, Discourse 베이스 이미지를 로컬에 태그한 뒤, 새 Docker 레지스트리(localhost)로 해당 이미지를 push하고, 베이스 Discourse 이미지 레지스트리를 가져와 Discourse 앱을 다시 빌드해 보았습니다.

Discourse에 대해 더 많은 것을 실험하고 배우는 것은 재미있다고 생각하며, 이 시스템 관리자로서의 탐구/실험을 통해 많은 것을 배웠습니다. 물론 프로덕션 애플리케이션을 실행하는 방식은 아닙니다만, Discourse 베이스 이미지를 원격으로 가져오는 대신 localhost에서 가져오는 데 필요한 단계를 거치면서 많은 것을 배웠고, 의외로 쉽게 할 수 있었습니다. 그래서 호기심 많은 다른 시스템 관리자들과 공유하기 위해 이 실험을 정리해 보았습니다:

다른 시스템 관리자 탐구자들이 이 실험에서 조금이라도 도움이 되길 바랍니다.

호기심을 유지하세요

이미지나 플러그인 작성에 대해 걱정하지 않고 이를 구현하는 매우 간단한 방법이 있습니다. 기존 플랫 파일만 수정하는 경우라면 app.yml에서 이를 수정할 수 있습니다.

hooks와 pups를 검색해 보세요. 이미 여러 가이드에서 이 방법을 사용하고 있습니다.

@neounix 감사합니다.

저도 새로운 것을 배우고 시도하는 걸 좋아해요.

언젠가 시간이 나면 Docker와 로컬 레지스트리에 대해 더 알아볼 계획이에요.

지금은 Discourse에서 지원하고 Discourse 개발 모델에 잘 맞는 플러그인 개발에 집중할 생각이에요.

말씀하신 대로 이런 것들을 배우는 건 재미있지만, 주류에 남아 있는 것도 좋은 것 같아요!

:slight_smile:

동의합니다.

로컬 Docker 레지스트리와 로컬 Discourse 베이스 이미지를 실험해 보았지만, 일관된 결과를 얻지 못했습니다(왜 그런지 모르겠지만, 설정에서 중요한 세부 사항을 놓치고 있는 것 같습니다).

반면, 로컬 Docker 레지스트리에 대해 더 많이 배우고, 하나를 구축하고 관리하는 방법을 알게 되었습니다.

그저 부수적인 Docker 실험이었을 뿐이지만… 분명히 많은 것을 배웠습니다!

네, 유일한 실행 가능한 옵션은 플러그인인 것 같습니다.

답변과 도움 주신 모든 분께 감사합니다.

어떤 종류의 파일 변경을 하고 계신가요?