저는 오늘 날까지 웹을 배포하는 과정에서 Heroku를 많이 사용하곤 했습니다.
https://hufsicetime.herokuapp.com/
https://lungnahablog.herokuapp.com/
하지만 이번에는 AWS를 이용해서 Django를 배포하는 것을 연습해보려고 합니다.
먼저, 저는 이전에 실습했던 것처럼 VPC를 생성하고 거기에 Subnet을 만들어서 EC2의 환경을 세팅해주었습니다.
물론 이번에는 VPC를 위한 실습이 아니므로 Public Subnet만 생성해서 실습을 진행했습니다.
배포 전에 Django 에서 사전 작업이 필요합니다.
먼저 터미널에서 아래의 명령어를 입력해주어서 requirements.txt 파일을 생성해주어야합니다.
pip freeze >> requirements.txt
그리고 이후에 생성될 EC2의 퍼블릭 IPv4 DNS를 settings.py의 Allowed_Host에 추가해주어야합니다.
(이는 아래 EC2 생성에서 다시 언급해드리겠습니다.)
마지막으로 이런 변경 내용을 Github에 Push해주면 사전 Django 작업은 끝납니다.
구성된 Subnet에 EC2를 생성했습니다.
이번에는 Amazon Linux가 아닌 Ubuntu를 이용해서 EC2를 생성했습니다.
참고로 Putty 접속 전에 미리 배포를 원하는 Django의 settings.py의 Allowed_Host에 EC2 퍼블릭 IPv4 DNS 추가해주는 것 잊지 마세요!!
Putty를 통해 EC2에 원격 접속해서 아래의 명령어를 차근차근 입력해주세요.
sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install python3
sudo apt-get install python3-pip
여기까지 완료되면 이제 github에 Deploy Keys를 추가해주는 과정을 거쳐야 합니다.
먼저 Putty에서 아래의 명령어를 입력해서 key를 생성해주여야합니다.
ssh-keygen -t rsa
아래 명령어를 입력했을 때, 위의 사진과 같이 결과가 나왔다면 일단 Key 생성은 성공한 것입니다.
cd .ssh
ls
추가로 아래 명령어를 입력해서 나오는 모든 문장을 복사합니다.
cat id_rsa.pub
그리고 github에서 배포를 원하는 Django가 위치한 저장소의 settings에 가서 Deploy key로 이동해서 복사한 문장 전체를 key에 붙여넣고 새로운 Deploy key를 생성해줍니다.
생성 이후에는 다시 원격 접속한 터미널에서 아래의 명령어를 입력해서 또 다른 key를 생성해줍니다.
(Overwrite 할 것인지 물어보는 것에는 Yes를 해주시면 됩니다.)
ssh-keygen -t rsa -C "깃허브 가입 이메일"
그리고 동일한 과정으로 Key 문장 전체를 복사해서 이번에는 본인 전체 Settings에 들어가서 SSH keys를 동일한 과정으로 생성해주어야합니다.
그리고 다시 배포를 원하는 저장소로 가서 저장소의 SSH Url을 복사해서 원격 접속 터미널로 이동합니다.
터미널에서 저장소의 저장을 원하는 폴더를 생성하고 아래의 명령어를 입력해서 clone을 시작합니다.
git clone 깃 저장소 SSH Url
다음으로는 EC2에 아래의 명령어를 입력해서 가상환경을 세팅해줍니다.
sudo apt-get install virtualenv
virtualenv -p python 원하는 가상환경 이름
그 이후에 이전에 사전 작업에서 생성했던 requirements.txt 파일이 있는 위치로 이동해서 아래의 명령어를 입력해줍니다.
pip3 install -r requirements.txt
위의 명령어를 수행하다보면, 각자의 Django 앱에 따라서 오류가 발생할 수 있는데, 그건 각자의 상황에 맞게 에러 코드를 보고 구글링을 통해 해결하셔야합니다.... ㅜㅜ
위의 명령어가 이제 문제 없이 실행이 완료되면 아래의 명령어를 입력해줍니다.
python3 manage.py runserver 0.0.0.0:8000
해당 명령어가 성공하면 EC2의 퍼블릭 IPv4 DNS:8000 으로 어느 곳에서나 접근이 가능합니다.
그러나 여기까지 하면 문제는 Putty를 종료하면 해당 웹도 접근이 불가능 하다는 것입니다.
이를 해결하기 위해서는 아래의 명령어를 입력해주면 이제는 어디에서나 접근이 가능합니다.
bg # background 에서 실행하는 명령어
disown -h # SSH가 끊어져도 서버가 항상 유지되도록 설정
아! 그리고 실습 이후에 과금에 주의하는 것 잊지 마세요~~^^