Certbot SSL 인증서 자동갱신 하기 (feat. Docker & Crontab)

2025. 2. 27. 16:40·OS/Linux
귀찮은 갱신을 해야하는 거시에오

원래는 크론탭이라고 자동갱신을 해둬야하는데 나는 docker로 띄워놔서 크게 상관이 없었다
그냥 docker-compose.yml의 entrypoint에 적어두면 되는 것이라서!
 
그래도 오늘은 두가지 방법 다 어떻게 하는지 포스팅 해보겠다
어차피 나 또 나중에 까먹을테니까...


0. 각각의 장단점?

- Docker-compose에 하면 docker 하나로 다 끝낼 수 있다는 장점이 있다
- 근데 반면에 crontab보다 좀 더 귀찮은 것 같다...
 
- crontab(크론탭)으로 하면, 좀 더 쉬운데 Docker 외부 서비스를 쓰게 된다
- docker-compose가 꺼져있어도 되는 장점이 있긴함


1. Docker로 certbot 자동 갱신하는 방법

일단 한줄을 추가하면 된다

entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew --webroot -w /var/www/certbot --quiet; sleep 24h; done'"

 
이걸 docker-compose.yml에 있는 certbot 부분에 등록해두면 된다
그럼 알아서 갱신한다
 
아래는 docker-compose.yml의 certbot 전문 예시

더보기
  certbot:
    image: certbot/certbot
    restart: always
    container_name: certbot-container
    volumes:
      - ./letsencrypt:/temp  # 인증서 파일 저장 위치
      - ./certbot/www:/temp  # 인증서 challenge 파일 저장 위치
    entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew --webroot -w /var/www/certbot --quiet; sleep 24h; done'"
    networks:
      - jenkins_network
    depends_on:
      - nginx

나는 초기엔 sleep 24h를 보고 `하루 단위로 하는게 너무 낭비이지 않나?` 싶어서 7일인 168h으로 변경해두었다
근데 알고보니 certbot의 renew는 30일 이하로 남았을 때만 갱신된단다 (이자식.. 똑똑하잖아?)
 
다만 갱신한다고 nginx가 알아서 재시작 되는건 아니니까 이건 또 기능을 추가해줘야한다
그럼 아래 순서의 수행이 필요함

1) .sh 파일 만들기
2) 파일 실행 권한 부여
3) volume 연결

1) .sh 파일 만들기

파일 이름은 nginx-reload.sh라고 가정

#!/bin/sh
docker exec nginx-container nginx -s reload

2) 파일 실행 권한 부여

chomod +x nginx-reload.sh

3) volume 연결

docker-compose.yml의 certbot volume 파트에 스크립트 경로를 추가해준다

  certbot:
    image: certbot/certbot
    restart: always
    container_name: certbot-container
    volumes:
      - ./letsencrypt:/temp  # 인증서 파일 저장 위치
      - ./certbot/www:/temp  # 인증서 challenge 파일 저장 위치
      - ./certbot/nginx-reload.sh:/nginx-reload.sh  # 스크립트 추가
    entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew --webroot -w /var/www/certbot --quiet --deploy-hook \"/nginx-reload.sh\"; sleep 24h; done'"
    networks:
      - jenkins_network
    depends_on:
      - nginx

이제 docker container를 다시 실행시켜서 스크립트 파일이 root 경로에 있는지 확인하고
도커 내부에서 직접 실행시켜본 뒤 컨테이너 로그를 확인하면 정상동작하는지 쉽게 확인할 수 있다
 
로그를 보면 인증서 데드라인이 아직 남아서 갱신 안되고 skip된 것을 확인할 수 있음


2. Crontab에 certbot 자동갱신 등록하는 방법

일단 Crontab은 특정 시간 간격으로 명령어를 실행하는 리눅스의 스케줄링 도구이다
그니까 쉽게 말하면 `매주 월요일에 certbot 인증 갱신하는 스크립트 실행시켜`가 되는 것임
우리가 할 것은 딱 두가지

1) 스크립트를 짜고
2) 크론탭을 등록한다

1. 스크립트

### 템플릿 ###
#!/bin/sh
docker compose -f {.yml 파일 이름} exec {certbot 서비스명} certbot renew
docker exec {nginx 컨테이너명} nginx -s reload

### 예시 ###
#!/bin/sh
docker compose -f docker-compose.yml exec certbot certbot renew
docker exec nginx-container nginx -s reload

2. 크론탭 등록

터미널에 crontab -e 입력하면 크론탭 편집 가능하다
그리고 맨 아랫줄에 추가하면 됨

### 예시 ###
0 0 * * 1 /home/n100/docker-compose/certbot-renew.sh >> /var/log/certbot-renew.log 2>&1

위 처럼 스크립트 경로 주고, 나 같은 경우는 매주 월요일, 스크립트를 실행하고, 출력을 로그로 저장하게 함
0 0 * * 1을 설명하면 아래와 같다

0 0 * * 1: 시간 및 날짜 필드 (분, 시, 일, 월, 요일)
    0 0: 0분, 0시 (즉, 매일 자정에 실행)
    *: 모든 날 (매일)
    *: 모든 월 (매월)
    1: 월요일 (요일, 1은 월요일을 의미)

 
등록 잘 됐는지 보려면 터미널에 crontab -l 입력하면 됨

'OS > Linux' 카테고리의 다른 글

우분투 할당되지 않은 하드 디스크 할당하기 (feat. Beelink S12 Pro)  (0) 2025.03.27
Certbot SSL 인증서 만료일 확인하기 (feat. certbot SSL 인증 유효기간)  (0) 2025.02.27
서버 간 핑(ping), 통신 테스트 (feat. nc, nmap, python)  (0) 2025.02.14
Certbot으로 서버에 HTTPS 적용하기 (feat. 부셔버릴 통신사 공유기)  (1) 2025.02.13
HDMI 뺐다 끼면 소리 안나옴 (feat. Beelink S12 Pro)  (0) 2025.02.12
'OS/Linux' 카테고리의 다른 글
  • 우분투 할당되지 않은 하드 디스크 할당하기 (feat. Beelink S12 Pro)
  • Certbot SSL 인증서 만료일 확인하기 (feat. certbot SSL 인증 유효기간)
  • 서버 간 핑(ping), 통신 테스트 (feat. nc, nmap, python)
  • Certbot으로 서버에 HTTPS 적용하기 (feat. 부셔버릴 통신사 공유기)
Ratatou2
Ratatou2
온갖 정보들을 기록해두는 메모보드 블로그
  • Ratatou2
    nak-z
    Ratatou2
  • 전체
    오늘
    어제
  • 공지사항

    • 블로그 이전 진행 중 (24.11.25 ~)
    • 분류 전체보기 (209) N
      • OS (71) N
        • Linux (39) N
        • Window (20)
        • Mac (7) N
        • Android (5) N
      • Infra (51) N
        • Docker (22) N
        • Jenkins (9)
        • n8n (13)
        • Nextcloud (1)
        • Rasberry Pi (6)
      • Dev (12)
        • JAVA (3)
        • Python (0)
        • DB (3)
        • Vue (2)
        • AI (4)
        • Git (0)
      • CS & Algorithm (42) N
        • CS (1)
        • Algorithm (41) N
      • Game (10)
        • Zomboid (9)
        • Don't Starve Together (1)
      • etc (23) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • . hELLO· Designed By정상우.v4.10.1 .
Ratatou2
Certbot SSL 인증서 자동갱신 하기 (feat. Docker & Crontab)
상단으로

티스토리툴바