apk add certbot certbot-nginx
내용
nginx:alpine docker 이미지를 사용하여 설치하고 이를 사용하여 도메인에 대한 SSL 인증서를 생성하는 방법에 대해 알아봅니다. 인증서를 가져오려면 인증서를 가져올 도메인을 소유해야 하며, 인증서를 도커 컨테이너가 노출된 공용 IP 주소로 확인해야 합니다.
요구사항
알파인 기반 이미지에서 certbot을 실행할 때 좀 까다롭습니다. certbot 모듈을 설치할 수 있으려면 먼저 몇 가지 종속성을 분류해야 합니다.
Docker 파일 작성은 아래와같이 적용
FROM nginx:alpine RUN apk add python3 python3-dev py3-pip build-base libressl-dev musl-dev libffi-dev RUN pip3 install pip --upgrade RUN pip3 install certbot-nginx RUN mkdir /etc/letsencrypt
데이터를 지속적으로 암호화하고 컨테이너를 폐기할 때 인증서 손실을 방지할 수 있도록 볼륨을 마운트 해야 할수 있습니다.
Nginx 설정하기
사용할 구성은 매우 간단합니다. 이 파일은 Nginx와 함께 제공되는 default.conf 파일이지만 먼저 불필요한 것들을 삭제하고자
“default.conf”라는 파일을 생성하고 다음 내용을 설정합니다.
server { listen 80; server_name yourdomain.com; location / { root /usr/share/nginx/html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
server_name 값을 본인 도메인으로 바꾸어야 합니다. 그리고 Docker 파일을 열고 끝 부분에 새 줄을 추가합니다.
COPY default.conf /etc/nginx/conf.d/default.conf
도커 이미지생성
Docker 파일을 작성하는 방법이며 아래와같이 생성하여 이미지를 만듭니다.
docker build -t nginx-certbot .
certbot으로 새로운 인정서 생성하기
먼저, 셸을 실행하기 위해 컨테이너를 실행합니다. 또한 lets 암호화 폴더를 마운트하여 인증서 데이터를 영구화합니다.
경고: nginx 폴더를 영구 볼륨에 마운트하는 것도 권장하지만 그건 알아서 하시길 바랍니다.
docker run -v $(pwd)/letsencrypt:/etc/letsencrypt --name nginx -ti -p 8080:80 nginx-certbot sh
그런 다음 서버 이름에 사용한 것과 동일한 yourdomain.com을 실제 도메인으로 바꾸는 certbot 명령을 실행합니다. www 도메인을 추가할 수도 있습니다. 인증서에 필요한 모든 추가 항목에 대해 “-d” 플래그를 추가합니다.
certbot --nginx -d yourdomain.com -d www.yourdomain.com
이제 certbot이 복구에 사용할 전자 메일 주소를 요청하고 지정된 도메인을 소유하고 있는지 확인합니다. 이 도메인에서 서버에 연결할 수 없는 경우 오류가 발생합니다. 도메인 확인에 성공하면 nginx 구성에서 HTTP에서 HTTPS로 리디렉션을 사용하도록 설정할지 여부를 묻는 메시지가 표시됩니다.
마지막으로 Nginx가 다시 로드되며 인증서 위치가 포함된 메시지를 수신해야 합니다. 원하는 경우 이제 이러한 인증서의 백업을 수행할 수 있습니다.
인증 자동적용하기
만료 날짜가 다가오면 인증서를 수동으로 확인 및 갱신하는 것이 번거로우니 크론탭 작업을 추가하여 작업을 수행할 수 있습니다.
0 12 * * * /usr/bin/certbot renew --quiet
결론
보시다시피 certbot을 사용하여 도메인에 대한 SSL 인증서를 만드는 것은 그리 어렵지 않았습니다. 의존성 작성때문에 알파인 도커이미지를 사용했는데 여러분 마음입니다.
출처 : Giko 를 인용하여 작성하였습니다.