고스트(Ghost) 블로그 만들기 (1) Self-Hosting
에이원네트웍스 팀에서 운영하고 있는 블로그 플랫폼인 고스트 블로그를 설치 (Self-Hosting) 쉽게 하는 방법을 소개합니다.

고스트 블로그를 만드는 (개설) 방법 두 가지
고스트 블로그를 만드는 (개설)하는 방법은 두가지가 있습니다.
첫 번째 방법 (Ghost Pro)
은 Ghost Pro를 통한 월간, 연간 구독형으로 가입하여 Ghost 에서 직접
블로그를 호스팅 하는 방법이 있습니다.
이 방법은 가장 빠르고, 가장 쉽게 블로그를 호스팅할 수 있다는 장점이 있지만,
각 플랜마다 업로드 사이즈 제한과 같은 몇가지 약간의 제약사항이 발생하며 무엇보다, 꾸준한 비용이 발생한다는 단점이 있습니다.
월간 구독형에 대한 Ghost Pro의 가격은 아래와 같습니다.
두 번째 방법 (Self-hosting)
은 직접 서버에 Ghost (고스트)를 설치해서 자체적으로 호스팅을 하는 방법 입니다.
이 방법 또한 서버에 대한 비용이 발생하는 것은 동일하지만, 운영 규모나 목적에 따라 비용에 대한 범위를 유연하게 조정할 수 있고, 어떤 형태로든 자유롭게 커스터마이징이 가능하다는 강력한 장점이 있으나,
서버(Linux, Web), 시스템과 같은 분야가 익숙하시지 않는 분들에게는 조금 어려울 수 있다는 단점이 있습니다.
이에, 이번 포스팅에서는 두 번째 방법인 Ghost(고스트) 블로그를 직접 설치해서 호스팅하는 Self-Hosting 방법을 최대한 쉽게 설명 드리고자 합니다.
고스트 블로그 설치 (Ghost CMS Install)
설치 과정은 공식가이드 문서 기준으로 진행되며, MySQL, NginX, Node.js 와 같은 필요한 스택들 역시 권장하는 버전을 기준으로 진행 됩니다.

또한 이 포스트에서 다루는 설치 과정은 다음과 같은 전제 조건을 기반으로 작성하였습니다.
- Ubuntu 22.04.5 설치
- apt update && apt upgrade 를 통한 최신 패키지 업데이트
- UFW status : inactive
(1) 사용자 계정 생성 및 필요 패키지 설치
Ghost (고스트)는 기본적으로 root 계정을 사용하지 않습니다. 따라서 Ghost CMS 서비스를 관리하기 위한 계정 생성이 필요합니다.
계정명은 자유로이 설정 가능 하되 'ghost' 는 ghost-cli와 충돌을 일으키므로 사용할 수 없습니다.
sudo adduser ghostadmin // 계정명 임의지정 가능
sudo usermod -aG sudo ghostadmin // sudo 사용을 위한 그룹 추가
su - ghostadmin // 계정 전환
sudo apt install nginx mysql-server -y // Web, DB 설치
(2) MySQL Database 생성 및 계정 생성
sudo mysql
CREATE USER 'ghostadmin'@'localhost' IDENTIFIED BY '패스워드'; // 계정명 임의지정 가능
CREATE DATABASE ghost; // Database 명 임의지정 가능
GRANT ALL PRIVILEGES on ghost.* TO 'ghostadmin'@'localhost'; // Database 권한 부여
FLUSH PRIVILEGES; // 권한 적용
(3) Node.js 설치
curl -fsSL https://deb.nodesource.com/setup_22.x -o nodesource_setup.sh
sudo bash nodesource_setup.sh // node.js 설치
sudo apt install nodejs
sudo npm install -g npm@11.2.0
node -v && npm -v // 설치 및 버전 확인
(3) Ghost CMS install (고스트 설치)
sudo npm install ghost-cli@latest -g // Ghost-CLI 설치
ghost -v // Ghost-CLI 설치 확인 (현재일 기준 1.27.0)
sudo mkdir -p /var/www/testblog.domain.co.kr // 디렉터리명 임의지정 가능
sudo chown ghostadmin:ghostadmin /var/www/testblog.domain.co.kr // 권한 부여
sudo chmod 775 /var/www/testblog.domain.co.kr // 권한 부여
cd /var/www/testblog.domain.co.kr
ghost install // Ghost 설치 (현재일 기준 5.118.0)
? Enter your blog URL: http://testblog.domain.co.kr
? Enter your MySQL hostname: 127.0.0.1
? Enter your MySQL username: ghostadm // (2)MySQL 에서 생성한 계정명
? Enter your MySQL password: [input is hidden] // (2)MySQL 에서 설정한 패스워드
✔ Setting up "ghost" system user
ℹ Setting up "ghost" mysql user [skipped]
? Do you wish to set up Nginx? (Y/n) y
+ sudo mv /tmp/localhost/testblog.domain.co.kr.conf /etc/nginx/sites-available/testblog.domain.co.kr.conf
+ sudo ln -sf /etc/nginx/sites-available/testblog.domain.co.kr.conf /etc/nginx/sites-enabled/testblog.domain.co.kr.conf
+ sudo nginx -s reload
✔ Setting up Nginx
? Do you wish to set up SSL? No
ℹ Setting up SSL [skipped]
? Do you wish to set up Systemd? (Y/n) y // systemd 를 통한 서비스 관리
? Do you want to start Ghost? (Y/n) y // 설치 후 ghost 실행 여부
ghost ls // Ghost 설치 및 실행 확인
(4) 설치 중 참고 사항
- ghost install 과정 중 잘못 입력된 것이 있거나 수정사항이 있는경우
- ghost setup 를 통해 install process 다시 진행 - ghost install 과정 중 실제 도메인 및 레코드 설정 여부
- 도메인 및 레코드 설정이 완료된 경우 바로 접속이 가능 - 도메인이 현재 없는 경우 아래 절차를 통해 NginX를 거치지 않고 Ghost 직접 접속 (http://IPADDRESS:2368 or 2369)
(단, 현재 포스팅에서 설치하는 과정은 Production 환경 즉, 실제 서비스를 목적으로 한 설치이기 때문에, 테마 개발 또는 테스트 목적인 경우 개발 환경으로 설치하시길 권장 드립니다.)
ghost stop
vim config.production.json
5n line "host": "127.0.0.1" -> 0.0.0.0 변경
:wq // 저장
ghost start
이번 포스팅에서는 에이원네트웍스 팀에서 사용하고 있는 고스트 블로그에 대한 설치를 알아보았습니다.
여러 방법들이 있으나, 가장 유연성이 높은 셀프 호스팅 방법을 좀 더 쉽고 정확하게
전달하는 부분에 초점을 두었습니다.
이 설치 가이드가 모쪽록 도움이 되시길 바랍니다.