서론

오드로이드나 라즈베리파이로 서버를 돌리는 본인에게 있어 사실 이것들은 만족할만한 성능을 내준다고 보기는 힘들다.

왜냐하면 워드프레스같은 php기반은 너무 무거워 빠른시간안에 응답하긴 힘들고(비록 2016년기준 php7이 정식 Release 되면서 믿을수 없을정도로 빠르지만), php를 좀더 가볍게 하기위한 hiphop같은건 ARM을 지원하지 않기때문이다......

더군다나 워드프레스같은경우 DB구축에 php연결까지 생각해면 백업&복원이 꽤나 성가시다.

그래서 이리저리 다른 설치형 프로젝트를 찾다 찾게된것이 바로 Ghost다..

Ghost는 node.js를 사용한 설치형 블로그로
어떤 플랫폼에서도 준수할 성능을 보여주며 블로그 자체도 꽤나 가벼운 편이다.

또 그뿐아니라 DB나 기타 미디어데이터, 설정데이터 같은것들이 외부에 의존하지않고 자체적으로 해결하기때문에 백업&복원도 폴더만 들고다니면 된다는 타 블로깅 플랫폼에 비하면 엄청난 장점이 있다. (물론 도커를 활용하는 방법도 있지만 그건 플랫폼 가리니깐 논외)

배경지식

일단 Ghost가 필요로 하는 기본 권장환경은 다음과 같다. (2015년 9월 기준) > Ghost requires Node.js 0.10.x (not 0.12.x). We recommend Node.js 0.10.40 & npm 2.5.0. 하지만 실제 확인해본 결과 >node.js 0.12.7 & npm 2.14.3 에서 정상적인 구동이 됩니다. 여기서 주의해야할 점은 node.js의 가장 상위버전인 4.~버전대는 아직 지원이 안된다는 것입니다. Ghost자체의 문제라기보단 Ghost가 의존하는 프로그램들 (SQlite3)가 아직 이 버전을 지원하지 않는다고 하네요. (0.12.~버전대도 초기엔 지원 안했지만 지금은 된다고 합니다.)


2016년 8월 기준으로 다시 작성합니다.

Ghost recommends Node v4 LTS.

node.js 4.X 버전대를 정식 지원합니다.

Node.js&npm 설치

Node.js는 코드를 실행하는 프로그램, npm은 apt-get과 같은 패키지 관리자 이다.
Ghost는 DB가 자체적으로 구현되있지 않고 SQlite3를 가져다 쓰기도하고 그 외에도 여러가지 외부프로그램에 의존하기때문에 npm을 통한 외부 프로그램 설치 과정이 꼭 필요하다.
참고로 npm으로 설치되는 프로그램은 모두 Ghost폴더 내에 있으므로 시스템이 지저분해질 걱정은 없으니 시스템이 지저분해질것을 염려할 필요는 없다.

일단 우분투나 데비안 계열을 사용해 패키지 단위로 설치하려고 한다면 curl --silent --location https://deb.nodesource.com/setup_0.12 | sudo bash - 를 입력한뒤12 sudo apt-get install nodejs 해주면 됩니다. >*라즈베리파이의 경우 node.js는 괜찮으나 npm버전에 약간 문제가 있다. `npm -v`를 했을때 `2.~`버전보다 낮다면[여기](https://nodejs.org/en/download/)에서 ARMv7용을 다운받아두자*

2016년 8월 기준으로 다시 작성합니다.

https://nodejs.org/ko/download/package-manager/

위 링크를 통해 자신의 플랫폼에 알맞게 node.js를 설치하자.

node js 만 필요한것이 아닌 npm도 필요로 함으로 둘다 설치해야됨을 주의해야된다.

Ghost 다운및 설치

wget https://ghost.org/zip/ghost-latest.zip

으로 ghost 파일을 다운로드 한뒤

sudo unzip -uo ghost.zip -d /var/www/ghost

해준다.34 그후

cd /var/www/ghost && npm install --production

해주면 엄청난 시간이 흐른뒤 알아서 외부 의존성프로그램들을 다운로드한뒤 설치(컴파일)해준다.5

라즈베리의 경우 아까 받은 압축을 tar -xvf 파일명으로 해제한뒤 npm대신 /압축해제한 경로/bin/npm install --production으로 해줘야 정상적으로 설치된다. 실행은 node로 되는것이기 때문에 npm버전과 관계없다.


가끔 실패하는경우가 있는데 보통 두가지중 하나가 원인이다. 1. npm버전이 너무 낮거나 2. 컴파일할 기본적인 파일이 설치되어있지 않다던가. 전자의 경우 npm을 업그레이드 해주면되고 후자의 경우 apt-get install build-essential 해주면 된다. (DB서버가 컴파일되서 설치되는데 GCC없으면 컴파일이 안되서 발생하는 문제)

그후

npm start --production

하면 서버가 실행된다.

