카테고리 없음

Django 서버 AWS로 배포하기 (with Linux)

Khyst 2020. 2. 13. 05:49

Django서버를 AWS로 배포하려면 Amazon의 EC2 Instance를 이용해야 하는 것인데,

EC2 Instance는 Linux로 되어있는 가상 서버이고 이를 활용하기 위해 Linux 명령어를 익힐 필요가 있다.

(간단하게, EC2 Instance는 온라인으로 서버를 실행하기 위한 하나의 가상 컴퓨터라고 생각하자 )

 

필자가 사용한 방법에는 두가지가 있는데

1. EBCLI을 이용해서, visual code에서 직접

2. EC2 Instance를 직접 만들어주고 Ubuntu환경에서

 

여기서 1은 wsgi.py에서의 에러가 끝끝내 해결되지 못하고, 배포도 못하고 접게 되는 상황이 되었다.

그래서, 1의 방법은 완전히 접고, 2의 방법으로 새롭게 배포하는 과정을 적어보려고 한다.

 


#Step 1. AWS 로그인

https://aws.amazon.com/ 에 접속하고, 사용자 로그인을 한다.

 

클라우드 서비스 | 클라우드 컴퓨팅 솔루션| Amazon Web Services

미디어 및 엔터테인먼트 Live Nation Entertainment, AWS를 사용하여 혁신 속도를 높이고 비용을 절감하며 애플리케이션 가용성을 개선 세계 최고의 라이브 엔터테인먼트 기업이 어떻게 AWS 클라우드를 사용하여 고객에게 개선된 경험을 더욱 빠르게 제공하는지 알아보십시오. 자세히 알아보기  보다 나은 고객 경험 추구 Live Nation은 콘서트를 제작하고, 티켓을 판매하고, 밴드를 음악과 연결해주는 세계 최고의 라이브 엔터테인먼트 기업입니다

aws.amazon.com

 

#Step 2. AWS management Console 세팅

로그인을 했을 때, 아래와 같은 창이 뜬다.

- 여기서, 우측 상단에 지역명이 보이는 메뉴바가 있는 데, 초기에는 서울이 아닌 미국(오레곤)으로 설정되어 있을 것이므로 클릭해서 서울로 바꿔주자.

 

#Step 3.

서비스 찾기에서 IAM을 검색하고, 위와 같이 나오면 클릭해서 들어가자

 

*IAM? (https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/id_roles.html)

Amazon Web Service를 이용하기 위해 가입한 계정은 Root 계정으로 모든 권한을 이용가능하게 한다, 따라서 이를 이용하면 보안성에 있어서 취약하다.

따라서 IAM을 생성하게 되는데, IAM특정 권한을 가진 계정이다. 따라서 특정 Application을 배포하는데에는 Root계정이 아닌 IAM계정을 사용하는 것이 바람직 하다.

 

#Step 4. IAM 계정 생성

- IAM에 들어왔으면, 왼쪽 사이드 메뉴에 [ 액세스 관리 -> 사용자 ]를 클릭 한다.

- 클릭 하고, 오른쪽에 파란색 사용자 추가 버튼을 클릭 한다.

- 사용자 이름을 적고, (자기가 원하는 대로 입력하면 된다.) 프로그래밍 방식 액세스를 클릭하고, 다음: 권한 클릭

- 기존 정책 직접 연결을 선택하고, AmazonEC2FULLACCESS를 선택한다. 그리고 다음:태그 클릭

- 현재로선, 딱히 필요가 없으므로 생략하자. 다음:검토 클릭

- 위와 같은 안내 페이지가 뜬다, IAM 사용자에대한 소개 페이지이다. 넘어가고 사용자 만들기 클릭

 

- 다음과 같이 IAM 사용자 계정을 성공적으로 만들었다는 창이 뜬다. 액세스 키 ID와 비밀 액세스 키가 나오는데, 이 창을 닫으면 앞으로는 확인이 불가능 하므로, .csv파일을 다운로드 받아서, 연결하고 싶은 프로젝트 폴더내부에 저장해두자. ( 엄연히 보안키이므로 여기서의 .csv파일은 외부에 공개되지 않도록 주의하자. )

 

 

# Step 5. EC2 Instance 생성

- 다시 위와 같은 Management창으로 나와서 서비스 찾기에서 ec2를 검색하고, EC2를 클릭한다

 

- 실행중인 인스턴스를 클릭 (왼쪽 사이드 바에 있는 인스턴스를 클릭해도 상관없고, 인스턴스 창에만 들어가면 된다)

 

 

위와 같은 창이 나온다,

(현재 3개의 목록은 각각 장고 프로젝트의 배포를 위해 Amazon 서버에서 돌아가기 위해서 만들어진 EC2 Instance이다.)

- 인스턴스 시작버튼을 누르자.

 

- Ubuntu 서버를 이용할 것이기 떄문에, Ubuntu 서버를 선택하자 (둘중 하나 아무거나 상관없다. 최근버전이 좋을듯)

 

