SSL 인증서 자동 재발급 (Let's encrypt, docker)

Coastby·2025년 2월 28일
0

기타

목록 보기
13/13

기존에 docker를 이용해서 ssl 인증서를 발급받았다.

# ssl 다운
docker run -it --rm \
		-v /root/letsencrypt:/etc/letsencrypt \
		-v /var/www/certbot:/var/www/certbot \
		certbot/certbot certonly --webroot \
		-w /var/www/certbot \
		-d [도메인주소]

90일만 유효하며 만료일 30일 전부터 갱신이 가능하다. 수동으로 갱신하기 위해서는 아래 명령어로 실행 가능하다.

docker run -it --rm              
	-v /root/letsencrypt:/etc/letsencrypt           
    -v /var/www/certbot:/var/www/certbot            
    certbot/certbot renew

그러나 매번 다시 들어올 수는 없으므로 crontab을 이용해서 재발급을 자동화한다.

1. sh 파일 만들기
원하는 위치에 아래 sh 파일 생성 (vim [원하는위치]/renew-ssl.sh)
현재 docker로 nginx를 띄워놔서 nginx에서 파일을 reload하는 명령어를 함께 실행한다.

#!/bin/bash

# 로그 파일 설정
LOG_FILE="/root/letsencrypt/renewal.log"
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')

echo "[$TIMESTAMP] 인증서 갱신 시작" >> $LOG_FILE

# 인증서 갱신 시도
docker run --rm \
  -v /root/letsencrypt:/etc/letsencrypt \
  -v /var/www/certbot:/var/www/certbot \
  certbot/certbot renew >> $LOG_FILE 2>&1

# 갱신 결과 확인
if [ $? -eq 0 ]; then
  echo "[$TIMESTAMP] 인증서 갱신 성공 또는 갱신 필요 없음" >> $LOG_FILE

  # 웹 서버 재시작 또는 리로드 (nginx 예시)
  # systemctl reload nginx
  # 또는 Docker를 사용하는 경우:
  docker exec [nginx-container-이름] nginx -s reload

  echo "[$TIMESTAMP] 웹 서버 재시작 완료" >> $LOG_FILE
else
  echo "[$TIMESTAMP] 인증서 갱신 실패" >> $LOG_FILE
fi

2. sh 파일 실행 권한 부여

chmod +x /root/renew-ssl.sh

3. script 테스트
/root/renew-ssl.sh
직접 renew를 진행해보고
cat /root/letsencrypt/renewal.log
로그 파일에서 정상적으로 실행되었는지 확인한다.

4. crontab에 등록하기
crontab -e로 crontab 설정을 열고 아래 줄을 입력한다.

# 매월 1, 15일 3:30에 ssl 인증서 renew 시도
30 3 1,15 * * /root/renew-ssl.sh

매월 1, 15일에 실행되지만 실제 renew는 만료일 30일 전에만 가능해서 날짜가 되면 renew가 진행될 것이다.

profile
훈이야 화이팅

0개의 댓글

관련 채용 정보