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/ 로 접속하면 관리자 초기 설정이 진행된다.
9. 컨테이너 리소스 사용량
메모리 500MB, 컨테이너 용량 4GB
처음에 할당한 CPU, RAM, SSD 추가로 할당할 필요는 없어보인다.