이번에 참가하는 해커톤은 참가자들에게 서버를 제공해준다. 그 서버를 오늘 받아서 그 서버로 배포를 진행했다.
그런데, 서버 내에 설치된 nginx가 80번 포트에 bind되어 있었다. 우리 서비스의 백엔드 서버는 Docker Compose를 이용해서 nginx, gunicorn, certbot을 동시에 돌리는 구조이다. 하지만 기존의 nginx가 이미 80번 포트를 먹고 있기 때문에, Docker Compose의 nginx 컨테이너를 다른 포트에 배정해 주었다.
이렇게 하니 문제가 생겼는데, 바로 기존에 사용하던 방식으로 certbot 인증이 되질 않던 것이다. 찾아보니, 기존에 사용하는 방식이 http 방식의 인증으로 80번 포트를 이용하는 방식이라고 한다. 우리는 다른 포트를 사용하기 때문에 http 방식을 이용할 수 없었던 것이다.
이 문제를 해결하기 위해 찾아보니 certbot은 http 방식 말고 dns 방식의 challenge가 있다는 것이다. nginx + certbot boilerplate 및 Route 53을 사용하는 상황에서 certbot으로 dns challenge를 받는 방법을 정말 대충 정리해 봤다.
--preferred-challengescertbot의 챌린지 방식을 바꿀 수 있음
http 방식의 challenge (certbot이 구동중인 서버에서 직접 파일을 찾아가는 방법)init-letsencrypt.shdocker-compose를 모두 docker compose로 변경init-letsencrypt.sh의 마지막 부분의 certbot certonly ~ 부분을 아래 내용으로 변경
certbot certonly --manual --preferred-challenges dns -d 도메인.tld
이메일 등 입력 후 어떤 키가 나타나며 TXT 레코드를 추가하라고 나타나면, 그 Route 53의 호스팅 영역 > 레코드 > 레코드 생성으로 이동
._acme-challenge 입력레코드 생성 후 다음으로 진행하면 인증서가 잘 생성됨
나머지는 기존 배포 세팅과 같음