배경
진행하는 프로젝트에서 Flask 환경에서 개발을 할 일이 있어 클라우드에 배포해야 할 일이 생겼다.
클라우드를 사용해본 경험은 있었지만 기본적인 사용법밖에 몰랐고 실제로 사용해본 경험이라고는 딥러닝 모델을 학습시킬 때 빼고는 처음이여서 배포를 하는 과정에서 관련 자료 찾기도 어렵고 오류도 많이 만나고 여러가지로 많이 해맸던거 같다.
나와 같은 처지에 있는 사람들에게 도움이 되길 바래 배포했던 과정을 차례대로 정리해보기로 했다.
전체 구조
이번에 배포할 때 사용한 구조는 일단 클라우드에서 nginx와 gunicorn, flask를 docker-compose를 이용해 하나로 묶어 주었고 클라이언트와의 통신은 nginx를 통해서만 가능하도록 설계하였다. 전체적인 구조는 아래 그림과 같다.
정리를 하자면 클라이언트에서 nginx로 요청을 보내면 nginx는 gunicorn(wsgi)에 요청을 전달 gunicorn은 다시 flask로 요청을 전달하여 요청을 처리하고 클라이언트로 반환해주는 과정을 가진다.
진행 과정
전체적인 구조를 살펴보았으니 진행했던 과정을 나열해 보고자 한다. 먼저 해야할 일은 작성한 소스코드를 githoub에 올려 주어야 한다. 이 포스트는 github에 대한 설명글이 아니니 이 과정은 생략하였다.
프로젝트를 github에 올려주었으면 배포할 인스턴스를 생성하여야한다. 인스턴스를 생성하기 위해서는 클라우드 서비스를 이용하면 되는데 aws(amazon web service), gcp(google cloud plattform) , Microsoft Azure 등이 있다. 이 중 상황에 알맞은 플랫폼을 선택해서 진행하면 된다. 나는 gcp에 사용 가능한 크래딧이 남아있어 gcp에서 진행하였다.
인스턴스 생성
이렇게 gcp에 들어가서 computer engine이라는 메뉴를 들어가면 인스턴스를 생성할 수 있는 화면이 나온다.
여기서 인스턴스 만들기를 누르면 아래 화면과 같이 인스턴스를 만들기 위한 설정창이 나오는데 이 중 이름, 리전, cpu, gpu, os 등 프로젝트에 적합하게 설정해 주면 된다.
설정할 때 주의해야 할 점은 클라우드 서비스는 기본적으로 유료로 제공되는 시스템이기 때문에 잘 보고 골라야 한다.
잘못했다가는 과금 폭탄을 맞을 수도 있다,,
이번 프로젝트에서는 최소 사양으로는 프로젝트를 돌릴 수가 없어서 ubuntu 20.04 LTS , e2-medium으로 설정하여 진행하였다.
그리고 또한 클라이언트와 통신을 하기 위해서는 방화벽 설정에서 http 트래픽을 허용해 주어야 한다.
프로젝트에 맞게 인스턴스를 설정해 주었다면 만들기 버튼을 눌러 인스턴스를 생성해 주면 된다. 아래와 같이 생성된 인스턴스가 보이면 성공적으로 생성된 것이다.
이번 포스트에서는 배포를 위한 전체적인 구조에 대한 설명과 인스턴스를 생성하는 과정에 대해 포스팅하였다.
다음 포스트에서는 인스턴스에 프로젝트를 가져오고 테스트해보는 과정을 다뤄볼 것이다.
'Devops' 카테고리의 다른 글
[flask+gunicorn+nginx+docker compose] 클라우드 배포하기(3) (0) | 2024.04.07 |
---|---|
[flask+gunicorn+nginx+docker compose] 클라우드 배포하기(2) (0) | 2024.04.06 |