services:
nginx:
container_name: nginx
image: nginx:1.22.1-alpine
restart: always
ports:
- 80:80
volumes:
- /etc/letsencrypt:/etc/letsencrypt
- /var/lib/letsencrypt:/var/lib/letsencrypt
- ${DOCKER_COMPOSE_ROOT}/nginx/sites.conf:/etc/nginx/conf.d/sites.conf
- ${DOCKER_COMPOSE_ROOT}/nginx/sites-enabled:/etc/nginx/sites-enabled
server {
listen 80;
server_name userdomain.com;
location / {
rewrite ^ https://$server_name$request_uri? permanent;
}
location /.well-known/acme-challenge {
root /var/lib/letsencrypt/;
}
}
docker run -it --rm --name certbot \
-v "/etc/letsencrypt:/etc/letsencrypt" \
-v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
certbot/certbot \
certonly \
--webroot \
-w /var/lib/letsencrypt \
-d {userdomain.com} \
--agree-tos
userdomain.com은 수정해주어야 한다.
또한 메일 정보를 입력하라고 하는데 해당 내용을 입력하면 정상적으로 종료된다.
server {
listen 80;
server_name userdomain.com;
location / {
rewrite ^ https://$server_name$request_uri? permanent;
}
}
server {
listen 443 ssl;
server_name userdomain.com;
location / {
proxy_pass my-server:3000;
}
ssl_certificate /etc/letsencrypt/live/userdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/userdomain.com/privkey.pem;
}
ssl 인증 파일로 ssl이 적용되도록 수정해준다.
이렇게 하면 모든 ssl 적용이 종료된다. 생각보다 금방 끝나지만 네트워크 문제나 이런 저런것들을 신경쓰면 오래걸릴 수도 있다.
docker run --rm --name certbot -v "/etc/letsencrypt:/etc/letsencrypt" -v "/var/lib/letsencrypt:/var/lib/letsencrypt" certbot/certbot renew
재발급을 위한 스크립트인데
자동화 하기 위해서는
crontab -e
0 5 5,15,25 * * /usr/bin/docker run --rm --name certbot -v "/etc/letsencrypt:/etc/letsencrypt" -v "/var/lib/letsencrypt:/var/lib/letsencrypt" certbot/certbot renew >> /var/log/certbot_renew.log
매월 스크립트를 1일, 15일, 25일 5시에 재발급 해주는 스크립트를 작성할 수 있다.
10 5 5,15,25 * * /usr/bin/docker restart {container-nginx}
그리고 nginx를 재실행주는 크롭탭도 추가해주면 자동으로 계속해서 재발급을 진행할 수 있다.