Django 프로젝트 클라우드 서버 배포(nginx,uwsgi,git 활용)

이 포스트는 완성된 로컬 Django 프로젝트만 있는 상태에서 이를 Git을 통해 원격디렉토리에 저장하고, 처음 생성된 클라우드 서버 환경에 배포하는 것을 가정하고 있습니다.


프로젝트 관련 준비

Git 설정 및 원격저장소에 저장

프로젝트가 로컬(개발PC환경)에서 runserver로 잘 동작되는 것이 확인되었다면 git에 올리는 작업을 합니다.

우선 django 설정이 모든 host 요청을 허용하는지 확인해주세요.
[참고]http://vezi95.blogspot.com/2016/06/django-debug-false-allowedhosts.html

  1. Django 프로젝트 위치에서 git init 명령어 실행
    저의 경우 django-proj 밑에 가상환경 폴더와 웹프로젝트 폴더가 있었습니다(아래 이미지 참고). 깃을 설치하고 Git Bash를 통해 django-proj 위치에서 git init을 실행하여 git 사용 준비를 합니다.

  2. .gitignore 파일을 생성하고 가상환경 디렉토리 적기
    .gitignore 파일을 프로젝트 위치에서 생성합니다.
    touch .gitignore
    .gitignore 파일을 열어 가상환경 디렉토리를 추가합니다.
    저는 vi를 활용했습니다.
    vi .gitignore
    .gitignore에 가상환경 디렉토리를 적은 후 저장합니다. 저의 경우 venv/를 입력하면 됩니다.

  3. 파이썬 패키지 목록 생성하기
    터미널을 열어 프로젝트 가상환경을 activate 합니다.
    pip freeze > requirements.txt 를 실행하여 패키지 리스트를 생성합니다.

  4. 다시 Git Bash에서 git add . 명령어 실행 후 git commit 진행합니다.

  5. 원격저장소에 프로젝트 소스 올리기
    원격 저장소를 생성하고 push 합니다. 아래 블로그를 참고해주세요.
    https://www.zerocho.com/category/Git/post/581042fdcae2d100152ceae6

로컬 환경 파악하기

개발환경과 배포 환경을 맞추기 위해 파이썬 버전을 확인합니다.

  1. 터미널에서 python 버전을 확인합니다.
    저는 가상환경을 만들 때 파이썬 버전을 따로 지정하지 않고 만들었기 때문에 python 명령어에 기본적으로 실행되는 파이썬 버전을 조회합니다. 저는 3.9.0 버전이였습니다.
    python --version

서버 관련 준비

파이썬 관련 셋팅

  1. apt-get 최신버전 업데이트 하기
    sudo apt-get update
    sudo apt-get upgrade

  2. 파이썬 설치하기
    제 클라우드 서버 OS는 ubuntu-16.04이기 때문에 기본으로 설치되어 있는 파이썬이 있습니다. 하지만 제 개발PC와 버전이 다르므로 아래 링크를 참고하여 파이썬 설치 및 기본 파이썬 설정을해줍니다.
    https://dlehdgml0480.tistory.com/8

  3. pip 설치하기
    apt-get install python3-pip


배포

Git에서 프로젝트 받아오기

  1. 프로젝트 폴더 생성 후 이동
    mkdir django-proj
    cd django-proj

  2. Git clone을 통해 프로젝트 소스 받아오기
    우분투는 git이 기본적으로 설치되어 있습니다.
    git clone [저장소 주소]

  3. git에서 받아온 폴더에서 프로젝트 폴더로 옮기기
    cd [git으로 저장된 폴더이름]
    mv [프로젝트 폴더 이름. 저의 경우 webproj]/ ..
    mv requirements.txt ..
    cd ..
    rm -r [git으로 저장된 폴더이름]

가상환경 관련 설정

  1. 가상환경 만들기
    python -m venv venv
  2. 가상환경을 실행
    source venv/bin/activate
  3. 필요한 파이썬 패키지를 설치
    pip install -r requirements.txt

uwsgi

다음 유튜브 영상을 참고하였습니다.
https://www.youtube.com/watch?v=oGQ1HteFYnQ
(영상 24분부터가 아래 내용입니다.)

파이썬 프로젝트와 서버를 이어줄 uwsgi를 설치하고 실행합니다. uwsgi를 통해 많은 요청을 처리할 수 있습니다.

  1. uwsgi 설치
    pip install uwsgi
  2. 설정파일 작성
    프로젝트 폴더에서(==manage.py 파일이 있는 위치)에서vi uwsgi.ini로 에디터 실행 후 다음과 같이 내용 작성
    [uwsgi]
    chdir={프로젝트 폴더 절대경로}
    module={프로젝트 내 파일이름}.wsgi:application
    master=True
    pidfile=/tmp/project-master.pid
    vacuum=True
    max-requests=5000
    daemonize={프로젝트 폴더 절대경로}/django.log
    home={프로젝트 가상환경 폴더 절대경로}
    virtualenv={프로젝트 가상환경 폴더 절대경로}
    socket={프로젝트 폴더 절대경로}/uwsgi.sock
    chmod-socket=666
  3. 작성된 파일을 바탕으로 uwsgi를 실행합니다.
    uwsgi --ini uwsgi.ini

nginx

  1. nginx 설치
    sudo apt-get install nginx

  2. 설정파일 수정
    sudo vi /etc/nginx/nginx.conf
    http 안에 다음과 같은 문장 삽입

upstream django{
	server unix:{프로젝트 폴더 절대경로}/uwsgi.sock;
}
  1. nginx default 설정 변경
    sudo vi /etc/nginx/sites-enabled/default
    server에 location / 에 다음 내용 추가
    include /etc/nginx/uwsgi_params;
    uwsgi_pass django;
    server에 다음 내용 추가
location /static/ {
	alias {static 디렉토리 절대경로}/;
}
  1. 서버 구동
    sudo service nginx restart
    80포트가 열려있는지 확인 필수

참고사항

  • 소스코드 변경이나 서버 재구동시 uwsgi도 다시 실행해야함.

좋은 웹페이지 즐겨찾기