티스토리 뷰

반응형

도커 docker-compose로 Nginx를 활용하여 Let's Encrypt에서 무료 SSL인증서를 받아보겠습니다.

 

해당 인증서는 유효기간이 3개월로 짧은 편이므로, 기간에 맞춰 갱신을 하거나 자동화를 활용하여 기간이 지나지 않도록 관리해야 할 것 입니다.

 

이 글에서는 단순 발급하는 방법만 안내합니다.

 

우분투 20.04LTS 기준으로 작성되었습니다.

 

 

준비

먼저 인증서를 생성하고자 하는 도메인을 가지고 있어야 합니다.

 

이유는, Let's Encrypt에서 해당 도메인의 소유권을 확인하기 때문입니다. (Letsencrypt에서 http request로 확인합니다.)

 

당연히 외부에서 도메인을 통해 웹서버로 접근이 가능해야 합니다.

 

 

국내/국외 도메인을 구매할 수 있는 곳이 많이 있으므로 적당한 곳을 찾아 구매합니다.

 

글쓴이는 가비아를 많이 이용하기 때문에 가비아 기준으로 설명하겠습니다.

 

https://www.gabia.com

 

웹을 넘어 클라우드로. 가비아

그룹웨어부터 멀티클라우드까지 하나의 클라우드 허브

www.gabia.com

 

도메인을 구매했다면 웹서버 주소를 연결합니다.

 

가비아에서는 DNS관리에서 A레코드 수정으로 서버의 IP주소를 지정합니다.

 

만약 ipTIME 등의 DDNS를 사용중이라면 CNAME으로 도메인을 지정할 수 있습니다.

 

마지막으로 공유기가 있다면 80포트 포트포워딩 등의 설정을 해준 후, 외부에서 80포트를 통해 웹서버로 접근이 되는지 확인을 합니다.

 

 

환경설정 및 발급

docker-compose.yaml 파일을 생성하여 다음 내용을 저장합니다.

$ vi docker-compose.yaml
version: "3.3"
    
services:
  nginx:
    image: nginx:latest
    volumes:
        - ./nginx/conf.d:/etc/nginx/conf.d
        - ./nginx/log:/var/log/nginx
        - ./www:/var/www/html
    ports:
        - 80:80

  certbot:
    depends_on:
      - nginx
    image: certbot/certbot
    container_name: certbot
    volumes:
      - ./certbot/etc:/etc/letsencrypt
      - ./certbot/var:/var/lib/letsencrypt
      - ./www:/var/www/html
    command: certonly --webroot --webroot-path=/var/www/html --email myemail@gmail.com --agree-tos --no-eff-email --force-renewal -d mydomain.com -d www.mydomain.com

myemail@gmail.com 에 자신의 이메일을, mydoamin.comwww.mydomain.com 에는 구매한 도메인으로 변경하고 저장합니다.

 

nginx 및 conf.d 디렉토리를 생성합니다.

$ mkdir nginx
$ mkdir nginx/conf.d

 

Nginx의 default.conf 파일을 생성하고 다음 내용을 저장합니다.

$ vi nginx/conf.d/default.conf
server {
    listen 80;
    listen [::]:80;

    location ~ /.well-known/acme-challenge {
        allow all;
        root /var/www/html;
    }
}

 

docker-compose를 실행합니다.

$ docker-compose up
Starting certbot_nginx_1 ... done
Recreating certbot       ... done
Attaching to certbot_nginx_1, certbot
nginx_1    | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
nginx_1    | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
nginx_1    | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
nginx_1    | 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
nginx_1    | 10-listen-on-ipv6-by-default.sh: info: /etc/nginx/conf.d/default.conf differs from the packaged version
nginx_1    | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
nginx_1    | /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
nginx_1    | /docker-entrypoint.sh: Configuration complete; ready for start up
certbot    | Account registered.
certbot    | Requesting a certificate for mydomain.com and www.mydomain.com
certbot    |
certbot    | Successfully received certificate.
certbot    | Certificate is saved at: /etc/letsencrypt/live/mydomain.com/fullchain.pem
certbot    | Key is saved at:         /etc/letsencrypt/live/mydomain.com/privkey.pem
certbot    | This certificate expires on 2022-01-16.
certbot    | These files will be updated when the certificate renews.
certbot    | NEXT STEPS:
certbot    | - The certificate will need to be renewed before it expires. Certbot can automatically renew the certificate in the background, but you may need to take steps to enable that functionality. See https://certbot.org/renewal-setup for instructions.
certbot    | Saving debug log to /var/log/letsencrypt/letsencrypt.log
certbot    |
certbot    | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
certbot    | If you like Certbot, please consider supporting our work by:
certbot    |  * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
certbot    |  * Donating to EFF:                    https://eff.org/donate-le
certbot    | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
certbot exited with code 0

 

실행 결과를 확인하고 Ctrl+C를 눌러 도커를 종료합니다.

 

발급된 인증서는 certbot/etc/live에 저장됩니다.

 

 

 

반응형