Ghost 블로그 설치 및 운용 방법
Ghost 블로그를 Ubuntu에서 설치하고 운영하는 절차입니다. 공식 요구사항, Node.js 22, Ghost-CLI, MySQL, NGINX, SSL, systemd, 업데이트와 장애 점검 명령을 정리했습니다.
Ghost 블로그를 직접 운영하려면 단순히 npm install -g ghost-cli와 ghost install만 기억하면 부족합니다. 운영용 설치는 도메인, SSL, MySQL, Node.js 지원 버전, systemd, 백업, 업데이트 절차까지 같이 잡아야 장애가 났을 때 복구할 수 있습니다. 현재 Ghost 공식 Ubuntu 설치 가이드는 Ubuntu 22.04 또는 24.04, NGINX, MySQL 8, systemd, 지원되는 Node.js를 전제로 합니다.
설치 방식 선택
Ghost는 크게 두 방식으로 운영할 수 있습니다.
- Ghost-CLI 설치: Ubuntu 서버에 Node.js, MySQL, NGINX, systemd를 구성하고
ghost install로 운영합니다. 전통적인 self-hosting 방식입니다. - Docker Compose 설치: Ghost 6 계열부터 공식 Docker Compose tooling이 preview로 제공되며, Ghost, Caddy, MySQL, 선택 기능을 Compose로 묶어 운영합니다.
일반적인 Ubuntu 서버에서 Ghost-CLI로 설치하는 흐름을 중심으로 정리합니다. Docker Compose 방식은 별도 글에서 다루는 것이 좋습니다.
사전 조건
설치 전에 DNS A 레코드가 서버 IP를 가리켜야 합니다. SSL 자동 발급은 도메인이 먼저 살아 있어야 정상 처리됩니다.
dig +short example.com
curl -I http://example.com
서버는 최소한 다음 구성을 갖추는 것이 좋습니다.
- Ubuntu 22.04 또는 24.04
- 1GB 이상 메모리
- NGINX
- MySQL 8
- Node.js 22 LTS 계열
- systemd
운영 사용자 생성
Ghost-CLI와 충돌할 수 있으므로 운영 사용자 이름을 ghost로 만들지 않는 편이 좋습니다. 예시는 deploy 사용자 기준입니다.
ssh root@server.example.com
adduser deploy
usermod -aG sudo deploy
su - deploy
이후 명령은 deploy 사용자로 진행합니다.
패키지와 NGINX 설치
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install -y nginx curl ca-certificates gnupg
sudo ufw allow 'Nginx Full'
UFW를 쓰지 않는 환경이라면 클라우드 보안 그룹, 외부 방화벽, 로드밸런서에서 80/443이 열려 있는지 별도로 확인해야 합니다.
MySQL 설치
sudo apt-get install -y mysql-server
sudo systemctl enable --now mysql
sudo systemctl status mysql --no-pager
Ghost-CLI 설치 과정에서 root MySQL 계정 정보를 입력해 Ghost 전용 DB 사용자 생성을 맡길 수 있습니다. 운영 환경에서는 DB root 비밀번호를 문서나 쉘 히스토리에 남기지 않도록 주의하세요.
Node.js 22 설치
Ghost는 지원 Node.js 범위를 엄격하게 봅니다. 최신 Node라고 항상 좋은 것이 아니며, 현재 공식 문서는 Ghost의 required Node 버전을 Node v22 LTS로 안내합니다.
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key \
| sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
NODE_MAJOR=22
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_${NODE_MAJOR}.x nodistro main" \
| sudo tee /etc/apt/sources.list.d/nodesource.list
sudo apt-get update
sudo apt-get install -y nodejs
node -v
npm -v
Ghost-CLI 설치
sudo npm install ghost-cli@latest -g
ghost --version
ghost help로 사용 가능한 명령을 확인할 수 있습니다.
Ghost 설치 디렉터리 준비
Ghost는 독립 디렉터리에 설치해야 하며, 디렉터리 소유자가 현재 운영 사용자여야 합니다.
sudo mkdir -p /var/www/example
sudo chown deploy:deploy /var/www/example
sudo chmod 775 /var/www/example
cd /var/www/example
설치 실행
ghost install
설치 중에는 다음 값을 정확히 입력합니다.
- Blog URL:
https://example.com처럼 프로토콜까지 포함합니다. IP 주소로 넣지 않습니다. - MySQL hostname: 같은 서버면
localhost를 사용합니다. - MySQL user/password: root 또는 사전에 만든 DB 계정을 사용합니다.
- NGINX setup: 특별한 프록시 구조가 없다면 yes를 선택합니다.
- SSL setup: 도메인 DNS가 맞다면 yes를 선택합니다.
- systemd setup: 운영 서버라면 yes를 선택합니다.
설치가 끝나면 https://example.com/ghost에서 관리자 계정을 생성합니다.
운영 명령
Ghost-CLI는 설치 디렉터리 안에서 실행하는 것이 기본입니다.
cd /var/www/example
ghost status
ghost ls
ghost doctor
ghost log
ghost restart
ghost stop
ghost start
설정값은 ghost config로 확인하거나 수정합니다. URL을 바꿀 때는 NGINX와 SSL도 같이 점검해야 합니다.
ghost config get url
ghost config url https://example.com
ghost setup nginx
ghost setup ssl
ghost restart
업데이트와 백업
업데이트 전에는 반드시 DB와 content 디렉터리 백업을 남깁니다. Ghost Admin export만으로는 이미지와 운영 설정 전체를 복구하기 어렵습니다.
cd /var/www/example
ghost backup
ghost update
ghost doctor
ghost status
Node.js를 올릴 때는 Ghost와 동시에 올리지 말고, Node를 먼저 맞춘 뒤 현재 Ghost 버전을 강제로 재설치해 네이티브 의존성을 다시 빌드하는 절차가 안전합니다.
ghost version
ghost update --force
장애가 났을 때 먼저 볼 것
ghost doctor
ghost log -f
sudo systemctl status ghost_example-com --no-pager
sudo nginx -t
sudo journalctl -u ghost_example-com -n 100 --no-pager
설치가 중간에 끊겼다면 폴더를 수동 삭제하기보다 ghost setup으로 이어서 구성하거나, 정말 재설치가 필요할 때 ghost uninstall로 정리합니다. 운영 서버에서는 삭제 명령을 실행하기 전에 DB와 content 백업 위치를 먼저 확인하세요.
공식 문서
Ghost 설치 요구사항은 바뀔 수 있으므로 실제 설치 직전에는 공식 문서를 확인하는 것이 좋습니다.