본문 바로가기
DJango

[AWS 배포] DJango 프로젝트 AWS로 완벽하게 배포하기 (3) - 파이썬 패키지, 프로젝트 코드 내려받기 & 인바운드 규칙 편집, gunicorn 설치

by 지식을 쌓는 개구리 2024. 7. 7.

 

시작에 앞서 안내하는 말

이 포스트는 총 5개의 포스트로 이뤄져있으며

해당 포스트를 따라 차근차근 따라하면 AWS로 DJango 프로젝트 배포를 성공적으로 마칠 수 있게

사진을 포함한 명령어를 모두 정리하여 기술해두었다.

 

주의할 점과 또 부탁할 말은 아래 포스팅의 순서대로 꼭 모든 세팅과 과정을 잘 지키며 진행했으면 좋겠다.

 

이 5개의 글은 AWS로 DJango 프로젝트를 배포하는데 있어 이전에 내가 고민했던 것과 

경험했던 것과 오류의 해결법, 그리고 시행착오로 고생했던 것을 모두 반영하고

또 개념적인 설명도 함께 붙여 설명한다.

 

5개의 글을 빠짐없이 차근차근 따라온다면 문제없이 장고프로젝트를 배포에 성공할 수 있을 것이다.

잘 진행되길 바라고 또 문제가 있거나 배포 진행방식에 있어 더 좋은점이 있다면 

언제든 자유롭게 의견을 댓글로 달아주었으면 좋겠다.

순서

- 배포전 프로젝트 세팅 방법-

https://choiet.tistory.com/34

- 배포 진행 -

https://choiet.tistory.com/29

https://choiet.tistory.com/30

https://choiet.tistory.com/31

https://choiet.tistory.com/32

=> 순서를 꼭 잘 지켜 진행하자!

 

 

 

DJango 프로젝트 AWS로 완벽하게 배포하기 (3) - 파이썬 패키지, 프로젝트 코드 내려받기 & 인바운드 규칙 편집, gunicorn 설치

이번 시간에는 우리가 만들었던 프로젝트를 우분투 서버에 내려받고 실행 테스트도 해보고

유니콘이라는 것을 사용해서 서비스 가능하게 해보자

 

파이썬 패키지 & pyenv 다운받기

1. sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev

=> 이전에 했던 것처럼 인스턴스 연결을 누르고 터미널 창에 입력하면 된다.

 

2. git clone https://github.com/pyenv/pyenv.git ~/.pyenv

=> pyenv는 파이썬에서 버전을 관리하기 편하게 해주는 보조 관리 프로그램이다.

 

3. bashrc 설정

3.1. sudo vi .bashrc

=> 이런 화면이 뜬다.

=> 맨밑에서 i 누르면 인서트됨

esc > 쉬프트 : > wq 엔터

q!는 그냥 나가기

 

가장 아래로 화살표 키로 내려가서 i를 입력해 인서트 모드로 변경한다.

그리고 엔터엔터 두번해서 자리를 만들고

 

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
if command -v pyenv 1>/dev/null 2>&1; then
    eval "$(pyenv init --path)"
fi
export DJANGO_SETTINGS_MODULE="config.settings.production"

다음과 같이 입력후

esc 키 클릭

쉬프트 + 콜론키 + wq 입력하고 엔터 -> (:wq)

=> 작성한 내용들이 잘 저장된 것

=> 주의) 마지막줄 "config"는 장고 프로젝트 이름을 말하는 것, 다들 다르게 작성했을 수 있기에 manage.py에서 어떻게 작성되어있는지 확인하고 본인 프로젝트에 맞는 이름을 쓸것. ex) mypro 라면 mypro.settings.production 이 되어야 함

 

3.2. source .bashrc

=> 잘 저장하고 재시작 -> 내용 변경이 있으면 실행해줘야하는 명령어

 

3.3. pyenv

=> 내용확인

 

3.4. pyenv install --list

=> 설치할 수 있는 파이썬 리스트가 쭉 출력된다.

 

3.5. pyenv install 3.11.4

=> 특정 버전을 설치해야한다.

프로젝트에 가서 터미널창에 

(pyenv —version

python -V ⇒ 버전 확인)

=> 이 명령어로 버전 먼저 확인후 그 버전을 설치

=> 필자는 3.11.4를 설치

 

오류1

(설치안되고 문제생기면 : sudo apt-get install liblzma-dev -> 요거 실행후 진행 ㄱㄱ)

 

 

오류2

=> 혹시 이 문제가 생겼다면

sudo apt update; sudo apt install build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev curl git \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

=> 위 두 명령어 실행하고 -> pyenv install 3.11.4 다시 실행

 

<버전확인은..>

pyenv —version

python -V

=> 위 명령어로 버전 확인이 가능하다.

 

깃허브에서 코드 내려받기

일단 프로젝트 코드가 있는 깃허브 레포지토리로 이동하고 준비를 해놓자. (깃허브 레포지토리는 private으로 진행한다.)

 

1. SSH Key 발급하기

ssh-keygen 명령어를 입력한다.

 

이후엔 쭉 엔터하면된다.

=> 위 처럼 뜨면 끝

 