- 공짜로 배포를 할수 있는 프리 티어를 이용할 것이기 때문에, 프리티어 사용가능한 두번째 칸을 선택하고

- 검토 및 시작버튼을 클릭한다.

위 창이 뜰것이다. EC2 Instance에 대한 세부적인 내용들이다.

- 시작하기 버튼을 클릭해서 본격적으로 EC2 인스턴스를 생성하자.

 

위와 같은 창이 뜰것이다.

이는 나중에 외부 컴퓨터에서 AWS의 서버(EC2 인스턴스)로 접근할 때 필요한 키를 발급해주는 창이다

 

- 새 키 페어 생성 옵션을 누르고, 키 페어 이름을 사용자 임의로 적고, 다운로드 하자.

- 다운로드 받았다면 인스턴스 시작을 클릭!

 

짜잔! Amazon Server에서 인스턴스(사용자의 서버용 컴퓨터)가 생성되었고 실행중이다.

 

# Step 6. 사용자의 Django 프로젝트를 AWS Instance(인스턴스)에 연결

 

다시 EC2의 인스턴스 관리 페이지로 들어오자. ( EC2 -> 실행중인 인스턴스 )

- 방금 생성한 인스턴스가 보일 것이다. 이를 우클릭하고 연결을 클릭하면, 

위와 같은 창이 뜨는데 AWS 인스턴스에 연결하기 위한 여러가지 방법이 제시되어 있다.

여기서 putty를 사용해 연결하기를 클릭하면 putty연결에 대한 가이드라인이 AWS에서 제공되어 있다.

 

# Step 7. putty사용해서 AWS 인스턴스에 연결하기

 

위 가이드라인을 클릭하면 아래와 같은 창이 뜬다. X됬다

이를 쭉 보면서 따라하면 되는데, 여기서 나온대로 정리를 해보면..

전제조건 ( AWS 서버로의 연결을 위한 )

더보기

1. 실행하려는 인스턴스가 준비되어 있는지 확인하고 ( 확인됨 )

2. 너의 인스턴스를 연결하기위한 General prerequisites를 확인한다. ( 확인했다고 치자 (넘어가도 될거 같다) )

 

3. PuTTY를 깔자

 

4. PuTTYgen을 이용해서 privatekey(아까 다운받았던 .pem키!!)를 ppk로 바꾸자.

 

 

- 일단 PuTTYPuTTYgen을 설치하는게 우선이다 아래 두 페이지에서 프로그램들을 깔자.

https://www.chiark.greenend.org.uk/~sgtatham/putty/

 

PuTTY: a free SSH and Telnet client

PuTTY: a free SSH and Telnet client Home | FAQ | Feedback | Licence | Updates | Mirrors | Keys | Links | Team Download: Stable · Snapshot | Docs | Changes | Wishlist PuTTY is a free implementation of SSH and Telnet for Windows and Unix platforms, along wit

www.chiark.greenend.org.uk

https://www.puttygen.com/#Download_PuTTYgen_on_Windows

 

PuTTYgen Download

Download PuTTYgen for Windows, Linux and Mac operating system. Find step by step guide to downloading PuTTYgen, a key generator for free.

www.puttygen.com

 

- 둘다 설치가 되었다면, PuTTYgen먼저 실행하자.

 

위와 같은 창이 실행되면, Actions에서 Load를 클릭한다.

- .pem 키를 선택해주면 되는데, 초반에 .ppk가 선택 옵션으로 선택 되있으므로, 이를 All Files(*.*)로 바꿔주고

- .pem키를 선택한다.

 

- pem키가 로드 됬다면, 이제 Action에서 Save private key를 눌러서 .ppk를 저장한다.

.ppk 파일은 앞으로 putty를 이용해서 Linux로 이루어진 AWS EC2 인스턴스 서버를 접근하는데 열쇠가 되는 파일이다.

 

- 이제 PuTTY를 실행하자, 아래와 같은 창이 뜰것이다.

푸티는 나중에 서버쪽 프로그래밍에 흔하게 사용되므로 사용법을 알아두는 것을 추천한다.

 

HostName(or IP address)


- <사용자 이름> @ <인스턴스의 주소> <- 왼쪽과 같이 적으면 된다.

 

** 여기서 사용자 이름은 진짜 사용자 이름 khyst(예시..)를 적는게 아닌 ubuntu를 적어줘야 하더라.... 

관련 페이지 : https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html#TroubleshootingInstancesConnectingPuTTY

 

그렇다면 인스턴스에 대한 DNSaddress는 어떻게 알까?!!

- 다시 아까 EC2 관리 페이지로 들어가고, 사용하려는 인스턴스를 클릭한다.

- 클릭하고 하단에 설명부분을 보니 퍼블릭 DNS(IPv4)가 있는데 그곳에 있는 내용이 DNS 주소이다.

