Django 프로젝트 배포하기

·2024년 12월 28일
0

웹개발 종합

목록 보기
23/23
post-thumbnail

우선 ALB 를 생성할 때
ALB 로 포트포워딩하기
를 참고하여 8000번으로 포트포워딩을 해준다. 타겟 그룹을 만들 때 포트 번호를 지정해주면 된다. Django 의 포트는 디폴트 8000번이므로 8000번 포트를 열어준다.

설정을 해줬으면 내 프로젝트의 settings.py 에
ALLOWED_HOSTS = ['*'] 을 추가해준다. 모든 호스트에서 프로젝트에 접근하는 것을 허용한다는 의미이다. 특정 IP 만 접근할 수 있도록 허용해줄 수도 있다. 파일 저장해준 다음 내 브랜치에 커밋한 뒤, 내 인스턴스에 접근한다.

키 페어가 있는 폴더로 cd 한 다음 키 페어의 권한을 chmod 400 "키_페어.pem" 로 바꿔준 뒤 ssh -i "키_페어.pem" ubuntu@e<DNS 주소 이름> (예 : ssh -i "gdg-web1.pem" ubuntu@ec2-54-176-70-197.us-west-1.compute.amazonaws.com) 로 접속해주면 된다.

그러면 우분투 콘솔창이 나오는데, 이때 프로젝트 폴더로 cd 한 다음 아래의 명령어를 실행시켜준다.

sudo apt update
sudo apt upgrade

sudo apt install -y python-is-python3   # python 명령어를 python3로 자동 연결
sudo apt install python3-venv   # python의 venv 모듈은 가상 환경을 생성하기 위해 ensurepip를 사용해 기본 pip 설치를 시도하는데, 이때 python3-venv 패키지가 설치되지 않은 경우 ensurepip가 동작하지 않아 가상 환경 생성이 실패

python -m venv venv
source venv/bin/activate   # 가상 환경 활성화
pip install -r requirements.txt   # 필요한 패키지 설치

python manage.py runserver 0:8000    # 이때 0:8000 을 명시하지 않으면 localhost - 127.0.0.1 로 서버가 실행되기 떄문에 주의

이러고 ALB 의 DNS 주소로 가면 아래와 같이 잘 배포된 것을 볼 수 있다.(UI 가 이상한 건 내가 트래픽 분산되는지 보겠다고 한쪽 서버를 꺼서 그렇다)

트래픽 분산이 된 것을 보고 싶다면 CloudWatch 의 지표(metrics) > 모든 지표 > 찾아보기 > ApplicationELB > AvailabilityZone, TargetGroup
에서 내 가용 영역을 체크하고 그래프를 확인해보거나

ApacheBench 명령어로 트래픽을 생성해 평균 응답 시간이 얼마나 걸리는지 비교해보면 된다.
ab -n 100 -c 10 http://<로드밸런서-DNS>
결과

275408.us-west-1.elb.amazonaws.com/

This is ApacheBench, Version 2.3 <$Revision: 1913912 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking gdg-alb2-1886275408.us-west-1.elb.amazonaws.com (be patient).....done


Server Software:        WSGIServer/0.2
Server Hostname:        gdg-alb2-1886275408.us-west-1.elb.amazonaws.com
Server Port:            80

Document Path:          /
Document Length:        2 bytes

Concurrency Level:      10
Time taken for tests:   0.894 seconds
Complete requests:      100
Failed requests:        0
Total transferred:      34900 bytes
HTML transferred:       200 bytes
Requests per second:    111.80 [#/sec] (mean)
Time per request:       89.449 [ms] (mean)
Time per request:       8.945 [ms] (mean, across all concurrent requests)
Transfer rate:          38.10 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       16   21   3.0     20      29
Processing:    26   60  19.4     69      98
Waiting:       23   58  19.6     67      97
Total:         45   81  19.6     91     117

Percentage of the requests served within a certain time (ms)
  50%     91
  66%     93
  75%     94
  80%     95
  90%     97
  95%    101
  98%    112
  99%    117
 100%    117 (longest request)
profile
공부 중

0개의 댓글