2. ssh 파일 설정

ll 명령어를 치면 위 사진과 같이 디렉토리 구조가 보인다.

cd .ssh/ 를 입력하려 들어간다.

 

이중 id_rsa.pub를 cat으로 읽는다.

cat id_rsa.pub

 

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAasgsldkjflaksdjflkasjldkfjlaksjdlkfjalskjdlkfjlaskjdlkfjalksjdlfkjaslkdfjlkajsldkfasbdfbawkejfbkwhbefkbawkefI0ZHTHtYyD6tU1G4RQzEAoACgGIgUDyPoyRvBm9IZ+Q6FSa+tGGnwKGtK2EBZVntYXNuv+N68cZr1Rbsq3YSZwKz8kCMF/zlB7ITrPQu4/1JdovmA/BO/pIB8XQ8b58= ubuntu@ip-172-31-0-166

=> 그럼 이런 긴 문자열이 나오는데 이걸 그대로 복사해서

 

 

배포할 프로젝트 레포지토리 > settings > Deploykeys로 들어가서ADD deployee key를 클릭한다.

=> 아까 복사한 문자열을 넣고 add key 버튼을 클릭한다.

 

"그럼 키가 등록이되고 우분투에서 코드를 내려받을 때 private일때 아무나 받지 못하지만 허용을 해준다."

 

 

Code > SSH로 접근해주고 이 주소를 복사해서

 

=> cd .. 으로 원래 경로로 돌아와서

git clone {주소} 를 입력해 진행한다.

 

=> 코드 다운이 잘 완료되었음

 

가상환경 설치, 패키치 설치, secrets.json 생성

ll 을 입력하여 디렉토리 구조를 확인하고

cd 본인 프로젝트 폴더

=> 프로젝트 폴더 안으로 들어간다

=> 꼭 본인 프로젝트 경로에서 실행해야한다.

 

1. pyenv local 3.11.4

=> 이전에 본인이 설치한 파이썬 버전으로 설치

 

2. python -m venv venv

=> 가상환경 설치

 

3. source venv/bin/activate

=> 가상환경 접속

 

4. pip install --upgrade pip

=> 가상환경 접속후 진행

 

5. pip install -r requirements/production.txt

=> 필자는 requirements를 환경에 따라 분리하였음, 혹시 따로 분리하지 않은경우 그냥 pip install -r requirements만 입력해도 ok

 

6. secrets.json 파일 생성

vi secrets.json

=> i누르고 정보 입력하고 esc누르고 :wq 누르고 

=> 우리가 만들었던 secrets.json파일의 내용을 모두 복붙하자

 

ALLOWED_HOSTS 에 EC2의 IP주소 넣어주기

ALLOWED_HOSTS = ['15.161.74.42']

=> 또한 장고 프로젝트의 settings.py에서(환경 분리를 했다면 production.py에서) 다음과 같이 ec2의 ip 주소를

ALLOWED_HOSTS 에 추가해주자

 

코드변경을 했다면 깃허브에 push하고

우분투에서 본인프로젝트 경로에서 git pull만 하면 된다.

 

보안그룹 인바운드 규칙 하나 더 추가

=> 테스트를 위해 위와 같이 규칙을 추가해보고 -> 테스트 서버는 8000번으로 열리니..

 

python manage.py runserver 0.0.0.0:8000

=> 이렇게 입력해서 서버열고

 

본인 ec2 ip주소 : 8000 -> (EX. 1.23.34.454:8000)

로 접속하면?

=> 이렇게 접속은 되는 것을, 서버가 실행되는 것을 확인했다.

일단은 오류가 나는게 정상이다.

 

 

gunicorn 설치

이제 실제 서비스를 어떻게 띄우는지 마지막 과정을 진행해보자

 

우리가 runserver는 개발서버에서 테스트를 하기위해 사용한다.

그럼 우분투, 배포하는환경에서는 어떻게 서버를 실행시킬까?

바로 gunicorn이라는 것을 사용해서 진행한다.

 

gunicorn은 우리가 작성한 파이썬기반 장고 프로젝트를 실행시켜준다.

엔진x가 연산이 필요하거나 장고가 처리해야하는 요청을 전달 해준다고 했었다.

전달해줄때 장고가 직접받는게 아니라 gunicorn이 요청을받아서 장고한테 넘겨준다.

서버가 요청받으면 엔진x가 받고 엔진x가 gunicorn한테 보내주는 것 그리고 gunicorn이 장고한테

넘겨준다.

 

gunicorn을 설치해보자

 

1. pip install gunicorn

=> gunicorn 설치

 

2. gunicorn config.wsgi

=> 실행 테스트 

=> 이 부분도 아까 위에서 말했듯 config가 아닌 본인이 설정한 이름을 써야한다.

=> 잘됨 

 

다음시간엔 마지막으로 gunicorn을 우분투 기반에서 서비스 등록, 소켓 등록을 하여

실질적으로 gunicorn, 엔진x, 장고가 흐르는 흐름을 만들어보자.프로젝트 배포 종결단계이다.

 

 

https://choiet.tistory.com/32

=> 이어서 진행