본문 바로가기

Programming/Web 개발

Amazon lightsail 을 활용한 Django 장고 프로젝트 배포하기 (1)

이 포스팅은 https://nerogarret.tistory.com/ 의 Amazon EC2를 활용한 장고 프로젝트 배포를 많이 참조하여 작성되었습니다.

이 포스팅 2020년 3월 27일 기준으로 작성되었으며, 이후에는 변동이 있을수도 있음을 알려드립니다.
추가적으로 그냥 한번 웹을 시험삼아 배포해보려는 목적이시라면 https://tutorial.djangogirls.org/ko/  를 따라 해보시기를 추천드리며 이 포스팅은 실제 장고를 기반으로 완성된 블로그 및 웹서비스를 아마존 라이트세일을 통해 배포하는 것에 초첨을 두고 있음을 알려드립니다.

아마존 라이트세일을 이용하게 된 가장 큰 이유는
1. 블로그와 같이 간단한 서비스를 배포하는 데 모든 조건을 충족하고 있으며,
2. 가격은 EC2에 비해 상대적으로 훨씬 저렴하지만 성능은 떨어지지 않으며,
3. 단순하다. (안 쓸 이유가 없잖아..?)

현재 저는 맥북 2015년형을 사용중이며, 맥을 중심으로 포스팅은 작성될 예정입니다.
윈도우와 큰 차이는 없을 것으로 예상되지만, 혹시나 차이가 있다면 댓글로 알려주시면 감사하겠습니다.

이 포스팅은 장고 프로젝트를 생성하는 것 까지 커버하지 않습니다.
만약 처음부터 pip install django 부터  django-admin startproject mysite . 과 같은 부분 까지의 지도가 필요하시다면 위의 장고걸스 포스팅을 참고해주세요.
지금부터는 현재 자신의 로컬서버에서 python manage.py runserver를 하였을 때 정상적으로 자신의 홈페이지가 잘 노출이 된다는 것을 가정하고 시작하도록 하겠습니다.

0. 로컬 세팅하기.

1. 로컬 컴퓨터 서버에서 자신이 장고 프로젝트를 빌딩했던 가상환경에 접속한 후,프로젝트 루트에서 다음의 명령어를 입력하여 장고 프로젝트를 빌딩하는 데 필요했던 패키지등을 requirements.txt에 옮겨준다.

pip3 freeze >> requirements.txt

2. (이미 되어있을 거라 믿지만 혹시 모르니) 깃헙에 프로젝트 폴더를 push해준다. (이 때 settings.py에 자신의 개인 비밀번호 등이 저장되어있으므로 가급적 private으로 한다.)

1. Amazon Lightsail 서버 임대하기

아마존 라이트세일을 임대하기 위해선 당연히 먼저 아마존에 가입을 한 뒤 https://lightsail.aws.amazon.com/ 에 접속한다.
1. 인스턴스 생성 버튼을 누른다.
2. 인스턴스 위치를 한국으로 설정해준다. (리전이 가까울수록 속도가 빨라진다고 생각하면 된다. 2016년에 한국에도 리전이 생겼다!)
3. 플랫폼: Linux/Unix를 선택한다.
4. OS 전용에 Ubuntu 18.04를 선택한다. (django를 선택해도 무방할 것 같지만, 기본 요금이 5$로 비싸다.)
5. 인스턴스 플랜을 선택한다. (나만의 블로그나 포트폴리오 사이트의 경우 3.5$도 충분하다. EC2의 t2.nano와 성능이 완전 동일하다고 보면 된다.)
6. 이름을 설정해주고(안해도 됨), 인스턴스 생성 버튼을 누른다. 끝. (정말 간단하다는 것을 체험할 수 있다..)

그러고 나면 아래와 같이 인스턴스가 생성중이며 1분 정도 지나면 클릭할 수있는 주황색으로 변경되게 된다.


주황색으로 변경되었다면 클릭하고 들어가보자.
이제 54.180.148.48(여러분은 다르겠죠?)과 같은 public IP가 생겼을 텐데 이는 고정 IP 생성 및 취소에 따라 값이 변할수도 있기 때문에 그러한 경우 매우 귀찮아질 수 있다. 네트워킹 탭을 클릭하여 고정 IP를 생성해주자.

