Ghost 블로그 AWS에서 운영하기 - 2. 이미지 저장소 AWS S3로 사용하기

Markdown에서 IMG 표현

Markdown에서 IMG를 표현하기 위해서는 ![Alt text](이미지경로 "optional title")과 같은 문법을 사용한다. WYSIWYG으로 문서를 작성할 때는 파일첨부하는 메뉴가 있지만 Markdown Editor에는 파일첨부하는 메뉴가 따로 없이 이미지 첨부하는 문법에 URL를 입력하여 이미지를 표현한다.

Ghost 에서 이미지 첨부

Ghost는 Markdown으로 문서를 작성할 수 있는 웹 기반 Markdown Editor를 Dashboard에 가지고 있고, 이 곳에서 Markdown Syntax에 맞게 글을 작성하면 빠르게 Preview를 볼 수 있거나 실제 HTML 문서로 변환되어 저장하게 된다. 또한 Ghost Markdown Editor는 IMG 첨부를 마치 WYSIWYG처럼 파일을 첨부할 수 있는 기능을 가지고 있다. Makrdown IMG Syntax를 작성하면 Preview 화면에 파일첨부 기능이 나타난다.

Upload Image 버튼을 클릭하면 파일 탐색기가 열리게 되고 파일 탐색기에서 파일을 선택하면 자동으로 Ghost Storage에 저장되고 저장된 URL이 Ghost Markdown editor의 IMG 문법에 맞게 변환되어 첨부되어진다. 아래 그림은 이미지 파일을 선택후 이 블로그를 운영하고 있는 AWS 저장공간에 저장한 경로를 반환받은 결과이다.

Ghost에서 첨부한 이미지는 기본적으로 Ghost 프로젝트 경로 아래의 ./content/images/ 라는 경로에 저장이 되어진다.

Ghost 와 AWS S3 연동

AWS 에서 Ghost를 운영할 때 유의해야할 점은 EC2에 저장된 데이터는 EC2가 재시작되면 데이터가 사라지게 된다. 또는 ELB로 저장공간을 사용하여 영구적으로 저장할수도 있지만 ELB는 저장공간을 높은 비용의 가격으로 사용해야한다. 그래서 저렴하면서도 유연하고 HTTP로 접근하기 편리한 S3를 Ghost의 이미지 저장소로 사용하도록 해보자.

ghost-s3-storage 플러그인을 사용하면 우리가 고민하는 것을 아주 간단하고 쉽게 해결할 수 있다. 이 플러그인은 위에서 설명한 우리가 원하는대로 Ghost에 이미지 저장소를 S3로 연동하는 기능을 가지고 있다.

먼저 npm을 사용하여 설치를 한다.

npm install --save ghost-s3-storage  

다음은 Ghost의 storage 플러그인으로 복사를 한다. ./content/storage/ 디렉토리가 없으면 생성한다.

mkdir -p ./content/storage/  

다음은 ghost-s3-storage를 ./content/storage/ 아래에 복사한다.

cp -r ./node_modules/ghost-s3-storage ./content/storage/ghost-s3  

다음은 ./config.js 파일을 열어서 다음 내용을 추가한다.

storage: {  
    active: 'ghost-s3',
    'ghost-s3': {
        accessKeyId: 'Put_your_access_key_here',
        secretAccessKey: 'Put_your_secret_key_here',
        bucket: 'Put_your_bucket_name',
        region: 'Put_your_bucket_region',
        assetHost: 'Put_your_cdn_url*'
    }
},

이렇게 Ghost에 S3 연동하는 플러그인을 설치후 ./config.js에 설정하고 난 뒤 AWS Beanstalk에 다시 deploy 하면 된다.

git add . && git commit -m "add ghost-s3-storage plugin"  
eb deploy  

이제 Ghost의 Markdown editor에서 이미지를 첨부하면 자동으로 S3에 이미지 파일이 업로드되고 S3의 URL을 가져와 사용할 수 있게 되었다. 실제 Ghost의 데이터베이스는 Markdown과 HTML 형태로 컨텐츠가 저장되고 물리적인 파일은 S3에 저장하게 된다.