Ghost로 개발 블로그 만들고 셀프 호스팅 (1) 가상 서버 생성 및 도메인 설정
어떤 플랫폼을 사용할까?
개발 블로그를 어디에 어떻게 구축해야 할지 고민이 많았다. 티스토리, 미디엄, velog 등의 플랫폼을 고려해봤는데, 티스토리와 velog는 앞으로 내가 해외에서 계속 일을 할 가능성이 있고 그러다보면 영문 콘텐츠를 올리고 싶어질 될 수도 있어서 제외했다.
국내 + 해외를 커버하기에는 미디엄도 좋아 보였지만, 향후 개발 블로그 자체를 포트폴리오 사이트와 통합하고 싶어서 좀 더 유동적으로 사이트를 꾸밀 수 있는 블로그를 만들어보고 싶었다.
그러던 중 Ghost라는 플랫폼을 알게 됐다. 약간의 비용이 들긴 하지만, 설치 방법 등 Document가 친절했고 자유도가 높았고 기본 테마도 깔끔해서 마음에 들었다.
일단 고스트 이용 경험에 대해서는, 좀 더 꾸준히 여기에 글을 써보고 이래저래 커스터마이징하며 블로그를 만져본 후 작성해보려 한다.
TL;DR을 위한 앞으로의 내용 간단요약
1. DigitalOcean에서 월 4파운드로 드롭렛 (가상서버) 구매해 셀프 호스팅함
2. 가상서버는 Ubuntu 22.04 (LTS) x64 버전 사용
3. 도메인 설정 : 내 경우 기존에 구매했던 도메인이 있어서, 그 도메인에 DigitalOcean 드롭렛의 ip 주소를 연결함
4. 우분투 환경에 ngnix, mysql, node.js, ghost-cli 설치 후, 별도의 디렉토리에 ghost 설치 : 이 과정에서 oom-kill로 인해 mysql 실행이 안 되는 이슈, 관리자 설정 혹은 config 파일 설정을 잘못해서 DB접속이 안 되는 이슈가 있었음
이 모든 세팅 과정은 공식 문서에 정말 잘 나와 있어서 복잡하지 않으나, 중간중간 맞닥뜨린 예상치 못한 문제들로 조금 시간이 걸렸다.
Step1. 호스팅 결정하기
먼저 셀프 호스팅을 할지, Ghost Pro를 사용할지 결정해야 한다. Ghost Pro를 사용하면 Ghost쪽에서 호스팅을 알아서 해주기 때문에 내가 환경설정 등에 신경 쓸 필요가 없지만, 월 최소 9달러로 시작한다. (연 결제 시 월 9달러, 월 결제 시 월 11달러)
나는 디지털오션에서월 4달러짜리 드롭렛(가상서버)을 생성해 셀프 호스팅을 하기로 했다. 이렇게 환경 세팅을 해본 건 처음이라서 처음엔 가상 서버라는 개념이 조금 생소하게 느껴졌는데, 가상 서버는 가상의 컴퓨터라고 생각하면 된다.
맥북에서 Mac OS를 사용하듯 Ubuntu라는 OS를 사용하는 컴퓨터를 구매해서 여기에 내가 돌리고 싶은 프로그램을 설치해나가는 것이다. 물론, 우분투 외에도 선택할 수 있는 다양한 운영체제가 있으니 입맛에 맞게 선택하면 된다.
DigitalOcean 사이트에 회원가입을 한 후 먼저 프로젝트를 생성한다. 그 후 드롭렛을 생성하면 되는데, 이 과정에서 맞닥뜨린 작은 특이사항들을 기록해본다.
- 회원가입할 때 카드를 연결해야 해서 확인차 계좌에서 돈이 빠져나가는듯 하지만 바로 결제가 취소되니 걱정할 필요 없다.
- 같은 운영체제라도 데이터센터 region에 따라 선택 가능한 가격대 옵션이 좀 달랐다. 내가 있는 곳과 가까운 곳으로 설정하는 곳이 좋다고 해서 런던으로 설정했더니 최소 6달러부터 선택이 가능했다. 그래서 그나마 가까운 프랑크푸르트로 변경했더니 4달러짜리 플랜이 다시 활성화됐다.
- 운영체제 및 이미지를 선택할 때, 'Marketplace'탭에서 검색해보면 Ghost를 선택할 수도 있다. 그런데 이 경우 최소 월 12달러부터 시작했고... 그럴거면 그냥 고스트 프로를 쓰는 게 낫지 않나 싶어서 우분투를 사용하기로 결정했다. (우분투와의 첫만남 🥰)
- 우분투 버전은 20.04 또는 22.04로 선택하자. Ghost 공식문서에서 권장하는 버전이다. 참고로 나는 이 문서는 확인을 안 하고 무작정 최신 버전으로 선택했다가 버전 이슈로 실행이 안 돼서 결국 드롭렛을 삭제했다가 다시 생성했다. (이외에 다른 이슈들도 있어 전체적인 절차를 한 3번 정도 반복하는 삽질을 했다고 한다...)
- Choose Authentication Method 는 SSH KEY와 Password가 있는데 나는 SSH KEY를 선택했다. New SSH KEY를 눌러보면 우측에 Instructions이 잘 나와 있어서 이것만 보고 따라해도 무방하다.
다음 문서들도 참고하기 좋았다.
다른 설정들은 다 그냥 기본으로 설정하고 딱히 건드리지 않았고, hostname은 내가 기억하기 편한 이름(sohyun-dev)으로 지정했고, 'Add improved metrics monitoring and alerting' 이 옵션은 free라서 추가해봤다.
Step 2. 도메인 설정
Ghost 문서의 Prerequisite에 언급됐듯 연결할 도메인은 미리 준비해두는 게 좋다.
드롭렛 생성 시 부여받은 IP주소가 내 가상서버의 찐 주소인데, 여러 자리 숫자로 된 주소는 사용하기 어려우니 sohyun.dev 와 같이 기억하기 쉬운 도메인으로 접속 시 해당 IP 주소로 접속할 수 있도록 연결해주는 것이다.
내 경우 작년에 포트폴리오 용으로 Squarespace(구:Google Domains)에서 구매했던 도메인이 있었고 가격은 1년에 10파운드 정도였다. 이외에도 namecheap 사이트에서 도메인을 많이들 구매하는 것 같다.
도메인 설정은 Network탭에서 할 수 있다. Add a domain에 원하는 도메인명을 입력한다. 도메인을 추가하면 아래 Domains에 추가한 도메인이 뜬다.
도메인명을 클릭해서 다음과 같이 설정했다. Hostname에는 도메인명이, A type의 value에는 드롭렛 IP가 들어간다.
DigitalOcean에서 설정할 것은 여기까지고, 이제 도메인을 구매한 사이트로 넘어가서 설정해줄 것이 조금 남았다.
DNS Settings에서 A타입에 드롭렛 IP를 연동했다.
그리고 Domain Nameserver도 설정해야 한다. 기본적으로는 squarespace nameserver로 설정이 돼 있었으나, custom nameserver를 사용하는 것으로 변경해 디지털오션 도메인 설정 페이지의 DNS Records에 명시돼 있던 nameserver 주소들을 추가해줘야 한다.
이제 도메인 설정까지 끝났다.
sidenote : DNS 전파
ip주소도 생겼고 도메인도 연결했고 모든 걸 다 설치했는데, ip주소로 접속했을 땐 페이지가 떴지만 도메인 주소로 접속하니 아예 접속이 되지 않는 이슈가 잠깐 있었다.
DNS 레코드가 변경된 후 네임 서버를 업데이트하는 데 24~72시간 정도 소요될 수 있다고 했는데 아마 그것 때문이 아니었나 싶다.
이 사이트에서 DNS 전파 상황을 볼 수 있다. 어제 그저께는 유럽쪽 DNS 전파가 완전 전멸이었다가
오늘 다시 확인해보니 거의 모든 지역에 전파가 된 것을 확인할 수 있다.
터미널에서 dig <<url>> (e.g. dig sohyun.dev) 라고 입력해서 연결이 잘 됐는지 확인해볼 수도 있다. Answer Section을 보면 이 url에 연결돼 있는 IP 주소가 나와있다. 여기서 제대로 응답을 받지 못한다면 도메인 연결에 문제가 있는 것.
이제 깨끗한 상태의 가상 컴퓨터(드롭렛)가 마련됐고, 이 컴퓨터의 ip에 접속할 수 있는 도메인도 연결이 됐다. 이제는 가상 컴퓨터에 Ghost를 돌리기 위해 필요한 프로그램들을 설치해줘야 한다. 이 과정은 기본적으로 공식 문서를 참고했다. 중간에 이슈가 생기지 않는다면(Happy case..!) 문서대로 따라하면 되는데, 내 경우 이 과정에서 약간의 문제들이 있었다.
다음 포스팅에서는 설치 과정에서 겪은 트러블슈팅에 대해 다뤄보겠다.