Jekyll 사이트를 위한 CMS로 Discourse 사용

저는 Discourse와 Jekyll 모두를 많이 사용하는 사용자입니다. 최근에는 Discourse 인스턴스를 Jekyll 정적 사이트의 콘텐츠 관리 시스템(CMS)으로 활용하는 실험을 해보고 있습니다. 아직 막 시작한 단계이고, 이 시점에 글을 올리는 이유 중 하나는 다른 분들도 이미 이 작업을 하거나 비슷한 시도를 해보셨는지 확인해보고 싶어서입니다. 혹은 더 나은 방법이 있으시다면, 이 작업을 시도하는 시간을 아끼도록 조언해 주셔도 좋습니다 :grin:

제 구상

  • 마크다운 콘텐츠는 Discourse 인스턴스에서 편집됩니다(비기술 사용자에게 편집을 위한 좋은 UI를 제공하며), 쉽게 재편집하거나 업데이트할 수 있습니다. 포맷팅 툴바와 기타 편의 기능이 비기술 사용자의 만족도를 크게 높여줍니다.

  • Jekyll 사이트에는 게시물 URL(또는 Discourse의 baseUrl이 항상 동일하다고 가정한다면 게시물 ID) 배열을 포함하는 YAML 파일이 있으며, 이 URL들을 대상으로 콘텐츠 폴링(polling)을 수행해야 합니다.

  • 간단한 Jekyll 플러그인이 각 URL에 대한 폴링 훅을 실행하여(Jekyll 서버가 재시작될 때마다?) 데이터를 GET 요청합니다. (많은 ‘공개’ Discourse 인스턴스의 경우 인증이 필요하지 않으며, 일부 상황에서는 API 키를 제공해야 할 수 있습니다)

  • JSON 콘텐츠는 URL 뒤에 .json을 추가하여 다운로드하며, 이 JSON 객체의 raw 키에는 이중 인용표로 감싸진 문자열 형태의 마크다운이 포함됩니다.

  • 마크다운에 Jekyll YAML 프론트 매터(front matter)를 추가해야 하며, 감싸고 있는 인용표 제거와 \n 줄바꿈 문자 치환과 같은 정리 작업이 필요합니다.

  • Jekyll은 이 전체 페이지를 HTML로 빌드하거나, {{include file | markdownify }}를 사용하여 다른 페이지에 포함할 수 있습니다.

왜 이렇게 해야 할까요?

  • 비기술 편집자나 유지보수 담당자가 정적 사이트를 업데이트하는 것이 훨씬 쉬워집니다.

  • 이미 Discourse를 보유하고 있고 비즈니스용 정적 웹사이트를 만들고자 할 때 이상적입니다.

  • 정적 사이트는 저렴하고 안정적이며 안전합니다.

  • 왜 Page Publishing을 사용하지 않는가? 제가 Page Publishing을 시도해 본 결과, 페이지를 보기 좋게 만들기 위해 많은 작업이 필요해 보였습니다. Jekyll은 더 많은 제어권을 제공하며, 물론 Discourse로 관리되는 콘텐츠와 그렇지 않은 콘텐츠 소스를 혼합할 수 있게 해줍니다.

커뮤니티의 의견은 어떠신가요? 이 시도는 가치가 있을까요?

정말 추구해볼 가치가 있는 아이디어입니다. 다만 저는 편향되어 있을 수 있어요. 몇 년 전 취미 프로젝트로 비슷한 작업을 해본 적이 있거든요.

당시 목표는 큐레이션된 Discourse 콘텐츠로 Jekyll 사이트를 만드는 것뿐만 아니라, 이를 (epub 또는 pdf) 전자책으로도 출판할 수 있도록 하는 것이었습니다. (이것이 '왜 페이지 게시 기능을 쓰지 않느냐’는 질문에 대한 제 답입니다.)

저는 yml 파일과 포스트 URL 배열을 사용하는 거의 동일한 접근 방식을 따랐습니다. 이미지 처리도 했는데, upload:// 링크를 모두 가져와 디코딩하고, 이미지를 다운로드 및 리사이즈한 뒤 링크를 로컬 이미지 URL로 변경하는 파이썬 코드가 아직 남아 있습니다.

프로젝트를 완성하지는 못했지만, 이 일을 다시 이어가고 이미 만든 (소수의) 것들을 기여할 수 있다면 분명히 관심이 있을 것 같습니다.

감사합니다! 앞으로 몇 달 안에 시간을 내어 해볼 수 있을지 알아봐야겠습니다.

혹시 그 코드를 GitHub 저장소에 올려놓으신 게 있으신가요?

더 자세히 살펴보니 이미지 관련 코드만 남길 가치가 있는 것 같습니다. 코드 스타일(또는 그 부재)은 신경 쓰지 말아 주세요.
깃허브 지스트를 만들었습니다: retrieve images from a raw discourse post · GitHub

재미있네요. 제가 맡고 있는 클라이언트 중에는 태그를 이용해 사용자가 이력서를 생성할 수 있도록 비슷한 방식을 적용한 곳이 있습니다(다만 모두 Discourse 내에서 렌더링됩니다).

참고: https://meta.discourse.org/posts/1001736/raw

더 좋네요, 감사합니다!