EC2를 사용하여 DRF로 간단하게 작성한 프로젝트를 배포해보겠습니다.
인스턴스 생성 및 연결 그리고 탄력적 IP에 대해서는 이전 포스팅에 있으니 참고해주시면 감사하겠습니다.
배포 전에 먼저 EC2 서버 기본세팅을 진행하겠습니다.
EC2 서버 접속 후 패키지 정보를 업데이트 합니다.
sudo apt-get update
패키지 의존성 검사 및 업그레이드를 진행합니다.
sudo apt-get dist-upgrade
완료되면 python3 패키지 매니저를 설치합니다.
sudo apt-get install python3-pip
기본세팅이 마무리 되었으니 이제 프로젝트를 EC2 서버에서 git clone 해보록 하겠습니다.
프로젝트 파일 모두 /srv/ 폴더에 다운받도록 하겠습니다.
따라서 이 폴더를 현재 유저인 ubuntu 폴더로 소유권을 바꿔줍니다.
sudo chown -R ubuntu:ubuntu /srv/
이제 /srv/ 폴더로 이동하여 git clone 을 해보겠습니다.
git clone [레포지토리 주소]
를 입력하면 됩니다.
하지만 명령어를 입력하니 다음과 같은 메세지가 나왔습니다.
이 메세지는 github에서 인증되지 않은 클라이언트로 다운로드를 허용하지 않아서 인증을 요구하는 경우입니다. 이를 해결하기 위해서 ssh-keygen
명령어로 키를 생성 후 github에 등록하면 됩니다.
cat ~/.ssh/id_rsa.pub
입력 후 나오는 값을 ssh-ras 포함하여 전부 복사 후 github settings→SSH and GPG keys에 들어가서 SSH keys에 입력하면 됩니다.
등록 후 git clone [레포지토리 주소]
를 입력하면 정상적으로 진행되는 것을 확인할 수 있습니다.
이제 runserver를 해보겠습니다.
먼저 가상환경을 만들어주고 requirements.txt를 통해 패키지를 깔아보겠습니다.
가상환경을 만들기 전에 python3-venv를 설치합니다.
sudo apt-get install python3-venv
python3 -m venv myvenv
가상환경을 활성화 한 후 프로젝트에 있는 requirements.txt 파일을 통해 패키지를 설치합니다.
설치를 끝낸 후 python manage.py runserver 0:8000 를 입력하니다.
그리고 자신의 퍼블릭 DNS 뒤에 :8000을 붙인 후 브라우저에 접속하려고 하면 제대로 접속이 되지 않는 것을 확인할 수 있습니다.
이유는 바로 EC2 보안그룹에 포트번호 8000을 추가해주지 않았기 때문입니다.
보안그룹 인바운드 규칙에서 8000포트를 추가
해주세요.
정상적으로 실행이 되는 것을 확인할 수 있습니다.
하지만 runserver의 경우 속도도 느리고 보안도 뛰어나지 않기 때문에 실제로 서비스를 출시할 때는 보안이 더 좋고 강력한 웹서버가 필요합니다. 그러기 위해서는 uWSGI를 사용하여 Nginx와 연동하여 배포
해야합니다.
해당 부분은 추후에 다시 포스팅을 작성하도록 하겠습니다.
이 포스팅은 해당 블로그를 참고하여 작성하였습니다. 도움을 주셔서 감사합니다.