EC2 배포 설정

Reading time ~2 minutes

local 설정

$ sudo vi /etc/default/locale

vi 명령을 통해 접근 후 아래 처럼 적습니다.

LC_CTYPE="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
LANG="en_US.UTF-8"

기본 설정

$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo apt-get install python-pip
$ sudo apt-get install zsh
$ sudo curl -L http://install.ohmyz.sh | sh
$ sudo chsh ubuntu -s /usr/bin/zsh

기본 설정이 끝난 후 exit으로 연결 종료 후 재 연결을 하여 변경된 zsh로 작업을 합니다.

pyenv 설치 및 설정

$ sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils
$ curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash

$ sudo vi ~/.zshrc vi 명령을 통해 접근 후 맨 아래에 아래과 같이 적습니다.

...
export PATH="/home/ubuntu/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

pillow ubuntu python 라이브라리 설치

$ sudo apt-get install python-dev python-setuptools
$ source ~/.zshrc

프로젝트 폴더 생성

$ take mysite

pyenv 설정

$ pyenv install 3.7.2
$ pyenv virtualenv 3.6.2 mysite_venv
$ pyenv local mysite_venv

프로젝트 다운로드

아래의 주소는 자기 레파지토리의 주소로 변경합니다.

$ git clone <https://my-github/repository.git>

프로젝트 requirements 설치

$ pip install -r requirements.txt 

uwsgi 설정

웹서버 관리용 유저 생성

$ sudo adduser deploy

uwsgi 설치

$ pyenv virtualenv 3.7.2 uwsgi-env
$ pyenv shell uwsgi-env
$ pip install uwsgi

uwsgi 사이트 파일 작성

$ cd /var/log/
$ sudo mkdir /uwsgi/
$ sudo chown -R ubuntu:ubuntu /srv/
$ cd /srv
$ mkdir uwsgi
$ vi uwsgi.ini
[uwsgi]
chdir = /home/ubuntu/myblog
module = <내 설정 파일>:application
env = DJANGO_SETTINGS_MODULE=<내 설정 파일>
home = /home/ubuntu/.pyenv/versions/mysite_venv

uid = deploy
gid = deploy

socket = /srv/uwsgi/uwsgi.sock
chmod-socket = 666
chown-socket = deploy:deploy

enable-threads = true
master = true
vacuum = true
pidfile = /tmp/mysite.pid
logto = /var/log/uwsgi/@(exec://date +%%Y-%%m-%%d).log
log-reopen = true

uwsgi 서비스 설정 파일 작성

$ vi /srv/uwsgi/uwsgi.service
[Unit]
Description=uWSGI Emperor service
After=syslog.target

[Service]
ExecStart=/home/ubuntu/.pyenv/versions/uwsgi-env/bin/uwsgi -i /srv/uwsgi/uwsgi.ini

Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all

[Install]
WantedBy=multi-user.target
$ sudo cp -f /srv/uwsgi/uwsgi.service /etc/systemd/system/uwsgi.service
$ sudo systemctl daemon-reload
$ sudo systemctl enable uwsgi

Nginx 관련 설정

Nginx 설치

$ sudo apt-get install software-properties-common python-software-properties
$ sudo add-apt-repository ppa:nginx/stable
$ sudo apt-get update
$ sudo apt-get install nginx
$ nginx -v

Nginx 설정 파일 작성

$ cd /etc/nginx/sites-available/
$ sudo vi mysite.conf
upstream django {
        server unix:/srv/uwsgi/uwsgi.sock;
}

server {
    listen 80;
    server_name <내 사이트 URL>;
    charset utf-8;
    client_max_body_size 256M;    
    location / {
        uwsgi_pass django;
        include /etc/nginx/uwsgi_params;
    }
    location /media/ {
		 alias /home/ubuntu/mysite/.media/;
	}
	location /static/ {
		alias /home/ubuntu/mysite/.static_root/;
	}
}
$ sudo ln -sf /etc/nginx/sites-available/mysite.conf /etc/nginx/sites-enabled/mysite.conf
$ sudo rm /etc/nginx/sites-enabled/default
$ sudo systemctl restart uwsgi nginx

Celery 데몬화

# Celery 데몬으로 관리하기### Celery 설정파일 작성하기```# vi /srv/celery/celery.confCELERYD_NODES="worker1"CELERY_BIN="/home/ubuntu/.pyenv/versions//bin...… Continue reading

EC2 배포 설정

Published on May 18, 2020