Amazon Lightsail 에서 Ghost 블로그 운영하기 #3. Ghost 설치
이번 포스팅은 Amazon Lightsail Ubuntu 인스턴스에 NGINX와 MySQL을 설치하고 ghost-cli를 이용하여 Ghost를 설치하는 방법을 소개한다.

앞에서 우리는 Amazon Lightsail 을 이용하여 ubuntu 인스턴스를 설치했고, iPad에서 Termius를 이용하여 SSH 접속을 할 수 있는 환경을 만들었다.이번 포스팅에서는 앞에서 설치한 인스턴스에 Ghost를 설치하는 내용을 다룬다.
Ghost 공식 문서는 https://ghost.org/docs/install/ 에서 확인 가능하다.
Ubuntu 서버 시간 동기화
Amazon Lightsail에서 인스턴스를 생성하면 서버 시간이 UTC로 표기된다. 우리는 대한민국 시간으로 시간을 표기할 수 있게 한다.
sudo timedatectl set-timezone Asia/Seoul

Ubuntu 패키지 업데이트
Ghost 설치 이전에 ubuntu 패키지를 최신버전으로 모두 업데이트한다.
sudo apt update
sudo apt upgrade

Node.js 설치
다음은 Ubuntu에 Node.js를 설치한다. 우분투에서 apt 명령어로 설치할 수 있지만 Ubuntu 기본 패키지의 Node.js 버전은 낮기 때문에 직접 설치해주는 것이 좋다. Node.js를 설치하는 여러 방법 중에 apt install을 사용하여 설치하는 방법으로 설치한다. 이 방법을 사용하기 전에 ca-certificates, gnupg, curl 패키지가 필요해서 먼저 설치한다.
sudo apt install ca-certificates gnupg curl
만약 설치가 되어 있으면 아래 이미지와 같이 이미 설치되어 있다는 메세지를 출력해준다.

다음은 nodesource의 key가 저장되는 디렉토리를 생성한다.
sudo mkdir -p /etc/apt/keyrings
이제 nodesource 의 키를 가져온다.
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
이제 Node.js 가 설치될 버전을 지정한다. 우리는 Ghost 에서 추천하는 18.x 버전을 사용할 것이기 때문에 18버전을 설치한다.
NODE_MAJOR=18
Ubuntu 패키지 리스트에 설치할 Node.js 패키지 항목을 추가한다.
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
Ubuntu 패키지를 업데이트 한다.
sudo apt update
apt install 명령어를 사용하여 nodejs 패키지를 설치한다.

이제 모든 설치가 끝났다. 우리는 Node.js 18 버전을 설치했고 확인할 수 있다.
node -v

MySQL 데이터베이스 설치
Ghost 블로그 플랫폼은 기본적으로 MySQL 데이터베이스를 사용하도록 추천하고 있어 Ubuntu 패키지의 MySQL 서버를 설치한다.
sudo apt install mysql-server

MySQL 서버를 설치하면 mysql root 유저로 접속할 수 있도록 데이터베이스에 root 유저를 추가한다.
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH
'mysql_native_password' BY '비밀번호를 입력한다';
FLUSH PRIVILEGES;
exit;
위 명령어를 입력한 후 mysql -u root -p 명령어를 사용해서 MySQL 서버에 접속할 수 있다.

NGINX 서버 설치
HTTP 요청 프록시 및 웹 서버를 담당할 NGINX 서버를 설치한다.
sudo apt install nginx
설치가 완료되면 방화벽에 NGINX 접근을 추가한다.
sudo ufw allow 'Nginx Full'

ghost-cli 설치
이제 우리는 Ghost를 설치하고 관리하는 ghost-cli 를 사용할 것이다. npm 으로 ghost-cli 를 설치한다.
sudo npm install ghost-cli@latest
ghost 설치
이제 Ghost 블로그 플랫폼을 설치하는 모든 패키지가 설치 되었다. 지금부터는 ghost-cli를 사용하여 Ghost 를 설치한다.
가장 먼저 Ghost가 설치될 디렉토리를 만든다. 예제로 만들 Ghost 블로그는 ghostblog.sungkwang.dev 라는 도메인으로 만들려고 한다. 디렉토리 이름도 같은 이름으로 생성한다. 다른 이름으로 생성해도 상관없는데 사이트 이름으로 생성해야 나중에 다른 디렉토리와 구분하기 쉽다.
sudo mkdir -p /var/www/ghostblog.sungkwang.dev
생성한 디렉토리에 소유주를 Amazon Lightsail 의 유저인 ubuntu 로 변경한다.
sudo chown ubuntu:ubuntu /var/www/ghostblog.sungkwang.dev
웹 서비스를 위한 접근 권한을 설정한다.
sudo chmod 755 /var/www/ghostblog.sungkwang.dev

디렉토리 생성이 끝나면 디렉토리 내부로 들어가서 Ghost 설치를 진행한다.
ghost install
설치 도중에 몇 가지 입력 프롬프트가 나타난다.
- Enter your blog URL : 도메인을 입력한다. 앞에서 설정한 https://ghostblog.sungkwang.dev를 입력한다.
- Enter you MySQL hostname: MySQL 주소를 입력하는데 내부적으로 사용할 것이기 때문에 127.0.0.1 그대로 입력한다.
- Enter your MySQL username: root, MySQL 에 접속하기 위한 유저인데 우리는 root 입력한다.
- Enter your MySQL password: MySQL에 접속하기 위한 유저 비밀번호를 입력한다.
- Enter your Ghost database name: ghostblog_sungkwang_dev_prod, MySQL 서버 안에 생성될 데이터베이스 이름을 입력한다.
- Do you with to set up "ghost" mysql user?: Yes, MySQL 유저로 Ghost유저를 추가한다.
- Do you wish to set up Nginx?: Yes, NGINX 서버 자동으로 설정한다.
- Do you wish to set up SSL?: Yes, SSL 인증서 발급 및 https 웹서버 환경을 설정한다.
- Enter your email(For SSL Certificate): sungkwang.dev@gmail.com 인증서 발급에 필요한 이메일 주소를 입력한다. 개인 이메일 주소를 입력하면 된다.

Ghost cli를 사용하여 설치하면 Ghost 설치뿐만 아니라 NGINX, MySQL, SSL 인증서까지 한번에 설치가 된다.

Ghost 설치가 완료되었다.
Amazon Lightsail 방화벽 HTTPS 포트 추가
마지막으로 Lightsail인스턴스의 방화벽에 HTTPS 포트를 추가아야한다. 기본적으로 HTTPS포트가 추가되어 있지 않기 때문에 Ligtsail 인스턴스 상세보기에서 들어가서 네트워크 탭을 선택한다.

IPv4 Firewall 아래 Add rule 을 선택하여 HTTPS포트를 추가한다.



이제 모든 설정이 끝났다. 브라우저가서 https://ghostblog.sungkwang.dev/ 로 접속하면 아래와 같이 Ghost 블로그가 정상적으로 설치된 것을 확인할 수 있다.

질문 및 의견을 남겨주세요 >