[Django REST framework] 인스타그램 클론코딩(4) - 윈도우 AWS EC2 배포 + PuTTY (VSCode 사용)

woownsgud·2022년 9월 22일

참고사이트

Django Project AWS - EC2 배포하기 (Window, ubuntu)
[Django 스터디#9-2] AWS 배포 - puTTY로 SSH 접속하기

1. AWS 인스턴스 생성

AWS사이트에 들어가서 로그인 후 검색창에 EC2 검색 후 클릭합니다.

오른쪽 위에서 위치를 서울로 변경합니다.

인스턴스 시작을 클릭합니다.

클릭하게 되면 인스터스 생성 옵션 창이 뜨는데 운영체제는 Ubuntu를 클릭(프티티어 사용)합니다.

인스턴스 유형은 t2.micro(프리티어 사용) 클릭 후 밑에 새 키 페어 생성 클릭합니다.

클릭 후 창이 뜨면 키 페어 이름을 설정(이름은 본인 마음대로)하고 키 페어 생성을 클릭합니다.

그러면 이러한 키 페어가 다운로드 됩니다. 이 키는 처음에 다운로드가 된 후 더이상 발급받을 수 없기 때문에 잘 보관해야 합니다.

나머지는 건드릴 필요 없고 오른쪽 창에 인스턴스 시작을 누릅니다.

인스턴스 창으로 가서 확인을 해보면 처음엔 대기 중으로 뜨는데 1~2분 정도 지나면 실행 중으로 바뀝니다. 이렇게 인스턴스 생성을 완료했습니다.


2. putty

PuTTY사이트에서 putty.exe, puttygen.exe를 설치합니다.


puttygen을 켜서 Load를 클릭합니다.

아까 AWS에서 키 페어 생성 후 다운로드 받은 키 페어를 불러옵니다. (키 페어 위치에 왔는데 안보일 경우 PuTTY Private Key Files를 All Files로 바꾸게 되면 보입니다.)

이러한 창이 뜨게 되면 성공적으로 불러오게 됩니다.

그 다음 puttygen창에 Save private key를 클릭합니다.

.ppk 파일을 생성하는데 키 페어의 이름과 같은 이름으로 저장합니다.

ppk 생성도 완료!

HostName은 ubuntu@ + 퍼블릭 IPv4 DNS 를 입력해주면 됩니다.

퍼블릭 IPv4 DNS는 해당 인스턴스를 클릭하게 되면 나옵니다.

SSH -> Auth 로 넘어가 Browse를 클릭합니다.

Browse로 아까 만든 ppk를 불러옵니다.

이러한 SSH터미널이 뜨게 되면서 창이 하나 뜰텐데 "accept"나 "예"를 눌러주면 됩니다.


3. 개발 환경 갖추기

1) 우분투 서버에서 필요한 패키지 다운받기

(SSH터미널에 작성)
# sudo : 최고 관리자 권한으로 명령어 실행

$ sudo apt-get update
$ sudo apt-get install build-essential
# y 입력

2) Python 설치

$ sudo apt-get install python3

python 설치 확인

$ python3 -V

pip 설치

$ sudo apt-get install python3-pip
# y 입력

pip 업그레이드

$ sudo pip3 install --upgrade pip

3) requirements.txt

SSH에서 프로젝트 폴더를 다운받기 전에 해당폴더에 requirements.txt가 없으면
pip freeze > requirements.txt 를 입력해서 만들어 줍니다. (VScode cmd 터미널에 입력)


4) settings.py

프로젝트 폴더에서 settings.py로 이동해 ALLOWED_HOST = ['*'] 로 모든 IP에서 접속할 수 있도록 열어둡니다.


4. GitHub에서 프로젝트 폴더 다운받기

GitHub repository를 배포하기 전에 자신의 프로젝트를 GitHub에 올려야 합니다.
제가 적어놓은 GitHub 사용법으로 따라해주시면 됩니다.

1) SSH key 생성

참고 - GitHub 사용법 10번 주의사항에 보시면 자세하게 나와있습니다.

SSH 터미널에 아래 명령어를 입력합니다.

$ ssh-keygen -t rsa -C "본인의 GitHub 계정 이메일주소"

$ ls -al ~/.ssh (public key가 있는지 확인) # .pub 파일 

$ cat ~/.ssh/해당파일이름.pub (SSH키를 확인하고 복사)

GitHub 자기계정 (우측 상단) -> Settings -> SSH and GPG keys -> New SSH key를 클릭합니다.

Title(사용자 임의로 작성)과 Key에 방금 cat ~/.ssh/해당파일이름.pub에서 복사한 키값을 넣어줍니다.


2) git clone repository

GitHub의 프로젝트 repostitory에서 Code를 클릭해 SSH의 주소값을 복사해줍니다.

SSH터미널에 아래 명령어를 입력해줍니다.

$ mkdir www

$ cd www

$ git clone 저장소주소 (복사한 SSH의 주소값)

비밀번호는 1번에 deploy key 생성에서 만들었던 패스워드를 입력하면 됩니다.


5. Django 웹앱 실행

1) 가상환경 설치

아래 명령어로 GitHub에서 받은 프로젝트의 폴더 이름을 확인한 뒤, cd 폴더이름으로 해당폴더로 이동합니다.

$ ls - l




SSH터미널에 아래 명령어를 입력합니다.

$ sudo apt-get install virtualenv

$ virtualenv -p python myvenv (가상환경이름은 임의로 정하면 됩니다.)

$ source myvenv/bin/activate

2) 모듈 다운

아까 만들어두었던 requirements.txt로 필요한 모듈을 한번에 다운 가능합니다.

$ pip install -r requirements.txt (VScode cmd 터미널에 입력)

3) 마이그레이션

SSH터미널에 아래 명령어를 입력합니다. (마이그레이션을 위한 모듈 설치)

$ pip install psycopg2-binary

$ pip install django

$ pip install djangorestframework

$ pip install Pillow

마이그레이션을 해줍니다.

$ python manage.py makemigrations 

$ python manage.py migrate

4) 실행

실행을 하기 전에 AWS홈페이지에서 보안그룹에 들어가서 인바운드 규칙 편집을 클릭해줍니다.

규칙 추가를 눌러 포트 범위에 8000 을 입력해줍니다.



SSH터미널에 python manage.py runserver 0.0.0.0:8000 이나 python3 manage.py runserver 0.0.0.0:8000 을 입력해 서버를 열어줍니다.

퍼블릭 IPv4 DNS + 8000 을 입력해주면 배포가 완성됩니다.


6. SSH 터미널이 끊어져도 서버가 계속 실행되게 하는 법

  1. 서버를 실행시킵니다.
  2. 'Ctrl+z'를 눌러 해당 프로그램을 정지(pause)시킨 후 shell로 돌아옵니다.
  3. 'bg' 명령어를 쳐서 해당 프로그램을 백그라운드로 보내어 돌립니다.
  4. 'disown -h' 명령어로 ssh 연결이 끊어져도 해당 프로세스가 돌아가도록 합니다.
  5. 터미널 창을 닫습니다.

백그라운드에서 실행 중지

Error: That port is already in use.

runserver를 다시 실행 시킬 경우 위에 에러가 뜰수 있는데

sudo lsof -t -i tcp:8000 | xargs kill -9

위 명령어 실행 (disown 종료)

0개의 댓글