고정 IP가 생성되었다면, 장고 프로젝트에서 이 곳으로의 접속을 승인해주어야 할테니 이를 위한 설정을 해준다.
settings.py에서 Allowed host 부분에 위의 고정 IP를 추가해준다. (이후 git에 다시 push해주는 것 필수)

ALLOWED_HOSTS = [
    '13.124.125.251', #자신의 고정 IP 주소
]


추가적으로 연결 창 하단에서 프라이빗 키를 다운받아준다.(이미 받아놓은 것이 있다면 자동으로 그 프라이빗 키와 연동될 것이다)
이는 곧바로 우리가 위에서 생성된 고정IP를 통해 인스턴스 서버에 접속할 수 있는 키가 될 것이다.
프라이빗 키를 다운받았다면 ~~~~.pem과 같은 형태일텐데 이를 root 폴더에서 .ssh/폴더로 이동시켜준다.
방법은 .pem이 위치한 폴더에서 아래의 명령어를 입력해주면 되며, 만약 .ssh 폴더가 없다면 mkdir을 통해 생성해준다.

mv ~~~~~.pem ~/.ssh/ 


이 때 .ssh 폴더로 이동해주는 이유는 키가 숨김폴더와 같이 안전한 곳에 위치해야하기 때문이며, 이후 .ssh 폴더로 이동하여, 아래의 명령어를 통해 user에게 읽기 권한만을 부여한다. chmod 이후 세자리는 각각 소유주, 그룹, 기타사용자를 뜻하며 4는 읽기 권한, 6은 읽기 및 쓰기, 7은 읽기 및 쓰기 및 실행을 뜻한다.

chmod 400 ~~~~~.pem

추가적으로 후에 우리가 서버에 접속하여 장고프로젝트를 실행 했을 때 그 결과를 확인할 수 있도록 포트를 하나 열어주자.
네트워킹에 방화벽에 다른항목추가를 클릭하여, (사용자지정, TCP, 8000)으로 설정해준다.

 

2. Amazon Lightsail 서버에 접속 및 세팅

이제 놀랍게도 우리는 아마존 라이트세일 서버에 접속할 수 있는 모든 조건을 갖췄다.
터미널을 켜서 다음을 입력해보자.
ubuntu는 원래 username이지만, 아마 초기설정은 다들 ubuntu로 되어있을테니 처음 이 블로그를 따라해보는 사람들이라면 아마 정상 작동할 것이다.

ssh -i ~/.ssh/(내 키 이름).pem ubuntu@(내 고정 IP)

 

아마존 라이트세일 서버 접속 성공

놀랍게도 이는 접속에 성공했다는 것..
그럼 이제 간단한 세팅을 해주자. 아래의 코드를 순서대로 입력한다.

 #패키지 정보 업데이트
 sudo apt-get update
 
 #패키지 의존성 검사 및 업그레이드, 추가 질문 모두 그냥 엔터.
 sudo apt-get dist-upgrade 
 
 #파이썬 패키지 매니저 설치
 sudo apt-get install python3-pip 
 
 #우리가 프로젝트 폴더를 clone할 srv폴더의 소유권을 ubuntu(사용자)로 변경
 sudo chown -R ubuntu:ubuntu /srv/ 
 
 #srv 폴더에 들어가서
 cd /srv
 
 #기존 깃헙에 올려놓은 프로젝트 다운로드 및 폴더에 들어가기
 git clone [레포지토리 주소]
 cd [프로젝트 이름]
 
 #requirements.txt에 옮겨놓은 패키지들을 새로운 가상환경을 세팅 후 그대로 설치하기
 sudo apt-get install python3-venv
 python3 -m venv myvenv
 source myvenv/bin/activate
 pip3 install -r requirements.txt
 
 #장고 프로젝트 실행! (아까 열어둔 포트번호 입력)
 python3 manage.py runserver 0:8000
 

이후 자신의 고정 IP를 활용하여 http://13.124.125.251:8080/ 에 접속해볼 것!
자신의 본래 블로그가 떠 있다면 성공이다!

이후 uWSGI와 nginx를 통한 연결은 다음에 업로드하도록 하겠다.
(단, 이후부터는 EC2나 기타 서버와 거의 진행방식이 동일하니 혹시 여기까지 따라하셨다면 다른 블로그 글을 참고해도 무방하다.

추천: https://nerogarret.tistory.com/47?category=800142

아마존 라이트세일을 통한 장고프로젝트 배포