이를 복사해서 사용하자.

 

이렇게 하면, 나와 같은 경우는 HOST에 다음과 같이 입력하게 되었다

< ubuntu@ec2-54-180-113-125.ap-northeast-2.compute.amazonaws.com >

 


Connection-Type을 SSH로 설정하고, Port를 22로 설정 한다.


그다음 좌측에 Category메뉴에서 Connection - SSH - Auth를 클릭하자.

- 위와 같은 창이 나온다. 노란색 형광펜칠 한 곳으로 아까 말한 .ppk(열쇠?)가 들어가게 되는데, Browse를 클릭하자

ppk파일이 가져와졌다, 이제 다시 Session으로 들어가서 마지막으로 확인을 해보고, Open을 클릭해서 접속을 해보자

 

정상 접속이 되었다. 이제 이 터미널환경을 서버배포를 위해 사용되는 터미널로써 사용하면된다.

 

pwd를 타이핑해서 어떤 구조로 되어있는지 확인해보자. 

현재 /home/ubuntu 디렉토리에 있는 걸 알수있다. 

 

조금더 분석을 하기 위해서

cd ... 을 타이핑해서 두 단계 디렉토리 앞으로 가고

ls 를 타이핑해서 어떤 파일이 있는지 확인 해포자

음 뭔가 복잡해졌다. 우리가 사용하는 AWS 인스턴스를 구성하는 여러가지 파일들이다. 여기까지는 손대지 말고 넘어 가도록 하자. 참고로 AWS 인스턴스에는 이미 가상환경(VirtualEnv)이 깔려있다고 가정하면 생각하면 된다.

 

다시 cd home/ubuntu로 원위치로 돌아가자

원위치로 돌아왔다는 이미지

이제 로컬에서 python 장고 서버를 실행할때와 비슷하게 세팅해주면 되는데. 여기서 github의 레포지토리가 사용된다. 

( 미리 github 레포지토리를 생성하고, 장고 프로젝트를 git add, commit까지 해서 레포지토리에 넣어주는 과정이 필요한데 대부분이 알거라고 생각해서 생략한다.... )

 

- sudo apt-get update 입력

: 설치되어 있는 패키지를 모두 새버전으로 업그래이드 하는 명령어

 

- sudo apt-get install git 입력 (설치중 옵션에서 : 'y')

: git을 설치하는 명령어

 

- sudo apt-get install python3-pip 입력 (설치중 옵션에서 : 'y')

: python3을 설치하는 명령어

 

- sudo pip3 install django==2.2.1 입력

: 장고를 설치하는 명령어 ( version은 로컬 프로젝트의 터미널에서 pip freeze 명령어를 통해서 장고 버전을 확인하고 그에 맞는 버전을 대입해주면 된다.) 

 

*리눅스의 apt-get 명령어에 대한 설명은 오른쪽 블로그를 참고!! https://blog.outsider.ne.kr/346

 

Ubuntu의 apt-get 명령어 정리 :: Outsider's Dev Story

apt-get(Advanced Packaging Tool)은 우분투(Ubuntu)를 포함안 데비안(Debian)계열의 리눅스에서 쓰이는 팩키지 관리 명령어 도구입니다. 우분투에는 GUI로 되어 있는시냅틱 꾸러미 관리자도 있기는 하지만 이런...

blog.outsider.ne.kr

- git clone "<깃허브 레포지토리 링크>"

 

- python3 manage.py runserver 입력하고 서버가 정상 실행되면 Ctrl + C눌러서 종료

 

- EC2로 돌아와서 좌측메뉴에서 네트워크및 보안 > 보안그룹으로 들어가자

보안 그룹 창으로 들어왔을 때

- 가장 최근에 생성된 launch-wizard- 파일을 찾아서 클릭해주자 ( 방금 서버를 돌렸기 때문에 최근에 생성되었기 때문 )

필자의 컴퓨터 상으로는, 시간상으로 2020-02-13 04:31:19가 제일 빠르므로, launch-wizard-4가 방금 생성된 보안그룹임을 알 수 있다.

 

- 클릭하면, 하단의 인바운드를 누르고 편집을 눌러서 인바운드 규칙을 편집해주자.

- 편집을 누르면 다음과 같은 창이 나타나는데, 여기서 규칙추가 버튼을 누르고

- < 유형 : 사용자 지정 TCP /프로토콜 : TCP /포트범위 : 8000 > 으로 지정해주고 저장하자

 

- 이제 다시 putty로 돌아와서 python3 manage.py runserver 0.0.0.0:8000 을 입력해주면 정상적으로 배포가 완료되었다.!

 

아까 확인했었던 http://publicDNSaddress:8000로 접근하면 성공적으로 배포가 되있음을 확인할 수 있다.

예를 들어, 나의 경우에서는 ec2-54-180-113-125.ap-northeast-2.compute.amazonaws.com:8000으로 들어가면 정상접속이 된다!!