본문 바로가기
Games/Genshin Impact

Docker - Certbot을 이용한 Lets encrypt 인증서 발급 및 관리

by 올엠 2024. 2. 19.
반응형

Letsencrytpt는 Docker를 이용해서 쉽게 인증서를 제공하는 기능을 가지고 있다.

1. letsencrytpt 생성하기

sudo docker run -it --rm --name certbot   -v '/etc/letsencrypt:/etc/letsencrypt'   -v '/var/lib/letsencrypt:/var/lib/letsencrypt' certbot/certbot renew --manual --preferred-challenges=dns -d 'domain.site'

인증서 생성을 시작하면 몇가지 확인작업을 거치는데, 

필자는 dns의 레코드로 갱신하는 방법을 선택하여, 아래 _acme-challenge라는 값을 생성하여 모자이크 값을 입력해줘야 정상적으로 인증이 완료된다.

 

2. letsencrytpt 갱신하기

Letsencrytpt 는 기본 3개월 단위로 만료되기 때문에 3개월내에 갱신이 필요하다.

갱신하는 작업은 총 2단계로 보면 된다.

1. 인증서를 갱신 한다.

2. 갱신된 인증서를 서버에 반영한다.

1. 인증서를 갱신한다.

먼저 인증서를 갱신하기 위해서는 가장 알맞은 방법은 Crontab을 이용해서 예약된 시간에 인증서 작업을 실행하는 것이다.

certbot은 간단하게 인증서 갱신을 제공하는데, 위 생성 코드의 certonly 부분을 renew로 변경해주면 끝난다.

sudo docker run -it --rm --name certbot   -v '/etc/letsencrypt:/etc/letsencrypt'   -v '/var/lib/letsencrypt:/var/lib/letsencrypt' certbot/certbot renew --manual --preferred-challenges=dns -d 'domain.site'

 

이 작업을 리눅스 스캐줄러인 Crontab에 적용하자.

Crontab은 총 5개의 시간 스케줄로 관리된다. 정확하게 이해하기 어렵다면 아래 사이트에서 조정해 보면 쉽게 자신이 원하는 시간으로 설정이 가능할 것이다. Crontab.guru - The cron schedule expression editor

Letsencrytpt 의 경우 자주 갱신 시도를 할 경우 갱신 무시 기간이 들어가기 때문에 2주이상 1회 진행하는것이 좋고, 실제 갱신은 만료 30일 전에만 가능하다. 따라서 1달 간격 혹은 2주 간격으로 Crontab을 설정하도록 하자.

그리고 일반 유저가 아닌 SUDO 혹은 Root로 사용하고 있다면,(필자 처럼) 시간 다음에 유저이름을 입력하여 어떤 유저로 실행되는지 지정해 줘야 하고, 이후 실행하고자 하는 명령을 구성하면된다.

vi /etc/crontab

  SHELL=/bin/bash
  PATH=/sbin:/bin:/usr/sbin:/usr/bin
  MAILTO=root
  HOME=/

  # For details see man 4 crontabs

  # Example of job definition:

  # .---------------- minute (0 - 59)
  # |  .------------- hour (0 - 23)
  # |  |  .---------- day of month (1 - 31)
  # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
  # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
  # |  |  |  |  |
  # *  *  *  *  * user-name command to be executed

 

필자는 아래와 같이 한달에 한번 새벽 1시에 실행하는 갱신 작업과  이후 2시에 서버를 재시작하여 서버에 인증서를 적용할 수 있도록 구성하였다.

0 1 1 * * root docker run -it --rm --name certbot -v '/etc/letsencrypt:/etc/letsencrypt' -v '/var/lib/letsencrypt:/var/lib/letsencrypt' certbot/certbot renew --manual --preferred-challenges=dns -d 'domain.site'
0 2 1 * * root docker-compose -f /home/azureuser/docker-compose.yml down --remove-orphans > /dev/null && sudo docker-compose -f /home/azureuser/docker-compose.yml up -d

cli 처럼 사용하면 되지만, 더 쉽게 .sh를 만들어 스크립트를 구성하는 것도 실행오류를 줄일 수 있는 좋은 방법이다.

그리고 crontab에서 실행되는 경우 상대 경로보다는 절대경로를 사용하도록 하자.

 

 

 

반응형