(Django) Ubuntu 환경에서 배포하기

Overview

Ubuntu 환경에서 Python 3.6을 설치하고 Django 서버를 세팅 해보도록 할 것이다. EC2 인스턴스를 생성 하였으며, SSH 연결까지 된 상황이라고 가정하고 진행했다.

이 곳을 참고해 진행했다.

목차

Ubuntu 패키지 업데이트

$ sudo apt-get update && sudo apt-get upgrade -y

Installing Python3.6.x on AWS EC2 (ubuntu 16.04)

We will download the tar.xz file from official site and than manually install it. Before that we need to install some required dependencies.

패키지 설치

$ sudo apt install build-essential checkinstall
$ sudo apt install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

Python 3.6 버전 설치

$ cd /opt && sudo wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tar.xz
$ sudo tar -xvf Python-3.6.6.tar.xz
$ cd Python-3.6.6/
$ sudo ./configure
$ sudo make && sudo make install

다운로드 파일 삭제

$ sudo rm -rf Python-3.6.6.tar.xz

Python 버전 확인

$ python3 -V
Python 3.6.6

어플리케이션을 위한 우분투 유저 세팅

Django itself is very secure framework, I agree. But web applications are still vulnerable. It is good practice to run your application as system users with limited privileges which has limited access to resources on your server. So in this section, we will be adding a new user & permission group to our EC2 instance.

우분투 시스템 그룹(Tirrilee-dev)을 추가 하고 유저(Jangwon) 등록

$ sudo groupadd --system Tirrilee-dev
$ sudo useradd --system --gid Tirrilee-dev --shell /bin/bash --home /Tirrilee-dev/Project Jangwon
$ sudo passwd Jangwon

여기서 Project은 Django 프로젝트 생성시 설정할 프로젝트 이름이다.

프로젝트를 저장할 폴더 생성

$ sudo mkdir -p /Tirrilee-dev/Project/
$ sudo chown Jangwon /Tirrilee-dev/Project/

설정한 그룹 외 유저들이 해당 폴더에 접근하지 못하도록 설정

$ sudo chown -R Jangwon:users /Tirrilee-dev/Project
$ sudo chmod -R g+w /Tirrilee-dev/Project

설정한 유저로 변경

$ sudo su - Jangwon

// 콘솔이 아래처럼 변경됩니다
Jangwon@ip-172-31-5-231:~$

EC2에서 Python 가상환경에 Git을 통해 Django 앱 배포하기

Deploying your app using a virtual environment allows your app and its requirements to be handled separately. It is good practice to keep your app isolated.

Using the environment concept is handy when you are deploying more than one Django app on a single instance to keep them and their dependencies isolated from each other.

We will be creating a virtual environment in our system user (bunny) directory. Before that we will be installing git as a sudo user.

Git을 설치하고 저장소에서 소스 불러오기

$ sudo apt-get install git
$ sudo su - Jangwon
// change to your repo https or ssh link
Jangwon@ip-172-31-5-231:~$ git init
Jangwon@ip-172-31-5-231:~$ git remote add origin https://github.com/wkddnjset/RSP-Django
Jangwon@ip-172-31-5-231:~$ git pull origin master

동일한 디렉토리에 Python 3.6 가상환경 설치

Jangwon@ip-172-31-5-231:~$ python3.6 -m venv .
Jangwon@ip-172-31-5-231:~$ source bin/activate
(Project)Jangwon@ip-172-31-5-231:~$ pip install -r requirements.txt

Django 환경 설정 및 실행

(Project)Jangwon@ip-172-31-5-231:~$ python manage.py migrate
(Project)Jangwon@ip-172-31-5-231:~$ python manage.py createsuperuser
(Project)Jangwon@ip-172-31-5-231:~$ python manage.py collectstatic
(Project)Jangwon@ip-172-31-5-231:~$ python manage.py runserver 0.0.0.0:8000

http://[Your-IP]:8000

위 링크에서 정상 작동하는 것을 확인 할 수 있다.