코딩공부/Server

Aws ec2를 이용해 Django 서버 배포하기 - nginx와 uwsgi 연결

integerJI 2020. 9. 10. 22:13

Aws ec2를 이용해 Django 서버 배포하기에 앞서

  • 네로의 다락방님의 글을 보며 진행하였습니다. 네로의 다락방님이 간결하고 알기 쉽게 설명해 주셔서 무사히 배포할 수 있었습니다. 감사합니다.
  • 해당 글은 저의 프로젝트 배포를 진행하며 생긴 문제점과 해결방안 등 다시 정리해가며 글을 새롭게 작성됩니다.
  • 진행하는 OS는 mac 환경입니다.
  • window 환경이라면 mobaxterm 사용을 추천드립니다. (따로 가이드 작성 예정)
  • 리눅스 명령어를 따로 설명하지 않습니다.
  • COVID-19-REPORT 프로젝트를 실제 사용해 보기 위하여 배포를 진행합니다.
  • 현재 글은 배포 방법만 정리하였으며 설명을 추가중에 있습니다.

 

 

nginx 설치 및 설정

sudo apt-get install nginx

 

nignx를 사용하기 위해 설치

 

sudo vi /etc/nginx/nginx.conf

 

vi 에디터를 사용해 nginx를 편집합니다.

 

 

user www-data -> user "배포용 게정"

 

 

vscode 설정

server {
    listen 80;
    server_name *.compute.amazonaws.com;
    charset utf-8;
    client_max_body_size 128M;

    location / {
        uwsgi_pass  unix:///tmp/mysite.sock;
        include     uwsgi_params;
    }
}

 

.config 폴더 아래에 mysite.conf를 넣어줍니다.

 

; #linku_uwsgi.ini file
[uwsgi]

; # Django-related settings
; # the base directory (full path)
chdir = /srv/covid-19-report/

; # Django's wsgi file
module = project.wsgi:application

; # the virtualenv (full path)
home = /home/ubuntu/myvenv/

socket = /tmp/mysite.sock
chmod-socket = 666
chown-socket = jsji:jsji

uid = jsji
gid = jsji

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

수정하면서 mysite.ini 파일도 수정합니다.

 

왜냐하면 uwsgi를 계속 켜둘 수 있도록 설정 파일을 추가해서 백그라운드에 계속 실행하도록 합니다.

 

(설명 추가 예정)

 

uwsgi.service 생성

[Unit]
Description=uWSGI service
After=syslog.target

[Service]
ExecStart=/home/ubuntu/myvenv/bin/uwsgi -i /srv/covid-19-report/.config/uwsgi/mysite.ini

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

[Install]
WantedBy=multi-user.target

 

관리자 권한으로 실행할 때의 명령어입니다. 이걸 service 로 등록하여 백그라운드에 계속 실행하게 할 거에요

 

aws 서버로 돌아가 git pull을 해줍니다.

 

 

pull을 해준 뒤 백그라운드 등록을 해줄겁니다.

 

uwsgi.service 파일을 데몬(백그라운드에 실행)에 등록해줍니다.

 

이 파일을 /etc/systemd/system/ 에 링크를 걸예정

 

(설명 추가)

 

sudo ln -f /srv/covid-19-report/.config/uwsgi/uwsgi.service /etc/systemd/system/uwsgi.service

 

sudo systemctl daemon-reload

 

데몬을 새로고침 해주고,

 

sudo systemctl enable uwsgi
sudo systemctl restart uwsgi

 

uwsgi 서비스를 사용 가능하게 변경해주고 restart 한 번 해줍니다.

 

Django에 nginx 등록

#1
sudo cp -f /srv/covid-19-report/.config/nginx/mysite.conf /etc/nginx/sites-available/mysite.conf

#2
sudo ln -sf /etc/nginx/sites-available/mysite.conf /etc/nginx/sites-enabled/mysite.conf

#3
sudo rm /etc/nginx/sites-enabled/default

 

#1 sites-available 경로로 git에서 가져온 mysite.conf를 복사하여 줍니다.

 

 

#2 sites-available에 복사된 mysite.conf 파일을 sites-enables폴더 안에서도 링크해줍니다.

 

 

#3 sites-enables폴더에 있는 default 파일을 삭제해줍니다. (저는 이미 삭제한 상태)

 

sudo systemctl daemon-reload
sudo systemctl restart uwsgi nginx

 

이제, 다시 데몬을 새로 고침 해주고 nginx와 uwsgi를 다시 실행해 줍니다.

 

인바운드 규칙 추가

 

인바운드 규칙 편집 들어가는 방법 >>> integer-ji.tistory.com/304

 

이제 포트 80에 대한 새로운 규칙을 추가해 줍니다.

 

포트번호 입력 없이 자신의 사이트로 접속하게 되면

 

ec2-13-125-216-23.ap-northeast-2.compute.amazonaws.com