로컬 환경에서 개발한 장고 프로젝트를 배포해보려고 한다.
Django+Nginx+Gunicorn+PostgreSQL로 개발을 진행하였으며 Docker-compose를 사용했다.
https://docs.docker.com/engine/install/ubuntu/
공식 문서를 참고해서 docker를 설치하였다.
설치가 완료 되었으면 sudo docker --version
명령어로 확인한다.
https://insight.infograb.net/docs/aws/installing-docker-compose-on-aws-ec2/
블로그를 참고해서 docker-compose를 설치하였다.
그냥 설치를 진행하면 버전 에러가 발생해서 docker-compose를 사용할 수 없다.
따라서 위의 블로그를 참고해서 특정 버전을 설치해야한다.
설치가 완료 되었으면 sudo docker-compose --version
명령어로 확인한다.
로컬에서 개발을 진행할때 8000포트 대신에 80 포트를 사용하였다.
따라서 외부에서 접속을 하기위해서 80 포트를 열어줘야 한다.
인스턴스를 선택 후 보안 탭에서 보안그룹 클릭
인바운드 규칙 -> Edit inbound rules
규칙 추가 -> 유형-Http 선택 -> 규칙 저장
netstat -ntlp
명령어로 80 포트 열렸는지 확인
프로젝트를 옮기는 방법에는 여러가지가 있을 수 있겠지만 나는 git을 사용하였다.
git을 이용하면 프로젝트를 옮길 수 있는 장점도 있지만 버전 관리를 할 수 있다는 장점이 있다.
sudo apt install git
으로 git을 설치해준다.
설치가 완료되었으면 git clone
을 통해 프로젝트를 다운받아준다.
로컬 환경에서 배포를 할 때는 127.0.0.1로 접속을 하였지만 EC2에서 배포를 할 때는 EC2의 아이피로 접속을 하기 때문에 EC2의 IP를 .env.prod
파일에 추가해줘야 한다.
vi .env.prod
로 .env.prod 파일을 열고 EC2 아이피를 127.0.0.1 옆에다가 추가해준다.
IP 인바운드 규칙을 추가하고 git clone
으로 프로젝트를 다운받고 .env.prod
파일에 IP를 추가했으면 이제 서버를 실행시키면 된다.
docker-compose를 사용했으므로 sudo docker-compose up -d --build
명령어로 서버를 실행한다.
다음과 같이 서버가 정상적으로 실행된 것을 알 수 있다.
sudo docker ps -a
명령어로도 확인할 수 있다.
IP로 접속을 해보면 다음과 같이 ProgrammingError가 발생한 것을 알 수 있다.
이는 migrate를 해주지 않아서 발생한 문제이다.
다음 명령어들로 migrate 해주면 에러를 해결할 수 있다.
sudo docker-compose exec web python manage.py makemigrations
sudo docker-compose exec web python manage.py migrate
다시 한번 접속을 해보면 이제 정상적으로 실행이 된 것을 알 수 있다.
글 작성도 되는 것을 확인하였다.