도메인을 구입하고 연결해서 접속하는것 까지는 좋았지만 여전히 신경쓰이게 하는 요소가 있는데 그것은 바로 이것이다.
이왕 아버지께 드리는 블로그인 만큼 위의 꺼림칙한 문구를 없애고 싶고 기본적인 보안도 갖추고 싶다. 따라서 HTTPS 인증을 받도록 한다.
HTTPS는 기존의 HTTP(HyperText Transfer Protocol)에 Secure를 더한 것으로 SSL(Secure Socket Layer)를 기반한 통신방식이다. 그냥 HTTP는 암호화 하지 않은 상태로 통신 하므로 보안에 굉장히 취약하다.
● Certbot, letsencrypt 준비
docker-compose.yml에 Cerbot 설정
docker에서는 이미 Cerbot와 관련한 이미지가 만들어져 있으므로 docker-compose.yml 파일만 수정하면 된다. cp docker-compose.yml docker-compose.prod.yml 명령어로 이전에 만든 파일을 docker-compose.prod.yml 파일로 복사한다.
그 후 docker-compose.yml 파일이 HTTPS를 지원하도록 한다.
# 1: Nginx 웹 서버가 SSL로 통신하기 위하여 443 포트로 설정한다.
# 2: certbot라는 이름의 새 컨테이너 이미지를 만든다.
# 3: 도커에서 제공하는 certbot 이미지를 가져온다.
# 4: 이부분은 리눅스 명령어로 12시간 마다 do certbot renew; 명령어로 인증서를 갱신한다.
# 5: nginx와 certbot의 volumes 부분에 ./data.... 부분이 같은데 이는 두 컨테이너가 인증 관련 파일을 공유하도록 하기 위함이다.
두 컨테이너 모두 컨테이너 상의 인증서 관련 폴더인 /etc/letsencrypt와 /var/www/certbot을 현재 작업 중인 폴더 하위에 있는 data/certbot 폴더를 이용하도록 설정하며 이 폴더는 앞으로 certbot에 의해 생성된 인증서 관련 파일을 저장한다.
nginx.conf 파일에 도메인과 certbot 설정
nginx 폴더의 nginx.conf 파일을 수정하기 위해 다음의 명령어로 편집기를 연 후 수정한다. 그 후 더이상 수정할 일이 없기 때문에 설정 파일을 마운트하지 않고 이미지에 복제해서 주입하는 방식으로 구현한다.
nginx.conf를 수정했다면 컨테이너 이미지를 다시 빌드하여 수정한 설정들을 반영하도록 한다. 명령어는 sudo docker-compose build nginx다.
LIghtsail의 네트워킹 페이지에서 443 포트를 열어준다.
AWS 서버에서 letsencrypt 인증서 받기
AWS 서버에서 letsencrypt에 인증서를 줄 것을 요청하기 위해 먼저 cmber 터미널에 curl 명령어로 인증서 요청을 쉽게 해주는 오픈 소스를 내려받는다.
다운로드 받은 init-letsencrypt.sh 파일의 일부분을 수정한 후 모두 commit 한다.
● AWS 서버 인증
git pull로 push했던 변경사항들을 AWS 서버로 가져오고 sudo docker-compose down으로 구동중인 컨테이너를 삭제 후 sudo chmod init-letsencrypt.sh로 init-letsencrypt.sh에 실행 권한을 준다. 마지막으로 sudo ./init-letsencrypt.sh 파일의 스크립트를 실행한다.
눈물겨운 500에러와 자꾸만 http로 접속되는 사투 끝에 정상적으로 HTTPS로 연결이 사용되었다. 위의 rsa 부분을 4090을 입력할 것이 아니라 원래 입력되어있던 $rsa_key_size를 그대로 냅두는 것이 알맞은 코드였다.
'Backend > Django + Bootstrap 개발 일지' 카테고리의 다른 글
39. 소셜 로그인 설정 (0) | 2022.10.27 |
---|---|
37. 도메인 연결 (0) | 2022.10.24 |
36. 아마존 웹 서비스로 배포! (0) | 2022.10.23 |
35.Gunicorn, Nginx (0) | 2022.10.23 |
34. PostgreSQL 사용 (0) | 2022.10.21 |