TIL_240112_도커로 백엔드 장고 배포(2/3)_AWS

Sol Lee·2024년 1월 12일
0

백엔드 Django 배포

전편 링크: 도커로 백엔드 장고 배포(1/3) Docker

6️⃣ 도메인 배포서버 접속하기

1. 가비아에서 도메인 구매

무료 도메인을 찾지못한 자 결국 가비아에서 도메인 구매함 550원짜리...
1년간 알차게 써먹어주지

2. AWS Route53

hosted zone 생성하기

3. 가비아에서 네임서버 설정

구매한 도메인의 관리버튼 눌러서 설정 들어감

네임서버 옆의 설정 버튼 누르면 수정 가능

아까 AWS Route53에서 생성한 hosted zone에 주소를 붙여 넣음

주소들 뒤에 . 붙어있는데 가비아에서 네임서버 적어줄 때는 지워야 저장이 됨

적용되는데 시간 좀 걸림...

4. AWS Route53에서 레코드 생성

AWS Route53에서 아까 생성한 호스팅 영역(hosted zone)에 들어가서 새 레코드 생성 클릭
2개 생성 할거임

1번은 레코드 이름 없이 값에 ip 입력하고 생성
2번은 레코드 이름 www, 레코드 유형 CNAME, 값에 도메인 입력해주고 생성

이후에 ip 값이 변경 되더라도 1번만 수정하면 됨!

5. 터미널에서 nginx 설정 변경

www 없이 도메인 입력해도 www로 리다이렉트 되도록 설정해주자
ssh 접속후 nginx의 default.conf 수정

vi nginx/default.conf

아래 내용으로 수정

server {
  listen 80;
  server_name www.도메인; # www.도메인으로 들어오는 요청을 처리해줍니다.

  location / {
    proxy_pass http://backend:8000/;
  }

  location /static/ {
    alias /static/;
  }

  location /media/ {
    alias /media/;
  }
}

server {
  listen 80;
  server_name 도메인; # www가 없는 url로 요청 했을 때
  return 301 http://www.도메인$request_uri; # www를 붙인 url로 redirection 해줍니다.
}

재시작 해주기

sudo docker compose restart nginx # 특정 서비스만 리스타트 가능

❗️❗️❗️ 크롬에서 제대로 리다이렉션 되는지 확인 ❗️❗️❗️

7️⃣ AWS 로드밸런서로 HTTPS 적용하기

1. SSL 인증서 발급

AWS Certificate Manager 에서 인증서 요청

요청 완료 후 검증 대기중인 인증서 클릭 > Route53에서 레코드 생성 버튼 클릭!

자동으로 만들어준 DNS 레코드 2개 있을 거임 > 레코드 생성 버튼 클릭!
설정 후 승인 될 때까지 기다리기...

2. 대상그룹 생성

대상 그룹(target group) 생성

상태 검사에는 status code 200이 뜨는 url 적어주기(리다이렉트경로 안됨)

다음 대상 등록할 인스턴스(위에서 생성한 것) 등록하고 생성

3. 로드밸런서 생성

3종류 있는데 그 중에
Application Load Balancer 생성(ALB)

네트워크 매핑에서 서브넷 선택

보안 그룹은 특별한 이유 아니면 기본 보안 그룹이면 된다고 했는데 나는 그냥 EC2 생성할 때 만든 걸로 설정함

리스너 및 라우팅에 HTTP:80, HTTPS:443 설정
대상그룹도 아까 생성한 대상그룹 설정

보안리스너에 아까 생성한 SSL 인증서 선택

로드밸런서 생성! 이것도 생성되는데 시간 걸림....

4. Route53 설정

도메인 접속시 인스턴스로 바로 접속되는 게 아니라 로드밸런서를 거쳐가도록 수정

아까 Route53에서 생성한 레코드 중 1번 [레코드 이름 없이 값에 ip 입력하고 생성] 레코드를 선택하고 레코드 편집 클릭

별칭을 켜주고 엔드포인트는 Application Load Balancer, 리전은 서울 선택하고 아까 생성한 로드밸런서까지 선택 후 저장!

얘도 적용되는데 시간 걸림...

❗️❗️❗️ HTTPS 접속 확인 ❗️❗️❗️

5. HTTPS 리다이렉트 설정

HTTP로 입력해도 HTTPS로 접속되도록 규칙을 설정해보자

생성한 로드밸런서에 들어가면 하단에 아까 생성한 리스너와 규칙들이 있음
기본적으로 1개가 생성 되어있음

HTTP:80의 rule 들어가서 add rule

Step 따라서 입력하게 되어있는데
Conditions -> host header 선택하고 *.도메인 입력
rule actions -> redirect port 443 입력

❗️❗️❗️ HTTPS 리다이렉션 확인 ❗️❗️❗️

6. settings.py CSRF 수정

ssh 접속

vi backend/django/{프로젝트명}/settings.py

CORS 허용 목록에 도메인 주소 설정

CORS_ORIGIN_WHITELIST = ['https://www.도메인',]

저장후 백엔드 컨테이너 재시작

sudo docker compose restart backend

❗️❗️❗️ 로그인 확인 ❗️❗️❗️

로그인까지 됬으면 백엔드 배포는 끝!

profile
직업: 개발자가 되고 싶은 오레오 집사

0개의 댓글