기존의 영상에서는 EC2안에서 Dockerfile2개를 만들고, nginx dockerfile과 django dockerfile을 2개 만들고 그 밖에다가 docker-composer.yml을 만들어 EC2안에서 다 실행을 했었습니다.
하지만 이번에는 EC2안에서 하는게 아니라 이번에는 AWS의 Fargate Service를 이용하여 이를 진행해 보도록 하겠습니다. 이를 사용했을 때의 장점은 EC2를 관리해야한다는 불편함에서 벗어나 오직 Fargate Service하나만 바라보게 할 수 있다는 점입니다.
일단 매번 해주었던 기본 명령어를 아래와 같이 실행해 주겠습니다.
$curl -fsSL https://get.docker.com/ | sudo sh
$sudo usermod -aG docker $USER
$mkdir docker-server
$cd docker-server
$git clone https://github.com/LE123123/Django-Deploy.git
우선 기본적으로 django, nginx의 각각의 폴더를 만들고 Dockerfile과 docker-compose.yml을 만든것 까지 했다고 가정하겠습니다.
이걸 다 적자니 너무 오래걸립니다. 그래서 제가 했던 블로그 링크를 첨부 하겠습니다.
https://hyunseo-fullstackdiary.tistory.com/217
이 포스팅 아래 2개까지만 보시면 됩니다.
그리고 실습을 하다가 git에 배포한 django의 레포 이름과 직접 startapp을 처음 했을 때 만든 이름과 불일치가 생겨 제가 처음 실습을 했을 떄 uwsgi에서 오류가 너무 많이나서 nginx자체에서 500 Internal Server Error가 났더적이 있습니다. 이를 해결하기 위한 방법은 매우 간단합니다.
그냥 uwsgi.ini의 socket이름을 fastcampus.sock:application으로 해주거나, 저희가 배포했던 Django-Deploy라는 이름로 fastcampus안의 asgi.py, settings.py, wsgi.py안의 모든 fastcampus라는 이름을 Django-Deploy로 바꾸어 주시고 마지막으로 fastcampus라는 폴더의 이름을 Django-Deploy로 바꾸어 주시면 됩니다.
실습
이번에는 ECS-CLI Compose를 활용한 다중 Contianer배포를 하기 전에 워밍업 시간이라고 보시면 됩니다. 우선 저희는 Fargate에 컨테이너를 배포할 겁니다. 그리고 이 Fargate는 하나의 독립된 인스턴스이기 때문에 기존의 docker-compose.yml과 같이 적으면 안됩니다.
/( 기존의 docker-compose.yml )
version: '3'
services:
nginx:
container_name: nginx
build: ./nginx
image: docker-django/nginx
restart: always
ports:
- "80:80"
volumes:
- ./Django-Deploy:/srv/docker-django
- ./log:/var/log/nginx
depends_on:
- django
django:
container_name: django
build: ./Django-Deploy
image: docker-django/django
restart: always
command: uwsgi --ini uwsgi.ini
volumes:
- ./Django-Deploy:/srv/docker-django
- ./log:/var/log/uwsgi
ECS에서 이를 실행할 때에는 container_name, build, image라는 옵션이 싹다 없습니다. 그리고 volume도 없습니다. 저희가 싹다 ECS에서 설정해주어야 합니다. 그 이유는 docker-compose.yml안의 ./Django-Deploy라는 파일 자체가 폴더를 지칭하는 것입니다. 하지만 폴더를 지칭할 수 있는 이유는 하나의 EC2인스턴스 안에 있기 때문입니다.
하지만 Fargate환경 안에서는 이를 해 줄 수 없습니다. 다음 포스팅에서부터 이를 어떻게 설정하는지에 대해 길게 알아보겠습니다!