자신의 컴퓨터에서 127.0.0.1:2368로 들어가면 블로그가 보이고 127.0.0.1:2368/ghost로 들어가면 관리자페이지6로 접속가능하니 현재 GUI환경에서 작업중이면 한번 들어가보아도 된다.

아직 타인의 컴퓨터에선 이 블로그에 들어올수 없으니 스마트폰같은걸로 접속했다 안된다고 삽질할 필요는 없으니 주의하도록 하자.

외부에서 접속 가능하게 설정하기

Ghost는 기본프로그램만으로는 아직 외부에서 접속 불가능하다.7
외부에서 접속가능하게 할려면 nginx와의 연계가 필요하다.

(apache도 되지만 nginx기준으로 설명합니다.)(이유는 Ghost 사이트에서 nginx를 기준으로 설명해 놓았기 때문) (참고로 이 기능은 리버시 프록시라는 기능입니다. apache환경에서 시도해실분은 이걸 키워드로 찾아보세요)

일단 nginx를 깔아준다.

sudo apt-get install nginx

그후 nginx 설정파일 폴더로 들어가

cd /etc/nginx/sites-available/

ghost.conf라는 파일을 만들어준뒤

파일내용을 다음과 같이 입력하도록 하자.

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass         http://127.0.0.1:2368;
        client_max_body_size 0m; 
    }
}

"example.com"만 자신의 도메인에 맞게 적어주자.

2016년 8월 추가: client_max_body_size 0m;는 본인이 임으로 추가해준 설정이다. 업로드 제한을 풀어주는 역할을 하는데 이 설정이 없으면 Ghost는 1.5MB이하의 사진만 업로드 가능하다.(이게 nginx 기본세팅값)

이제 이 파일은 sites-enabled폴더에도 연동되게 다음과 같은 명령어를 입력해 준다.

sudo ln -s /etc/nginx/sites-available/ghost.conf /etc/nginx/sites-enabled

그후 sudo service nginx restart해주면 이제 외부에서도 이 블로그를 볼수 있게된다. (짝짝짝)

컴퓨터 시작시 자동으로 실행하게하기

컴퓨터 시작시에 자동으로 실행하게 할려면 일단 서비스에 등록이 되야한다.

sudo curl https://raw.githubusercontent.com/TryGhost/Ghost-Config/master/init.d/ghost  -o /etc/init.d/ghost

를 해준뒤 (링크를 /etc/init.d/ghost에 다운받는 명령어) init.d폴더에 들어가

cd /etc/init.d

ghost파일을 열어보면

#! /bin/sh
### BEGIN INIT INFO
# Provides:          ghost
# Required-Start:    $network $syslog
# Required-Stop:     $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Ghost Blogging Platform
# Description:       Ghost: Just a blogging platform
### END INIT INFO

# Do NOT "set -e"

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Ghost"
NAME=ghost
GHOST_ROOT=/var/www/ghost
GHOST_GROUP=ghost
GHOST_USER=ghost
DAEMON=/usr/bin/node
~이하생략~

가 있다.

이중 GHOST_GROUPGHOST_USER를 자신의 계정이름으로 설정하고89

DAEMON도 자신의 nodejs가 있는 주소로 지정해주자.10

그리고 이제

sudo chmod 755 /etc/init.d/ghost

를 실행해 주고

sudo update-rc.d ghost defaults
sudo update-rc.d ghost enable

해주면 컴퓨터가 시작될때 자동실행이 되고

$ service ghost start         //ghost블로그 시작
$ service ghost stop          //ghost블로그 정지
$ service ghost restart       //ghost블로그 재시작
$ service ghost status        //ghost블로그 상태

명령어들을 사용할수 있게 된다.

  1. 위 과정은 node.js 4.~버전이 아닌 0.12버전을 깔도록 해줍니다.

  2. debian계열인데 curl이 없다면 apt-get install curl해주면 됩니다.

  3. /var/www/ghost에다 압축을 해제하는 이유는 딱히 없지만 앞으로할 모든 설정파일은 이 기준으로 작성되어있으니 자신이 다룰 자신이 있다면 알아서 바꿔줍시다.

  4. 폴더 없다고 하면 각자 알아서 만들어줍시다.

  5. --productionproduction 모드로 실행하겠다는 의미이다. 표시 없이 시작하면 devleop모드로 자동으로 시작되는며 각 모드는 DB나 설정등이 독립되어있습니다. npm install --production에서는 개발자용 도구를 설치하지 않게하는 기능이 있습니다..

  6. 관리자 페이지로가서 아이디 비번을 설정해 줘야합니다.

  7. 베타버전에다가 이것도 개발용으로 배포된거기 때문에

  8. group을 따로 설정한분은 알아서 바꿔주기.

  9. 아까 ghost설치장소를 임으로 지정한사람은 GHOST_ROOT도 그에맞춰 바꾸줍시다.

  10. which node명령어를 실행하면 주소가 나옵니다.