집에서 블로그 호스팅
지난 여름과 가을은 대부분 Metapho를 Swift 6에 맞추어 업데이트하면서 보냈습니다. 그 과정에서 Swift concurrency 망치를 손에 들고 보니 모든 문제가 이 망치로 두들기면 해결될 것 같다는 망상에 빠집니다. 그리하여 블로그 엔진을 또 갈아엎는 작업에 착수하였습니다.
어디서 돌리나
마침 12.3 내란 때문에 치솟은 환율 탓에 월 5달러인 Linode 가상 사설 서버 유지비도 약간 아깝게 느껴지기 시작했습니다. 과감하게 라즈베리 파이5 8기가 버전을 구입, 집에서 모든 것을 돌리는 쪽으로 방향을 잡았습니다.
웹 프레임워크 바꾸기
본 블로그가 돌아가고 있는 엔진 MoonBurst는 Vapor라는 Swift 웹 프레임워크를 쓰고 있었습니다만, Vapor는 너무 덩치가 커서 그런지 structured concurrency 지원이 늦어지고 있어 기다리다 지친 저는 HummingBird 라는 좀 더 가벼워 보이는 녀석에 관심을 갖게 됩니다. 그래서 HummingBird 2를 이용하여 블로그 엔진을 다시 썼습니다.
라즈베리 파이의 운영체제가 평범한 Debian으로 바뀌면서 MoonBurst 첫 번째 버전을 만들던 2018년에 비하면 라즈베리 파이에서 Swift를 돌아가게 하기가 아주 수월해졌습니다. 공식 문서에서 하라는 것만 해주면 잘 돌아가서 조금 놀랐습니다. Markdown을 HTML 바꾸는 작업도 무려 애플에서 공식 swift-markdown 라이브러리를 유지하는 중이라 아주 편합니다. (라고 하기엔 코드블록에서 HTML entity escape를 안해주는 함정이 있습니다만, 자세한 것은 나중에…)
Swift 빌드 시간도 라즈베리 파이5의 위력으로 단 600초 정도면 의존성 다운로드부터 완성까지 잘 마칩니다. 31초 정도 걸리는 맥미니에 비하면 느리지만 뭐 나쁘지 않지요.
약간의 양계질이 있었지만, 어찌저찌 엔진을 완성하였습니다. 여전히 큰 트래픽은 Siege를 이용한 자체 DDoS 테스트를 할 때만 발생하지만(네, 섣부른 최적화 맞습니다), 아무튼 덜 죽고 더 튼튼하고 빠른 엔진을 (또) 마련했으니 이제 게시글만 좀 쓰면 되겠습니다.
어떻게 돌리나
작고 귀여운 서버를 집에서 돌리려면 여러가지 걸림돌이 있습니다. 유동 아이피니 포트 포워딩이니 귀찮은 것들이 귀찮았는데, 연구 결과 Cloudflare Tunnel이라는 서비스에 대하여 알게 되었습니다. 웹에서의 간단한 설정과 라즈베리 파이에서의 간단한 설치만 거치면 편리하고 안전하게 localhost로 열어둔 웹 서버를 외부에 공개할 수 있습니다. https 설정도 Cloudflare에서 알아서 해주니 전에 쓰던 letsencrypt와 nginx의 조합을 전부 대체할 수 있었습니다. 무료 플랜도 아주 너그러워서 이게 맞나? 싶기도 합니다.
라즈베리 파이로 웹 서버를 24시간 돌리니 이제야 ISP에 꼬박꼬박 내는 사용료가 조금 덜 아까워지는 기분이 듭니다.