플러그인에 runit 서비스를 추가할 수 있나요?

안녕하세요, 플러그인에 runit 서비스를 추가할 수 있는지 궁금합니다. 만약 불가능하다면, 이런 문제를 해결하기 위한 전략에 대해 알려주시면 감사하겠습니다. 저는 discourse 옆에서 실행되어야 하는 장기 실행 C++ 프로그램이 있습니다. 이 프로그램은 자동으로 재시작되어야 하며 기본적으로 데몬처럼 동작해야 합니다. 감사합니다

app.yml에서 설정을 설치하고, rails에서 시스템 명령을 실행하여 확인 및 작업을 수행할 수 있습니다. 디스패처를 일반 작업(job)으로 감싸는 것도 가능합니다.

이 방법은 정말 번거롭습니다. 이상적으로는 모든 작업이 플러그인 내에서 이루어져야 합니다.
답변해 주셔서 감사합니다. :slight_smile: :+1:

템플릿이 도커 컴포즈와 유사하기 때문에, 이 패턴이 올바른 것 같습니다.

저는 이 방식으로 클론을 생성하고 Discourse Frotz 플러그인에서 간단한 frotz를 만들어 사용하고 있습니다. 매우 안정적입니다.

내가 작성한 플러그인에서 실행 시간이 긴 작업에 대해 jobs 인터페이스를 사용해, 완료하는 데 수 시간이 걸릴 수 있는 일부 Ansible 태스크를 실행했습니다.

하지만 해당 기능이 앱과 “인접(next to)”해 있다면 app.yml에 템플릿을 사용하는 것이 적절해 보입니다. “Discourse에 의해 시작된다(started by Discourse)”라면 job을 사용하는 것이 합리적입니다.

가능하지 않습니다. 컨테이너 내부에서 모든 플러그인 코드는 discourse 사용자로 실행됩니다. 해당 사용자는 (다시 강조하지만 컨테이너 내부에서) runit 서비스를 제어할 충분한 권한이 없습니다.

같은 하드웨어에서 다른 Docker 컨테이너로 프로세스를 실행하세요. 로컬 TCP 포트에서 리스닝하도록 설정해야 합니다. app.yaml의 env: 블록에 다른 서비스에 연결할 URL을 내보내야 합니다. 예를 들어:

env:
    CUSTOM_SERVICE_URL: 'localhost:5309'

플러그인이 ENV["CUSTOM_SERVICE_URL"]을 통해 연결 문자열을 찾도록 하세요.