안수찬의 개발이야기

Install Ghost Blog on Ubuntu 14.04

Introduction

안수찬 @dobestan

안수찬 @dobestan

소프트웨어 생태계에 기여할 수 있는 실용주의 프로그래머가 되고자 합니다. 나는 안수찬이다. 그러므로 나는 할 수 있다.


Install Ghost Blog on Ubuntu 14.04

Posted by 안수찬 @dobestan on .
Featured

Install Ghost Blog on Ubuntu 14.04

Posted by 안수찬 @dobestan on .

친구가 개발 블로그를 하나 만들고 싶다기에 Ghost Blog를 추천했다. KFC에서 햄버거를 먹으면서 1시간 정도 같이 작업했고 Ghost 블로그에 테마 설정까지 완료했다. 모든 과정을 설명하고 있는 글이 잘 없어서 그 과정을 기록해둔다. 기본적인 부분들 ( AWS EC2 Instance 생성하기, DNS 변경해서 도메인 연결하기 등 )은 여기서는 생략하도록 한다. 완성본은 blog.forearthus.me에서 확인할 수 있다.

아래의 글들을 참고했다.

Update Ubuntu

sudo apt-get update  
sudo apt-get upgrade -y  
sudo aptitude install -y build-essential zip vim wget git  

Download and install the Node.js Source Code

wget http://nodejs.org/dist/node-latest.tar.gz  
tar -xzf node-latest.tar.gz  
cd node-v*  

Install Node.js

이 부분이 가장 시간이 오래 걸리는 부분이다. 아마존 웹 서비스 EC2에서 가장 저렴하고 성능이 나쁜 t1.micro 기준으로 약 30분 정도 걸렸던 것 같다. 조금 더 빠르게 설치할 수 있는 방법을 아는 분은 댓글로 남겨주시면 감사할 것 같다. 다음부터는 이미지로 만들어두고 바로 EC2 Instance를 생성하려고 생각하고 있다.

./configure
make  
sudo make install  

Download and Install Ghost

sudo mkdir -p /var/www/  
cd /var/www/  
sudo wget https://ghost.org/zip/ghost-latest.zip  
sudo unzip -d ghost ghost-latest.zip  
cd ghost/  
sudo npm install --production  

Configure Ghost

이 부분은 건너뛰어도 무방하다. 특히나 Amazon Web Service를 사용한다면 Security Group > Inbound에서 2368번은 막고 80번(http)이나 443번(https) 포트만 사용하도록 하자.

여기서 하는 작업은 기본적으로는 127.0.0.1, 즉 로컬에서만 접속할 수 있지만, host0.0.0.0으로 변경함으로써 모든 곳에서 접속이 가능하도록 한다. 일반적인 블로깅 용도로는 사용하지 않는다고 봐도 무방하다. 변경하게되면 yourdomain.com:2368에서 접속할 수 있다.

sudo vi config.example.js  

In the "Production" section, change the following :

host: '127.0.0.1',  

to

host: '0.0.0.0',  

Making Ghost run forever

Ghost를 Background Task로 실행시키기 위해서 forever를 사용할 수 있다. node 프로세스가 충돌해서 종료되더라도 forever가 다시 실행시켜주니 안심하고 그냥 사용하자.

  • forever 설치하기 : npm install forever -g
  • forever로 Ghost 실행하기 : NODE_ENV=production forever start index.js
  • Ghost 프로세스를 종료하기 : forever stop index.js
  • Ghost가 실행되고 있는지 확인하기 : forever list

개인적으로는 스크립트 ( restart.sh )로 만들어두고 쉽게 재실행시킬 수 있도록 하였다. 최대한 내가 할 일을 줄이고 편하게 작업할 수 있도록 반복되는 일들을 자동화하자.

// restart.sh
forever stop index.js  
NODE_ENV=production forever stop index.js  

Setting up Ghost with a domain name

Ghost 를 프록시 서버로 사용하고 80번 포트로 연결되었을 때, 2368번 포트로 연결해줄 웹 서버를 설정하자. 우리는 nginx를 사용한다.

$ sudo apt-get install nginx
$ sudo vi /etc/nginx/sites-available/ghost.conf
// /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;
    }
}
$ sudo ln -s /etc/nginx/sites-available/ghost.conf /etc/nginx/sites-enabled/ghost.conf
$ sudo service nginx restart

SSL(https) Setting

나만의 SSL 인증서를 만들어서 https로 사용할 수 있다. 하지만 당신이 만약 영롱한 초록빛깔 https를 원한다면 다른 포스트 ( Ghost 블로그에 SSL 보안서버 적용하기 )를 참고해보자. 아래는 Ghost Docs에서 제공하는 기본적인 설정방법이다.

커스텀 도메인을 설정했다면 https를 통해 관리자 인터페이스에 보안설정을 하는 것이 좋다. 만약 https 설정을 하지 않는다면, 아이디와 비밀번호가 평문으로 전달될 것이다.

아래 예시는 SSL을 설정하는 방법이다. nginx를 프록시 서버로 사용했다고 가정하고 진행한다. 다른 프록시 서버도 비슷하게 설정하면 된다.

시작하기에 앞서 신뢰할만한 공급자로부터 SSL 인증서를 받아야한다. 공급자가 CSR(Certificate Signing Request)와 Private Key를 발급받는 방법을 알려줄 것이다. *.crt 파일과 *.key파일을 서버에다가 옮겨두자.

  • mkdir /etc/nginx/ssl
  • cp server.crt /etc/nginx/ssl/server.crt
  • cp server.key /etc/nginx/ssl/server.key

*.crt 파일과 *.key 파일을 업데이트 했다면 이제 nginx 설정을 변경해주자.

  • Nginx Configuration 파일을 당신이 좋아하는 텍스트 에디터로 열어라. ( 예, sudo vi /etc/nginx/sites-available/ghost.conf )
  • 아래의 설정에 +라고 표시된 부분을 추가해라.
 server {
     listen 80;
+    listen 443 ssl;
     server_name example.com;
+    ssl_certificate       /etc/nginx/ssl/server.crt;
+    ssl_certificate_key   /etc/nginx/ssl/server.key;
     ...
     location / {
+       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+       proxy_set_header Host $http_host;
+       proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://127.0.0.1:2368;
        ...
     }
 }
  • Nginx 서비스를 재시작하자.
$ sudo service nginx restart

Email Setting ( Gmail SMTP )

mail: {  
        service: 'Gmail',
        transport: 'SMTP',
        options: {
            host: 'smtp.gmail.com',
            secureConnection: true,
            port: 465,
            auth: {
                user: 'USERNAME',
                pass: 'PASSWORD'
            }
        }
안수찬 @dobestan

안수찬 @dobestan

https://dobest.io/

소프트웨어 생태계에 기여할 수 있는 실용주의 프로그래머가 되고자 합니다. 나는 안수찬이다. 그러므로 나는 할 수 있다.

View Comments...