[Django] Django REST Framework 앱을 Google Cloud Platform에 배포하기 (1) - 테스트용 서버 배포

시작하기 전 준비물

  1. Django REST Framework로 작성된 앱
  2. 그 앱이 Git 저장소에 올라간 상태여야 함
  3. 등록이 완료된 Google Cloud Platform 계정 (무료 3개월 사용이 가능하다!)
  4. 로컬에 설치된 Google Cloud SDK (설치 안돼있어도 가능은 하지만 이 방식을 더 추천) - 설치방법

배포 과정

  1. Google Compute Engine에 Ubuntu 서버를 켠다
  2. 서버에서 내 앱을 Clone 받고, 설치한다
  3. 앱을 실행한다
  4. Ubuntu 서버에 외부 IP를 통해 실행한 앱에 접근한다

1. GCE에 Ubuntu 서버를 켠다

Google Cloud Platform에 계정을 등록하고 Compute Engine을 들어가면 아직 아무 것도 없다. 가볍게 인스턴스 만들기 클릭하자.

그러면 이런 화면이 보이게 되는데 필요한 것들만 지정해보자.

  1. 이름 - 만들 인스턴스 이름이다.
  2. 리전/영역 - 어디에 있는 서버에 생성할껀지를 정하는 곳이다. 사는 곳과 가장 가까운 곳을 선택하자.
  3. 머신구성 - 서버에 할당하는 자원의 양이다. 좋은 CPU와 큰 메모리를 쓸 수록 월 요금이 비싸지니 알아서 선택하자.
  4. 부팅디스크 - 서버의 OS를 선택할 수 있다. Ubuntu LTS 가장 최신꺼 쓰는게 마음이 편하다. 특히 예전버전 LTS를 쓰게 되면 Python 버전 맞추는 것이 상당히 귀찮고 골치 아프기 때문에 그냥 LTS이 기본 제공하는 Python 버전에 Django 프로젝트 버전을 맞추는 것이 편하다. 잘 모르겠으면 Ubuntu 가장 최신 LTS버전으로 가자. 나의 경우 Ubuntu 20.04LTS 에 Python 3.8.10이 설치돼있다.
  5. ID 및 엑세스 - 만약 Google Cloud의 다른 서비스들(ex. Google Cloud SQL, Storage 등등)과 연동해서 사용할 계획이면 모든 Cloud API에 대한 전체 액세스 허용 을 선택하자.
  6. 방화벽 - HTTP, HTTPS 다 허용하자. 그래야 외부 IP를 통해서 접속할 수 있다.

이렇게 전부 설정하고 만들면

이렇게 뿅하고 만들어진다. 외부 IP주소 오른쪽에 있는 SSH를 누르면 웹 터미널로 서버에 접속할 수 있게 되는데 그전에, SSH를 통해서가 아닌 일반 HTTP나 HTTPS를 통해서 서버에 접속할 수 있게 방화벽 설정을 해줘야 한다.

2. 방화벽 설정

검색창에 방화벽이라고 검색을 하면 방화벽(VPC 네트워크)가 있다. 거기에 들어가서 + 방화벽 규칙 만들기 를 해보자.

그러면 이런 화면이 보이는데 여기서도 필요한 것들만 지정해보자.

  1. 이름 - 규칙 이름이다. 원하는 걸로 하자.
  2. 대상 / 대상 태그 - 규칙을 적용할 대상이다. 잘 모르겠으면 그냥 네트워크의 모든 인스턴스로 하자.
  3. 소스 IP범위 - 접속을 허용할 IP의 범위이다. 이것도 마찬가지로 잘 모르겠으면 0.0.0.0/0 으로 하자. 사실 0.0.0.0/0은 모든 IP범위의 트래픽을 전부 허용한다는 뜻이기 때문에 보안상 좋지는 않다. 각자 원하는 범위의 IP만 찾아서 지정할 수 있으면 하는 것이 좋다.
  4. 프로토콜 및 포트 - 접속을 허용할 포트를 지정해줄 수 있다. 기본적으로 GCP에서는 80번과 443번 포트가 열려있지만, django 서버는 기본적으로 8000번 포트를 사용하기 때문에 TCP 8000을 열어주면 된다. 다른 포트번호를 사용하고 django 서버를 열 때 그 포트를 사용해도 된다.

여기까지 됐다면, 설정해줄 것은 끝났고, Ubuntu 서버에 접속해서 django 앱을 켜기만 하면 된다!

3. 서버 접속

다시 Compute Engine의 VM인스턴스로 와서 연결 아래에 있는 SSH를 누르면 이렇게 접속이 뿅하고 된다.

혹은 Google Cloud SDK를 설치했다면 연결의 SSH옆에 드롭다운을 누르면 gcloud 명령어 보기가 있다. 그걸 누르면

gcloud beta compute ssh --zone "asia-northeast3-b" "instance-1"  --project "planar-contact-329102"

이런 비슷한 명령어가 뜨는데, 이걸 터미널에 복붙하면 터미널로 접속을 할 수 있다! (이 방식을 더 추천한다)

접속을 했다면 우선 패키지 업데이트 부터 하자

$> sudo apt-get update && sudo apt-get dist-upgrade

중간에 이런 메세지가 나오면 엔터 누르고 넘어가자

Need to get 28.0 MB of archives.
After this operation, 1111 kB of additional disk space will be used.
Do you want to continue? [Y/n]

기본적으로 Ubuntu 20.04 LTS 기준으로 Python3 는 3.8.10이 설치돼있고, pip는 설치가 안돼있어서 설치를 해줘야한다.

$> sudo apt install python3-pip

$> pip --version
# pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)

설치가 완료되면 version한번 찍어보는건 국룰

pip 설치가 돼도, PATH 설정이 안돼있기 때문에 바로 설치한 패키지를 실행할 수가 없다. PATH 설정은 이 글을 따라하자.

설치와 PATH설정까지 완료가 됐다면 이제는 앱을 clone받아서 실행해보자.

$> git clone https://github.com/my/django-app # 내 Git 저장소 주소
$> cd django-app

$> pip install django djangorestframework ... # 가상환경 사용을 안한다면 패키지 설치
$> pipenv install # 가상환경 사용한다면 설치
$> pipenv shell # 가상환경 사용한다면 실행

# 여기까지는 django 앱을 실행할 수 있는 상태로 만들기

$> python manage.py makemigrations
$> python manage.py migrate
$> python manage.py runserver 0.0.0.0:8000

# 실행하되, 0.0.0.0:8000 으로 서버를 실행하기.

여기까지 하면 서버의 외부 IP로 내 django 앱에 접속할 수가 있다!
http://서버외부IP:8000/
가장 만만한건 admin 페이지

주의할 점은 https로 접속하면 오류가 발생한다. 아직 https 설정을 안해줬기 때문이다. https 설정은 나중 포스팅에서 다뤄보자.

좋은 웹페이지 즐겨찾기