Discourse 개발 과정 이해에 대한 문제

여러분 안녕하세요.

저는 로컬 컴퓨터에 Discourse를 설치했는데,

http://localhost:4200/

에서 이 가이드에 따라 설치했습니다. 여기서 저는 Discourse, 테마 및 플러그인을 개발하고 있습니다.
또한 이 가이드에 따라 Docker를 사용하여 가상 머신에도 Discourse를 설치해 두었습니다.
두 설치 환경 모두 훌륭하게 작동하고 있습니다.

하지만 Docker가 무엇인지, 그리고 왜 가상 머신에 있는 파일들이 로컬 컴퓨터의 파일과 다른지 이해가 되지 않습니다.

d/shutdown_dev 명령을 사용하여 가상 머신에서 Docker를 중지하면 어떤 일이 발생합니까?

Git을 사용하여 이 두 설치 환경을 어떻게 동기화할 수 있을까요?

로컬 머신에 Docker를 설치할 수 있으며, 그렇게 하면 어떤 용도로 사용할 수 있습니까?

이 질문들에 대해 이해할 수 있도록 도와주세요.

흐름을 설명해 드리겠습니다:

  1. 코드베이스(/discourse 내부)에서 작업합니다.
  2. 코드베이스를 Docker 컨테이너로 컴파일합니다.
  3. 해당 Docker 컨테이너를 프로덕션 서버에 배포합니다.

로컬에서 Docker를 실행하는 용도의 예는, 프로덕션 서버에 배포하기 전에 새로 컴파일된 Docker 컨테이너를 테스트하는 것입니다.

플러그인 및 테마 컴포넌트 개발의 거의 모든 측면에서 Docker의 유무는 사실상 무관합니다. 이는 별개의 문제입니다. 저는 개발 환경에서 Docker 인스턴스를 실행하지 않습니다.

Discourse용 애드온을 개발할 때, 오픈소스인 경우 애드온이 최종적으로 배포될 대부분의 인스턴스에 대해 통제가 불가능하므로, 개발 인스턴스와 프로덕션 인스턴스의 정확한 버전이나 구성에 집착할 필요가 없습니다. 가장 중요한 것은 Discourse 코어 내부의 변경 사항에 대해 애드온이 더 견고하도록 좋은 개발 관행을 따르는 것입니다. 오직 자신의 Discourse 인스턴스만을 위해 개발하는 경우에도 Discourse 코어의 변경 사항에 대한 통제는 없으므로 동일한 접근 방식이 적용됩니다.

약간의 버전 차이는 일반적으로 플러그인이나 테마 컴포넌트의 실패를 일으키지 않아야 합니다. 그럴 수는 있지만 일관되지는 않습니다. 제 플러그인과 TC(테마 컴포넌트)는 수개월 동안 변경 없이 작동하며, 수개월 간격의 코어 커밋에서도 문제가 없습니다.

플러그인 변경 사항(수정 또는 기능 추가)을 작업할 때는 깨지는 변경 사항(breaking changes)을 한 번에 처리할 수 있도록 개발 인스턴스를 최신 마스터로 업데이트하는 것이 일반적입니다. 이는 git pull, bundle install 및 db:migrate 실행으로 간단히 수행할 수 있습니다.

프로덕션 인스턴스는 프론트엔드 또는 커맨드 라인 재빌드를 통해 업데이트하면 됩니다.

제 조언은 플러그인을 공개적으로 배포하여 사용자를 유치하고, 경험을 통해 시행착오를 겪으며 배우라는 것입니다. 너무 미루지 마세요: 바로 실행하세요! 실수를 두려워하지 마세요. 실수는 배우는 데 도움이 되니까요.

답변 주셔서 정말 감사합니다.
제가 개발을 시도해 보겠습니다.
즉, app.yaml 파일에서 "git clone /github…docker"를 삭제해도 되는 건가요?
그리고 다시 빌드하면 되는 건가요?

이런 질문은 Docker 개발 주제에서 하는 것이 좋습니다. 지금은 특별한 이유가 없는 한, Docker 개발을 유지 관리하기 위해 기본으로 제공되는 스크립트를 변경하지 않는 것이 좋습니다. 이 스크립트들은 사용자를 돕기 위해 존재할 가능성이 높습니다.

네, 잘 이해했습니다. 감사합니다.