하나씩을 웹으로 퍼블리싱하기
Table of Contents
1. 목표
[ ]org 파일들을 웹에서 볼 수 있도록 퍼블리싱하자[ ]내 개인 파일들은 제외하자
아래는 꼭 필요한 건 아니고 찬찬히 생각해볼 목표
- 용량 큰 정적 파일들을 다른 곳에 배포하기 (이미지 파일 등을 다른 스토리지 서비스에)
- CI/CD 도입하기
2. 로컬에서 org → HTML
org-publish를 이용하면 쉽게 org 파일을 HTML로 만들 수 있다. 다만 조금 설정이 필요하다. The Org Manual에 관련 내용이 잘 나와있다: Publishing (The Org Manual).
먼저 org-publish-project-alist 변수를 정의한다. alist는 association list, 즉 연관 리스트라는 뜻이다. lisp은 헷갈리게 모든 곳에 괄호()를 쓰기 때문에 알아먹기 힘들었다. 차라리 Clojure처럼 vector, list, map을 구분해서 썼으면 덜 헷갈렸을텐데.
;; 각각의 아이템은 아래와 같이 정의한다 ("project-name" :prop1 val1 :prop2 val2 ...) ;; '() 안에 각각의 아이템을 넣는다 '(("project1" :prop1 val1) │ ("project2" :prop1 val1))
setq를 이용해서 아래와 같이 변수에 연관 리스트를 할당한다. Doom Emacs를 쓰고 있어서 config.el에 after!를 이용하여 아래와 같이 정의하였다:
(after! org │ (setq org-publish-project-alist │ │ │ │ '(("hanassig" │ │ │ │ │ │;; 소스 파일이 있는 디렉토리 │ │ │ │ │ │:base-directory "~/Nextcloud/notes/notes/" │ │ │ │ │ │;; 내보낼 디렉토리 │ │ │ │ │ │:publishing-directory "~/Nextcloud/notes/dist/" │ │ │ │ │ │;; 대상 소스 파일의 확장자 │ │ │ │ │ │:base-extension "org" │ │ │ │ │ │;; 각 파일에 적용할 publish 함수. 나는 HTML로 내보낼 거니까 아래와 같이: │ │ │ │ │ │:publishing-function org-html-publish-to-html │ │ │ │ │ │;; 그 외의 옵션들 │ │ │ │ │ │:html-link-home "/" │ │ │ │ │ │:html-link-up "/"))))
org-publish-all을 쓰면 변수로 정의한 모든 프로젝트를 publish 할 수 있다. 연달아 쓰면 수정한 글만 다시 publish된다. 설정을 바꿨거나 혹은 다른 이유로 전체 글을 다시 내보내고 싶다면 SPC ;로 Eval을 켜고 (org-publish-all t)로 옵션을 줘서 실행하면 된다.
2.1. inline 마크업에 조사를 붙이고 싶어요
org는 다 좋은데 이상한 특징이 있다. ==나 // 같은 인라인 마크업은 바로 뒤에 글자가 붙으면 동작을 하지 않는다.
아래와 같이 쓰면 “예시”가 강조되지 않는다
이 텍스트는 *예시*입니다
아래와 같이 써야 “예시”가 강조된다.
이 텍스트는 *예시* 입니다
Emacs 안에서 편집할 때에는 아래와같이 org-emphasis-regexp-components 변수를 재정의하여 활용하고 있고, 잘 동작한다.
(after! org │ (setcar org-emphasis-regexp-components " \t('\"{[:multibyte:]") │ (setcar (nthcdr 1 org-emphasis-regexp-components) "[:multibyte:]- \t.,:!?;'\")}\\") │ (org-set-emph-re 'org-emphasis-regexp-components org-emphasis-regexp-components))
3. 내 개인 파일들 제외하기
크게 두 가지 방법이 있다. 다른 방법이 더 있긴 한데, (org-crypt를 쓴다거나) 간단하게는 아래 방법으로 충분하다:
- gpg로 파일을 암호화하기
:noexport:태그 달기
3.1. gpg로 파일을 암호화하기
epa-encrypt-file 명령어를 쓰면 이미 있는 파일을 암호화할 수 있다. 암호는 gpg 키를 생성해 쓸 수도 있고, passphrase만 넘겨서 암호화할 수도 있다.
암호화한 파일은 원래-파일-이름.원래-확장자.gpg로 저장된다. 예를 들어, publish-hanassig.org는 publish-hanassig.org.gpg가 된다.
emacs를 열고 파일을 최초로 열 때, gpg키와 passphrase가 필요하다. 한 번 인증하고 나면 일반 파일처럼 자유롭게 편집할 수 있고, 저장할 때 자동으로 다시 암호화되어 저장된다.
3.2. noexport 태그 달기
noexport 태그가 달린 섹션은 export 되지 않는다. 파일 중간에 웹으로 내보내고 싶지 않은 단락에 :noexport:로 태깅면 된다.
** 중간 헤더 :noexport:
파일 전체의 내용을 숨기고 싶다면 FILETAGS 속성에 태그를 주면 된다. 단, 파일 자체는 export되고, 내용만 숨겨진다.
#+title: 하나씩을 웹으로 퍼블리싱하기 #+filetags: :noexport:
4. 어디에 올리지?
- GitHub Pages
- CloudFlare Pages
CloudFlare Pages로 결정