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 libpq-dev python-dev
$ 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

RSA Key를 이용한 Git 연결

https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent

$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
$ eval "$(ssh-agent -s)"
$ sudo vi ~/.ssh/config

아래와 같이 내용을 적습니다. Edit은 i

Host *
  AddKeysToAgent yes
  IdentityFile ~/.ssh/id_rsa

위의 내용을 복사 붙여 넣기를 한 후 esc -> : -> wq를 순서대로 눌러 저장합니다.

$ ssh-add -k ~/.ssh/id_rsa

복사가 잘 안될 경우 아래 명령어를 이용하여 파일을 연 후 복사를 하고 :wq -> enter를 눌러 저장합니다.

$ sudo vi ~/.ssh/id_rsa.pub

아래의 url에 접속합니다.

Github ssh

  • Add SSH key를 누른 후 Title은 프로젝트 명 Key에는 복사한 값을 붙여 넣고 Add SSH Key를 합니다.

프로젝트 다운로드

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

$ git clone <git@github.com:my_git_username/my_project.git>
$ cd my_project

pyenv 설정

$ pyenv install 3.7.3
$ pyenv virtualenv 3.7.3 mysite_venv
$ pyenv local mysite_venv

프로젝트 requirements 설치

$ pip install -r requirements.txt 

gunicorn 설정

Gunicorn 설치

$ pyenv virtualenv 3.7.3 gunicorn
$ pyenv shell gunicorn
$ pip install gunicorn

gunicorn 서비스 파일 작성

$ sudo vi /etc/systemd/system/gunicorn.service
[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=ubuntu
Group=ubuntu
WorkingDirectory=/home/ubuntu/<project directory>
ExecStart=/home/ubuntu/.pyenv/versions/<pyenv name>/bin/gunicorn --access-logfile /srv/gunicorn/logs/gunicorn-access.log --error-logfile /srv/gunicorn/logs/gunicorn-error.log --access-logformat "{'remote_ip':'%(h)s','request_id':'%({X-Request-Id}i)s','response_code':'%(s)s','request_method':'%(m)s','request_path':'%(U)s','request_querystring':'%(q)s','request_timetaken':'%(D)s','response_length':'%(B)s'}" --worker-class=gevent --worker-connections=1000 --workers=4 --bind unix:/srv/gunicorn/gunicorn.sock config.wsgi:application

[Install]
WantedBy=multi-user.target

파일 서비스 연결

$ sudo systemctl daemon-reload
$ sudo systemctl enable gunicorn

소켓파일 경로 권한 설정

$ sudo chmod 777 /srv
$ take /srv/gunicorn

Nginx 관련 설정

Nginx 설치

$ sudo apt-get install software-properties-common
$ 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
server {
    server_name <server address>;
    location /static/ {
        root /home/ubuntu/my_project;
    }
    location /media/ {
        root /home/ubuntu/my_project;
    }
    location / {
        include proxy_params;
        proxy_pass http://unix:/srv/gunicorn/gunicorn.sock;
    }
    listen 80;
}
$ 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 gunicorn nginx

Celery 데몬화

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

EC2 배포 설정

Published on April 11, 2019