certbot을 사용하여 webroot 방식을 통해 SSL 자동 갱신 설정하기.
시작하기에 앞서
1. 나는 현재 docker-compose로 프론트 백 같이 빌드하고 있고,
2. nginx에서 사용할 default.conf 파일은 마운트 된 상태이다.
3. nginx는 컨테이너로 관리하고 있다.
아래의 4개를 신경써서 해야한다.
나는 이거 설정해주는데 몇 시간을 날렸는데
경로 설정, 명령어 경로 설정, 디렉토리 이름 설정 이런 부분에서 한 걸음 나갈때마다 막혔다...
요약하자면, certbot을 계속 돌려둘 필요 없이 + 서비스의 중단 없이 ssl 인증을 자동으로 갱신할 수 있는 방법이다.
sudo apt update
sudo apt install certbot
설치하고 확인하기
certbot --version
Let'sEncrypt가 도메인 소유권을 확인하기 위해서
http://muzip.store/.well-known/acme-challenge/
이 주소에 인증 파일이 있나 없나 확인한다.
webroot 방식은 해당 주소에 인증 파일을 올려서 검증받는 방식이다.
그렇기에 Let'sEncrypt에서 접속할 수 있도록 default.conf 설정을 아래와 같이 해준다.
server {
listen 80;
server_name example.com;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
allow all;
}
}
여기서 경로 이름이 중요한지 모르겠지만 gpt는 /var/www/html
으로 하라고 했다가 /var/www/cerbot
으로 하라고 했다가 그러길래 둘다 해봤는데 certbot
으로 했을 때 동작했다.
경로가 영향을 미치는건지는 잘 모르겠음..
docker-compose.yml 에서 프론트 컨테이너(nginx)의 볼륨 마운트 부분이다.
위에서 사용한 경로와 리눅스 호스트에서 인증서 확인에 필요한 디렉토리를 연결을 해 줘야한다.
또한 여기서 /home/ubuntu/certbot-webroot
디렉토리 안에 .well-known/acme-challenge/
이 디렉토리 까지 같이 만들어 놓는다
그 후에 chmod -R 755 /path/to/certbot-webroot
로 권한 부여 까지 해주기
sudo certbot certonly --webroot -w /home/ubuntu/certbot-webroot -d muzip.store
여기서는 명령어를 잘 확인해야 한다.
-w 뒤에는 자신이 만들어둔 디렉토리로 설정해주고 -d 뒤에는 자신의 도메인을 넣어준다.
해당 도메인의 소유권을 검증받기 위해 우리의 도메인 주소를 넣는다.
명령어를 넣으면 인증서가 발급될 것이다.
여기서!! 저 디렉토리 안에 뭐가 생기는건 아니다!
명령어를 실행하면 certbot이 해당 디렉토리 안에 인증을 위한 파일을 넣고 Let'sEncrypt가 그 파일을 확인하기 위해 우리 서버에 접속 후 확인이 되면 인증서를 발급하면서 저 certbot-webroot 디렉토리 안에 파일을 삭제한다.
그래서 우리 눈에는 아무것도 안보임
crontab을 통해 알아서 갱신되도록 하기 전에
sudo certbot renew --dry-run
을 통해
인증서가 갱신되는지 확인한다.
인증서가 갱신이 되는걸 확인했으면
sudo crontab -e
을 통해 스케쥴러 편집창을 열고
0 3 * * * certbot renew --quiet && docker exec muzipfront nginx -s reload
새벽 3시에 인증서를 갱신하고 muzipfront 컨테이너에서 nginx 설정을 다시 reload 하라는 명령을 넣어준다.
일단 이렇게 설정을 해뒀으니 되는지 안되는지는 3달 후에 알 수 있지 않을까? ㅋㅋ;;
현재 인증서는 갱신했기 때문에 끝!