Ghost 블로그 설치 과정

Ghost 설치 시작

Wordpress, docusaurus 등 여러 블로그 중 Ghost가 설치도 간단해보이고 깔끔해보여서 5년간 묵혀뒀던 블로그를 드디어 시작해본다.

Ghost는 디지털오션에서 호스팅, 설치까지 한방에 가능하지만 Proxmox로 구동중인 NAS와 도메인이 있으니 직접 호스팅하기로 결정했다.

설치 과정은 공식 사이트 가이드를 참고했다.

https://ghost.org/docs/install/ubuntu/#overview

Ghost를 설치할 Ubuntu는 기존에 만들어둔 깨끗한 Ubuntu Container 이미지가 있어서 복제해서 사용했다.

Ubuntu 18.04.5 LTS
4코어, 1GB 램, 10GB ssd 할당

1. 우분투 패키지 업데이트

sudo apt-get update
sudo apt-get upgrade

2. nginx 설치

sudo apt-get install nginx

Container에서 ufw는 사용하지 않으므로 ufw 관련 설정은 스킵했다.

3. MySQL 설치

sudo apt-get install mysql-server

4. Node.js 설치

curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash
sudo apt-get install -y nodejs

Node.js는 Ghost에서 지원하는 버전을 설치해야한다.

2022.10.26 기준 16버전이 권장 버전

5. Ghost-CLI 설치

sudo npm install ghost-cli@latest -g

Ghost 설치 및 관리 도구인 Ghost-CLI 설치

6. Ghost 설치

sudo mkdir -p /var/www/melprobe.com
sudo chown blog:blog /var/www/melprobe.com
sudo chmod 775 /var/www/melprobe.com

Ghost가 설치될 폴더 생성 및 권한 설정
adduser로 blog 유저 생성해서 사용했다.

cd /var/www/melprobe.com
ghost install
? Enter your blog URL: (http://localhost:2368)

설치 과정에서 blog URL을 물어보는데 nginx로 reverse proxy 설정해둔 Container랑 letsencrypt에서 발급한 SSL 인증서가 따로 있어서 localhost 그대로 진행했다.

proxy 없이 사용할 경우 URL에 도메인 적으면 SSL 인증서까지 한번에 설정해준다.

? Enter your MySQL hostname: (localhost)

MySQL hostname 물어보는데 DB 따로 분리해서 서버 구동할 생각은 없어서 앞에서 설치한 MySQL 그대로 사용했다.

? Enter your MySQL username: root

MySQL 사용자 이름 물어보는데 DB 새로 설치한거면 root 사용하라고 가이드 되있어서 root로 입력했다.

? Enter your Ghost database name: (melprobe_com_prod)

Ghost DB이름 자동생성된 이름 그대로 사용했다.

? Do you wish to set up "ghost" mysql user? (Y/n) Y

root MySQL user 설정하면 Ghost-CLI에서 DB 접근 가능해진다고 하니 Y로 설정했다.

Your url contains a port. Skipping Nginx setup.
ℹ Setting up Nginx [skipped]
Nginx setup task was skipped, skipping SSL setup
ℹ Setting up SSL [skipped]

proxy 사용할거라 localhost:2368로 URL 설정했더니 SSL 설정 스킵됬다.

? Do you wish to set up Systemd? (Y/n) Y

systemd에 등록해야 service start, stop이 편해지니까 당연히 Y

7. 설치 트러블슈팅

ghost uninstall

ghost install

문제 발생시 uninstall 해서 폴더 내용물 싹 비우고 다시 install 해서 해결하라고 가이드되어있다.

7-1. sudoers 추가 안해서 에러 발생

Error: Command failed: /bin/sh -c sudo -S -p '#node-sudo-passwd#'  useradd --system --user-group ghost
#node-sudo-passwd#blog is not in the sudoers file.  This incident will be reported.

adduser로 blog 유저 추가하고 sudoers 파일에 추가 안해서 sudo가 불가능해서 에러발생했다.
sudoers에 blog 유저 추가하고 uninstall -> install로 해결

7-2. MySQL root 계정 로그인 불가 에러

1) ConfigError

Error detected in the production configuration.

Message: Access denied for user 'root'@'localhost' (using password: YES)
Configuration Key(s): database.connection.user / database.connection.password

MySQL root 계정 패스워드 설정이 안되어있어서 발생한 에러

mysql -u root -p

비밀번호 물어보면 그냥 엔터 누르면 로그인된다.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '{비밀번호}';
mysql> exit;

Ghost 설치 과정에서 입력한 비밀번호로 root 계정 비밀번호 설정하고 ghost start로 시작하면 정상적으로 시작된다.

8. 관리자 페이지에서 초기설정

http://{URL}/ghost/ 로 접속하면 관리자 초기 설정이 진행된다.

admin

9. 컨테이너 리소스 사용량

resource
메모리 500MB, 컨테이너 용량 4GB
처음에 할당한 CPU, RAM, SSD 추가로 할당할 필요는 없어보인다.