문제 발견
오늘 갑자기 아버지한테 홈페이지가 작동하지 않는다는 연락을 받았다.
그래서 별일 아니겠지 하면서 접속해보았더니 아니나다를까 api 서버가 연결이 안되서 로딩이 안되고 있었다.
분명 어제까지도 잘들어가지는 홈페이지였는데 왜 고장났을까 원인을 생각하다가
번쩍 하고 든 생각은 아! certbot으로 설정해두었던 인증서가 만료되어서 접근이 안되는거구나
그래도 혹시 몰라 OCI랑 호스팅 사이트에 들어가서 아이피 주소를 대조해보고 상태도 확인해봤지만 역시나 별다른 문제는 없었다.
마지막으로 curl 명령어를 사용하여 HTTPS 인증서를 확인해 보았는데 역시나 인증서가 만료되었다.
curl -v https://api.dreamseekers.kr
curl: (60) SSL certificate problem: certificate has expired
More details here: https://curl.se/docs/sslcerts.html
해결
문제를 해결하기 위해 MobaXterm으로 인스턴스에 접속해서 docker에 올라간 cerbot 컨테이너를 재시작해주었다.
docker-compose run --rm certbot certbot certonly \
--webroot --webroot-path=/var/www/html \
--email [이메일] --agree-tos --no-eff-email \
-d [도메인]
이후에 nginx 컨테이너를 재시작하여 인증서를 적용한다.
docker-compose restart nginx
이렇게 발급받은 인증서는 90일간 유효하다. 하지만 90일뒤에 또 이런일을 반복하기엔 귀찮기에 cron을 설정해주었다.
echo '0 0 * * * docker run --rm \
-v /etc/letsencrypt:/etc/letsencrypt \
-v /var/www/html:/var/www/html \
certbot/certbot renew --quiet \
--deploy-hook "docker exec [nginx컨테이너] nginx -s reload"' | crontab -
아마 한동안은 문제가 없겠지만 또 다시 문제가 생긴다면 그때 또 확인해봐야할 것 같다.
---- 26.01.06 추가 ----
이번에도 접속이 안되서 확인해봤더니 마찬가지로 인증서 문제였는데
1. 기존 명령어(--deploy-hook "docker exec...")는 Certbot 컨테이너 안에서 또 docker 명령어를 찾으려고 했기 때문에 실행되지 않았습니다.
2. 에러가 발생했을때 로그가 메일로 전송이 안되서 로그 자체가 날아감
변경한 cron
1. 호스트(Ubuntu)에서 인증서 갱신을 끝낸 뒤, 이어서 Nginx를 리로드하는 방식이라 확실하게 작동합니다.
2. 경로를 확실하게 지정
3. 뒤에 붙은 >> /home/ubuntu/cert_renew.log 2>&1 덕분에, 나중에 혹시라도 갱신이 안 되면 로그 파일만 열어보고도 무엇이 문제인지 바로 알 수 있습니다.
0 0 1 * * cd /home/ubuntu/Dreamseekers && /usr/bin/docker-compose run --rm certbot certbot renew --quiet && /usr/bin/docker-compose exec -T nginx nginx -s reload >> /home/ubuntu/cert_renew.log 2>&1
'프로그래밍 > 개발 일지' 카테고리의 다른 글
| [multiSnake] #1 구상과 기본 설계 (0) | 2025.09.29 |
|---|---|
| [Spring] 동시성 속에서 무결성 지키기 (0) | 2025.09.26 |
| [꿈찾아] 강의 문의 기획 (0) | 2025.09.12 |