EC2 서버에 도메인 적용하기
1. Route53 에서 도메인 등록(구매)
도메인 마다 가격이 책정되어있고 1년마다 갱신여부 원하는 대로 체크 후 주문하면 생성까지의 시간이 약간 걸림
2. 레코드 만들기
호스팅 영역에서 레코드를 생성하는데 value값으로 사용할 EC2 인스턴스의 고정 ip 를 입력
다른 레코드 추가해서 주소에 레코드 이름에 www를 추가하여 www를 붙였을 때도 라우팅 될 수 있도록 설정
3. django allowed host 에 도메인 추가하기
이 설정 없이 도메인에 접근할 경우 Bad Request 가 발생됨
EC2 인스턴스에 접속하여 설정파일에 리눅스환경에서 vim같은 작업툴을 이용해서 직접 엑세스 해서 (.env.prod 파일) DJANGO_ALLOWED_HOST 상수값에 앞서 만든 도메인들 추가해주기
그리고나서 docker-compose -f docker-compose.prod.yml down 후 up -d --build 다시해주기
HTTPS 적용
Let's encrypt 에서 무료로 ssl을 발급받아 https 적용해보기
Docker-compose.prod.yml 파일 수정
version: "3.8"
# ㄴ 사용하는 docker-compose 버젼
services: # 추가할 서비스들 web, db, nginx
nginx:
build: ./nginx
volumes:
- static_volume:/usr/src/app/static
- media_volume:/usr/src/app/media
# nginx의 volumes에도 추가해주기
- ./data/certbot/conf:/etc/letsencrypt
- ./data/certbot/www:/var/www/certbot
ports:
- 80:80
- 443:443
depends_on:
- web
certbot:
image: certbot/cerbot
# ㄴ certbot에서 지원하는 이미지
volumes:
- ./data/certbot/conf:/etc/letsencrypt
- ./data/certbot/www:/var/www/certbot
...
upstream SMOPS_PRAC {
server: web:8000;
# ㄴ 내부에서 nginx와 gunicorn이 통신할 떄 쓰이는 포트번호
}
server {
listen 80;
# ㄴ 외부와 통신할 때 쓰이는 포트
server_name aeiusprac.link;
# ㄴ 등록한 도메인
location / {
return 301 https://$host$request_url;
}
# ㄴ http로 호출이 되었을 때 https로 redirect 되도록 설정
location / .well-known/acme-challenge {
root /var/www/certbot;
}
# ㄴ let's encrypt certbot에서 요구하는 사항
}
server {
listen 443 ssl;
server_name aeiusprac.link;
location / {
# nginx에서 쓰는 default 세팅
proxy_pass http://SMOPS_PRAC;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
# nginx에서 정적파일들을 미리 가져올 수 있도록 설정
location /static/ {
alias /usr/src/app/static/;
}
location /media/ {
alias /usr/src/app/media/;
}
# 아래의 내용들은 ssl 관련 세팅으로 4줄 전부 복붙해서 사용
ssl_certificate /etc/letsencrypt/live/aeiusprac.link/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/aeiusprac.link/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl-dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
인증 스크립트 추가
아래의 링크로 들어가서 내용전체 복사하여 init-letsencrypt.sh 파일만들기
https://raw.githubusercontent.com/wmnnd/nginx-certbot/master/init-letsencrypt.sh
curl을 이용해서 붙여오는 방법이있다. 아래의 방법은 -L 커맨드를 이욯하는 방법인데 리눅스나 MacOS 환경에서 사용가능
curl -L https://raw.githubusercontent.com/wmnnd/nginx-certbot/master/init-letsencrypt.sh > init-letsencrypt.sh
가져온 스크립트 중 일부를 수정해야한다!
8 domains=(example.com www.example.com)
>> 해당 부분을 구매했던 도메인에 맞게 수정
...
11 email="" # Adding a valid address is strongly recommended
>> 이메일 작성
추가로 기본 docker-compose를 사용했다면 변경하지않아도 되지만
여러개의 docker-compose를 사용한다면 아래의 코드들도 변경을 해주어야한다.
33 docker-compose -f docker-compose.prod.yml run --rm --entrypoint "\
...
42 docker-compose -f docker-compose.prod.yml up --force-recreate -d nginx
...
46 docker-compose -f docker-compose.prod.yml run --rm --entrypoint "\
...
69 docker-compose -f docker-compose.prod.yml run --rm --entrypoint "\
이후 github push 완료 후 EC2 인스턴스 터미널에 접속하여 우선 docker-compose down
sudo docker-compose -f docker-compose.prod.yml down 한 뒤 재빌드
sudo docker-compose -f docker-compose.prod.yml build
sudo chmod +x init-letsencrypt.sh >스위치모드하여 권한을 실행가능하도록 설정
sudo ./init-letsencrypt.sh-+-
sudo docker-compose -f docker-compose.prod.yml up --build
후에 배포되어있는 사이트에 접속해서 https 적용 여부 확인
'회고록(TIL&WIL)' 카테고리의 다른 글
TIL 2022.10.25 Typescript 기본 (1) | 2022.10.25 |
---|---|
TIL 2022.10.25 React 기본 (0) | 2022.10.25 |
TIL 2022.09.06 Django 50문 50답 (0) | 2022.09.06 |
TIL 2022.08.30 Gunicorn, nginx (0) | 2022.08.30 |
TIL 2022.08.22 github actions(CI) - dotenv - Django - postgreSQL - Docker (0) | 2022.08.23 |