당신은 멋쟁이, 우리는 장고쟁이~

0%

TodoList 21편 - AWS EC2에 배포 시작

AWS EC2에 배포 시작


지난 포스팅에서,


EC2 인스턴스에 연결도 진행하였고, 프로젝트 폴더도 해당 인스턴스에 업로드도 가능했습니다.


이제 기본 배포 진행을 해보려 합니다. 우선 EC2 인스턴스에 접속해서, 기본 우분투 세팅을 해줍니다.


1
2
ubuntu@ip-172-31-32-46:~$ sudo apt update 
ubuntu@ip-172-31-32-46:~$ sudo apt install python3-pip vim


관련 패키지들 설치


1
sudo apt install python3-pip vim

python3, pip, vim 을 설치해줍니다.


nginx 설치 및 세팅


1
sudo apt install nginx

nginx 란?

2002년부터 러시아의 프로그래머 이고르 시쇼브(Игорь Сысоев)가 Apache HTTPd를 코딩하다 Apache의 C10K 문제[1]를 보고, 이를 극복하기 위해서 네이티브 Win32 환경에도 돌아갈 무설치 웹 서버 데몬 프로그램에 대한 개발을 시작하여 2004년 스푸트니크 1호 발사일에 발표한 오픈 소스 웹 서버 프로그램. 현재 이고르 시쇼브와 그가 설립한 회사인 NGINX, Inc.가 이 프로젝트를 운영 중에 있다.[2] 목표는 가벼우면서도 강력한 프로그램이라고 한다. HTTP와 리버스 프록시, IMAP/POP3 등의 서버 구동이 가능하다. Java 서블릿은 대개 Apache의 톰캣을 연동해서 구동하고, PHP의 경우 PHP-FPM(FastCGI Process Manager)을 연동해서 구동한다.


nginx 설치가 완료되었으면, 환경 설정을 위해서, sudo su 를 사용. 루트로 들어가준다


1
2
3
4
5
6
7
8
9
10
11
12
13
cd /etc/nginx/sites-available/ 폴더에 접속해본다 

접속한 후에, ls 를 실행하여, 폴더안에 무엇이 있는지 확인 해보면,
default 라는 항목만 존재하는것을 확인 할수 있다.

ubuntu@ip-172-31-32-46:~$ sudo su
root@ip-172-31-32-46:/home/ubuntu# cd /etc/nginx/sites-available/
root@ip-172-31-32-46:/etc/nginx/sites-available# ls
default
root@ip-172-31-32-46:/etc/nginx/sites-available# mv default default.bak
root@ip-172-31-32-46:/etc/nginx/sites-available# ls
default.bak
root@ip-172-31-32-46:/etc/nginx/sites-available# vim default


default 파일을 vim 을 통해서, 아래와 같은 내용을 추가후 저장 종료


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
upstream django{
server 127.0.0.1:8000;
}

server {
listen 80;
proxy_set_header X-Forwarded-Photo $scheme;

# gunicorn app
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Url-Scheme $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;

proxy_redirect off;

proxy_pass http://django;

}

location /static/ {
autoindex on;
}


location /media/ {
autoindex on;
}
}

service nginx restart 명령어 실행


1
root@ip-172-31-32-46:/etc/nginx/sites-available# service nginx restart


EC2 에서 일반 우분투 터미널로 복귀

1
2
3
4
root@ip-172-31-32-46:/etc/nginx/sites-available# exit
exit
ubuntu@ip-172-31-32-46:~$ ls
ubuntu@ip-172-31-32-46:~$


업로드된 프로젝트로 이동


지난 포스팅에서 프로젝트 폴더를 EC2 에 업로드 해주었었는데.


해당 폴더로 EC2에서 들어가 줍니다.


1
2
3
4
5
6
ubuntu@ip-172-31-32-46:~$ ls
todolist
ubuntu@ip-172-31-32-46:~$ cd todolist
ubuntu@ip-172-31-32-46:~/todolist$ ls
config deploy.sh requirements.txt static todo
db.sqlite3 manage.py secrets.json templates

pip3 install -r requirements.txt 명령어를 실행하여, 패키지를 설치해줍니다.


1
2
3
4
5
ubuntu@ip-172-31-32-46:~/todolist$ pip3 install -r requirements.txt 

# 실행후, makemigrations, migrate 를 해줍니다.
ubuntu@ip-172-31-32-46:~$ python3 manage.py makemigrations
ubuntu@ip-172-31-32-46:~$ python3 manage.py migrate

settings.py 파일 수정


settings.py 파일안에, ALLOWED_HOSTS 에, EC2 주소를 추가해 줍니다.


1
2
3
4
ALLOWED_HOSTS = [
'localhost',
'127.0.0.1',
'15.164.97.104',] # EC2 주소


EC2에서 서버 실행 작동 테스트


1
2
3
4
5
6
ubuntu@ip-172-31-32-46:~$ python3 manage.py runserver
System check identified no issues (0 silenced).
May 20, 2020 - 02:11:11
Django version 3.0.6, using settings 'config.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

서버를 실행 시켜 놓은 상태로, 브라우저에 접속해서, EC2 IP 주소를 입력해 보면

투두리스트가 뜨긴 뜨는데.. CSS와 이미지 적용이 전혀 되지 않은 내용이 브라우저에 표시가 되는걸 확인할수 있었습니다.


일단 잘 작동하는것은 확인 하였으니, 서버를 종료 시켜 줍니다.

마치며..


Django 에서 가장 큰 어려움은, 배포인것 같습니다.

특히, 위의 nginx 는 사용하지 않아도 서버를 실행시키면, 배포가 완료 되긴 하는데;;; 왜 사용하는지도 잘 모르겠고.

nginx 에 대한 설명과 자료들도 굉장히 빈약합니다. 무엇보다 초심자를 위한 설명은 없는듯 합니다;;;