전편 링크: 도커로 백엔드 장고 배포(1/3) Docker
무료 도메인을 찾지못한 자 결국 가비아에서 도메인 구매함 550원짜리...
1년간 알차게 써먹어주지
hosted zone 생성하기
구매한 도메인의 관리버튼 눌러서 설정 들어감
네임서버 옆의 설정 버튼 누르면 수정 가능
아까 AWS Route53에서 생성한 hosted zone에 주소를 붙여 넣음
주소들 뒤에 . 붙어있는데 가비아에서 네임서버 적어줄 때는 지워야 저장이 됨
적용되는데 시간 좀 걸림...
AWS Route53에서 아까 생성한 호스팅 영역(hosted zone)에 들어가서 새 레코드 생성 클릭
2개 생성 할거임
1번은 레코드 이름 없이 값에 ip 입력하고 생성
2번은 레코드 이름 www, 레코드 유형 CNAME, 값에 도메인 입력해주고 생성
이후에 ip 값이 변경 되더라도 1번만 수정하면 됨!
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 # 특정 서비스만 리스타트 가능
❗️❗️❗️ 크롬에서 제대로 리다이렉션 되는지 확인 ❗️❗️❗️
AWS Certificate Manager 에서 인증서 요청
요청 완료 후 검증 대기중인 인증서 클릭 > Route53에서 레코드 생성 버튼 클릭!
자동으로 만들어준 DNS 레코드 2개 있을 거임 > 레코드 생성 버튼 클릭!
설정 후 승인 될 때까지 기다리기...
대상 그룹(target group) 생성
상태 검사에는 status code 200이 뜨는 url 적어주기(리다이렉트경로 안됨)
다음 대상 등록할 인스턴스(위에서 생성한 것) 등록하고 생성
3종류 있는데 그 중에
Application Load Balancer
생성(ALB)
네트워크 매핑에서 서브넷 선택
보안 그룹은 특별한 이유 아니면 기본 보안 그룹이면 된다고 했는데 나는 그냥 EC2 생성할 때 만든 걸로 설정함
리스너 및 라우팅에 HTTP:80, HTTPS:443 설정
대상그룹도 아까 생성한 대상그룹 설정
보안리스너에 아까 생성한 SSL 인증서 선택
로드밸런서 생성! 이것도 생성되는데 시간 걸림....
도메인 접속시 인스턴스로 바로 접속되는 게 아니라 로드밸런서를 거쳐가도록 수정
아까 Route53에서 생성한 레코드 중 1번 [레코드 이름 없이 값에 ip 입력하고 생성]
레코드를 선택하고 레코드 편집 클릭
별칭을 켜주고 엔드포인트는 Application Load Balancer, 리전은 서울 선택하고 아까 생성한 로드밸런서까지 선택 후 저장!
얘도 적용되는데 시간 걸림...
❗️❗️❗️ HTTPS 접속 확인 ❗️❗️❗️
HTTP로 입력해도 HTTPS로 접속되도록 규칙을 설정해보자
생성한 로드밸런서에 들어가면 하단에 아까 생성한 리스너와 규칙들이 있음
기본적으로 1개가 생성 되어있음
HTTP:80의 rule 들어가서 add rule
Step 따라서 입력하게 되어있는데
Conditions -> host header 선택하고 *.도메인
입력
rule actions -> redirect port 443 입력
❗️❗️❗️ HTTPS 리다이렉션 확인 ❗️❗️❗️
ssh 접속
vi backend/django/{프로젝트명}/settings.py
CORS 허용 목록에 도메인 주소 설정
CORS_ORIGIN_WHITELIST = ['https://www.도메인',]
저장후 백엔드 컨테이너 재시작
sudo docker compose restart backend
❗️❗️❗️ 로그인 확인 ❗️❗️❗️
로그인까지 됬으면 백엔드 배포는 끝!