서드파티 호스트 없이 플러그인을 설치하는 방법?

(참고로 @Heliosurge, 이건 전에 한 번 거론된 것 같은데요):

항상 그랬듯이, 주류와 반대되는 방향으로 흐르는 스레드에서는 항상 그렇듯, 이 주제가 이제 완전히 본론에서 벗어났다는 것은 명백합니다. 저는 테마 컴포넌트 사용 여부에 대해 논의할 의도조차 없지만, 그래도 모두에게 감사드립니다.

어떻게 주제에서 벗어났다는 건가요? 질문을 던졌고 사람들이 자신의 의견을 표명했을 뿐입니다. 제 생각에는 완전히 주제에 맞는 내용인데요?

원하는 구성을 구현하는 데 필요한 모든 정보를 이제 확보했나요?

OP의 의견이 점차 “OP가 원하는 것을 조롱하는” 방향으로 흘러갔다는 점에 대해 OP와 부분적으로 동의합니다.

이것은 더 이상 논쟁할 필요가 없다고 생각합니다. 따라서 이 주제에 대한 다른 해결책을 제시할 사람이 없다면, 제 생각에는 여기서 논의를 마무리할 수 있을 것 같습니다.

일부 게시글에 불필요한 공격성이 있다는 점에는 동의합니다.

홈 페이지에 버튼을 추가하는 것과 관련하여 TC(테마 구성 요소)를 언급한 것입니다. 이는 여러 구성 요소에서 이미 입증되었습니다. 보안 문제가 아니라면 TC가 가장 좋은 방법입니다.

저 역시 테마 및 테마 구성 요소에 대해 어떤 문제가 있는지 궁금합니다. 플러그인은 보안 문제나 TC로는 구현할 수 없는 것들, 예를 들어 핵심 기능의 동작 방식을 변경하는 것과 같은 용도로 더 적합합니다. 더 편하게 이야기하고 싶으시다면 친근한 PM(개인 메시지)으로 논의할 수 있습니다.

TC의 또 다른 장점은 필요할 때 사이트 웹 UI 내에서 코드를 편집할 수 있다는 것입니다.

플러그인 경로의 문제점은 공식 플러그인이 코어에 병합된 경우에도 플러그인과 discourse 자체를 업데이트하는 데 여전히 Git을 사용한다는 것입니다.

app.yml의 볼륨 지원 기능을 사용하여 호스트의 폴더를 컨테이너의 플러그인 폴더에 마운트할 수 있습니다.

원하는 방식으로 소스 코드를 보관 중인 위치에서 discourse/plugins 디렉터리로 복사할 수 있습니다. git clone을 원하지 않는다면 rsynccp -a를 사용할 수 있습니다. 원하는 방식으로 플러그인을 VM에 복사한 후, git clone이 수행하는 방식과 동일하도록 복사하는 명령어를 추가하세요.

이것이 분명히 이 상황에 맞는 올바른 답변입니다. 질문의 원래 전제를 존중하고 있기 때문입니다. 이 스레드는 긍정적이고 지지적인 커뮤니티의 모습을 보여준다는 측면에서 그다지 좋지는 않았습니다.

@Falco @pfaffman 감사합니다. 두 분의 답변 덕분에 의문이 해소되었습니다.

호스트 머신에서 로컬 플러그인을 Discourse에 로드하려는 분들에게 도움이 될 수 있도록 제 app.yml 설정을 여기에 공유합니다.

## The Docker container is stateless; all data is stored in /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log
  - volume:
      host: /var/discourse/plugins
      guest: /var/plugins

## Plugins go here
## see https://meta.discourse.org/t/19157 for details
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - cp -a /var/plugins/. $home/plugins/

제 설정에서는 모든 커스텀 플러그인을 호스트의 /var/discourse/plugins에 보관합니다.

마운트된 디렉토리는 컨테이너 내부에서 /var/plugins로 사용 가능하며, after_code 훅이 실행될 때 다음 명령:

cp -a /var/plugins/. $home/plugins/

을 통해 마운트된 모든 플러그인이 Discourse의 기본 플러그인 디렉터리($home/plugins, 보통 /var/www/discourse/plugins)로 복사됩니다.

이로써 git 기반 플러그인 설치나 제3자 호스팅 서비스에 의존하지 않고 호스트에서 직접 플러그인을 관리할 수 있습니다.

좋아요. 잘 해결되었다니 다행입니다!

복사 대신 플러그인에 대한 심볼릭 링크를 사용할 수도 있습니다. 그렇게 하면, 마이그레이션이나 에셋 컴파일이 필요하지 않은 일부 경우를 제외하고는 컨테이너를 재시작하는 것만으로 변경 사항이 적용될 수 있습니다.

안녕하세요, 마이그레이션과 DB 변경 사항을 어떻게 처리하시는지 궁금해서요.

이것들은 플러그인이 어떻게 설치되었는지에 관계없이 독립적으로 작동합니다. 플러그이가 존재하는 경우 마이그레이션은 자동으로 처리됩니다.

특이한 상황이 아닌 한 컨테이너를 재빌드합니다. 하지만 아래 명령을 실행할 수도 있습니다.

 rake db:migrate

또는 에셋을 사전 컴파일할 수도 있습니다. 특정 필요 사항이 있고 Rails에 익숙하지 않는 한 권장하지 않습니다.