1 minute read

AWS (Amazon Web Service) 와 같은 클라우드 서비스를 이용하면 필요한 만큼, 필요할때마다 원하는 성능의 서버를 사용할 수 있다. 특히 고성능의 서버가 필요한 빅 데이터 분석에서 하드웨어를 구입하지 않고 클릭 몇 번으로 원하는 서버를 구축할 수 있다는 점은 매우 큰 장점이 된다.

아마존에서 제공하는 주요 서비스는 다음과 같다.

Type Service Name Description
computing Amazone Elastic Compute Cloud (EC2) 클라우드 상의 가상 서버
storage Amazone Elastic Block Store (EBS) EC2용 블록 스토리지
storage Amazone Simple Storage Service (S3) 클라우드 상의 확장 가능한 스토리지
database Amazone Relational DB Service (RDS) 관리형 관계형 데이터베이스
database Amazone DynamoDB 관리형 NoSQL 데이터베이스
database Amazone ElastiCache 인 메모리 캐시

Django 프로젝트가 runserver까지 잘되는 걸 확안하면, 요 프로젝트 웹서버 세팅을 할 수 있다. 이 과정은 크게 Gunicorn와 Nginx 세팅으로 이루어진다. Gunicorn은 django 프로젝트를 특정포트로 실행시켜주는 것이다 (쉽게 말하면 백그라운드로 runserver해주는 효과). Nginx는 외부의 사용자가 도메인이나 ip를 치면 내부에서 특정 포트로 돌고 있는 django 프로젝트로 연결해 주는 역할을 한다.

Gunicorn 설정

먼저, Gunicorn을 설치한다.

pyenv activate blog
pip install gunicorn

Gunicorn 실행 스크립트를 다음과 같이 작성한다. 스크립트의 경로는 관리하기 편한데로 원하는 곳에 만들면 된다.

# vim startup.sh

#!/usr/bin/env bash

set -e

cd /home/ubuntu/myo/yogurt/yogurt   #manage.py가 있는 경로

nohup /home/ubuntu/.pyenv/versions/blog/bin/gunicorn \
    yogurt.wsgi:application -b 0.0.0.0:8080 \
    --pid /home/ubuntu/myo/yogurt.pid \
    --log-level DEBUG --log-file - &

Gunicorn 재시작과 멈춤 스크립트도 다음과 같이 작성한다.

# restart.sh

#!/usr/bin/env bash

PROG_DIR="/home/ubuntu/myo"

$PROG_DIR/shutdown.sh
$PROG_DIR/startup.sh
# vim shutdown.sh

#!/usr/bin/env bash

PID_FILE="/home/ubuntu/myo/yogurt.pid"

if [ -f $PID_FILE ]
then
    pid="$(<"$PID_FILE")"
    echo "$pid"
    kill $pid
    rm $PID_FILE
fi

Gunicorn이 잘 실행되었는지는 아래와 같이 확인할 수 있다. 프로세스에 떠있으면 잘 돌아가고 있는 것!

$ ps -ef|grep gunicorn
ubuntu    1184     1  0 00:20 pts/1    00:00:00 /home/ubuntu/.pyenv/versions/3.6.0/envs/blog/bin/python /home/ubuntu/.pyenv/versions/blog/bin/gunicorn yogurt.wsgi:application -b 0.0.0.0:8080 --pid /home/ubuntu/myo/yogurt.pid --log-level DEBUG --log-file -
ubuntu    1221  1184  0 00:20 pts/1    00:00:00 /home/ubuntu/.pyenv/versions/3.6.0/envs/blog/bin/python /home/ubuntu/.pyenv/versions/blog/bin/gunicorn yogurt.wsgi:application -b 0.0.0.0:8080 --pid /home/ubuntu/myo/yogurt.pid --log-level DEBUG --log-file -

Nginx 설정

Gunicorn 실행이 잘된것을 확인하고 나면, Nginx를 설정해야한다. 먼저 nginx를 설치한다.

sudo apt-get install nginx

그리고 sudo vi /etc/nginx/nginx.conf 를 열어서 django 프로젝트에 대한 설정을 추가한다.

http {
    ...
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;

    server {

           listen 80;
           server_name 172.31.12.182 52.78.35.22;

           access_log /var/log/nginx-access.log;
           error_log /var/log/nginx-error.log;
           root /home/ubuntu/project-root;

           location /assets {
               alias /home/ubuntu/myo/yogurt/yogurt/staticfiles;
           }

           location / {
               proxy_pass http://127.0.0.1:8080;
               proxy_set_header Host $host;
               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           }
    }
}

요렇게 nginx.conf에 직접 추가해도되고 /etc/nginx/conf.d/yogurt.conf 같은 파일으로 만들어서 관리해도 된다.

그리고 static파일 path설정도 추가는 것 잊으면 안된다!