AWS 환경 셋팅
- 추후 업데이트
1. Ghost 설치하기
아래는 간략하게 리스트만 기록해두고, 자세한 내용은 추후에 업데이트할 예정.
- node 설치
sudo apt-get update
sudo apt-get install git
wget https://nodejs.org/dist/v6.9.4/node-v6.9.4-linux-x64.tar.gz
mkdir node
tar xvf node-v*.tar.?z --strip-components=1 -C ./node
rm -rf node-v*
mkdir node/etc
echo 'prefix=/usr/local' > node/etc/npmrc
sudo mv node /opt/
sudo chown -R root: /opt/node
sudo ln -s /opt/node/bin/node /usr/local/bin/node
sudo ln -s /opt/node/bin/npm /usr/local/bin/npm
node -v
- yarn 설치
sudo npm install --global yarn
- ghost 다운로드
curl -L https://ghost.org/zip/ghost-latest.zip -o ghost-latest.zip
sudo apt-get install unzip
unzip ghost-latest.zip -d ghost && cd ghost
yarn install
- Nginx, MySql 설치
sudo apt-get install nginx
sudo apt-get install mysql-server
mysql -u root -p
- Knex-migrator
sudo npm install -g knex-migrator
- Configuration
$ cp core/server/config/env/config.production.json config.production.json
$ vi config.production.json
"url": "example.com",
"server": {
"host": "0.0.0.0"
},
- Run
NODE_ENV=production knex-migrator init
NODE_ENV=production node index.js
- 포트 80 to 2368 연결해줄 웹서버 설정하기
$ sudo vi /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 인증 적용하기
Letsencrypt 인증서 발급
$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
$ ./letsencrypt-auto --help
$ ./letsencrypt-auto certonly --standalone -d <example.com>
인증키 저장 위치
- 개인키:
/etc/letsencrypt/live/<example.com>/privkey.pem
- 인증키:
/etc/letsencrypt/live/<example.com>/fullchain.pem
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;
...
}
}
$ sudo service nginx restart
$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install python-certbot-nginx
$ sudo certbot --nginx
- Email Setting (Gmail SMTP)
"mail": {
"service": "Gmail",
"transport": "SMTP",
"options": {
"host": "smtp.gmail.com",
"secureConnection": "true",
"port": "465",
"auth": {
"user": "USERNAME",
"pass": "PASSWORD"
}
}
}
2. 부가기능 설치
Ghost-s3-storage 세팅하기
블로그에 업로드한 이미지를 기존의 웹 어플리케이션이 아닌, AWS S3에 저장한 후 AWS를 이용하여 클라이언트에게 CDN으로 전송하도록 하였다.
장점
- Digital Ocean은 이미지를 로드하는게 느리고, 용량제한이 있음
- scalable하게 관리해주는 AWS S3가 활용도가 높을 것으로 예상됨
사실은 단지 AWS S3 서비스를 이용해보고 싶어서. 처음이라.. - 앞으로 MarkDown을 많이 사용하면서 빠르게 컨텐츠를 업로드할 에정이라, 파일들을 쉽게 웹링크로 관리할 필요가 있다고 판단.
Setting up the Bucket
버킷 생성 후, Permissions > Bucket Policy 에 아래 코드 삽입
{
"Statement": [
{
"Action": "s3:GetObject",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*",
"Sid": "AllowPublicRead"
}
],
"Version": "2008-10-17"
}
Setting up the user
AWS 유저 셋팅 페이지 (Identity and Access Management)로 이동
- 새로운 유저 생성 후, Programmatic Access 부여
- Attach existing policy directly > AmazonS3FullAccess
- 생성 완료 후, Access key ID 와 Secret access key 복사
Integrating S3 and Ghost
npm install ghost-storage-adapter-s3
mkdir -p ./content/adapters/storage
cp -r ./node_modules/ghost-storage-adapter-s3 ./content/adapters/storage/s3
- Configuration
"storage": {
"active": "s3",
"s3": {
"accessKeyId": "YOUR_ACCESS_KEY_ID",
"assetHost": "YOUR_OPTIONAL_CDN_URL",
"bucket": "YOUR_BUCKET_NAME",
"pathPrefix": "YOUR_OPTIONAL_BUCKET_SUBDIRECTORY",
"region": "YOUR_REGION_SLUG",
"secretAccessKey": "YOUR_SECRET_ACCESS_KEY",
"endpoint": "YOUR_OPTIONAL_ENDPOINT_URL (only needed for 3rd party S3 providers)"
}
}
GHOST_STORAGE_ADAPTER_S3_ASSET_HOST // optional
GHOST_STORAGE_ADAPTER_S3_PATH_PREFIX // optional
GHOST_STORAGE_ADAPTER_S3_ENDPOINT // optional