#1. 도커 컨테이너 기반 프로젝트에서 자동 SSL 발급 받는 법
문제
- Docker 기반으로 AWS Lightsail에서 운영 중인 프로젝트에서
- HTTPS 접속 시 **브라우저에 '보안 경고'**가 표시되는 문제
원인
- 서버에 유효한 SSL 인증서가 설정되어 있지 않기 때문이다.
- HTTPS를 사용할 경우, 신뢰된 인증 기관(CA)에서 발급한 인증서가 필요하며
- 없을 경우 브라우저는 연결을 '안전하지 않음'으로 간주한다.
해결 방법
- Docker 환경에서 자동으로 SSL 인증서를 발급 및 갱신하도록 설정하기 위해
- 아래 두 개의 Docker 이미지를 기존
docker-compose.yml
에 추가해서 해결했다.
사용 이미지
- Nginx Reverse Proxy
→jwilder/nginx-proxy
:
여러 컨테이너에 대한 요청을 자동으로 프록시해주는 리버스 프록시 서버 - Let's Encrypt Companion
→jrcs/letsencrypt-nginx-proxy-companion
:
위의 nginx-proxy와 연동되어, Let's Encrypt를 통해 SSL 인증서를 자동 발급 및 갱신
기존 구성
📁 DainWiki/
├── 📁 bookstack/
├── 📁 bookstack_db/
├── docker-compose.yml
yml 파일 수정 후
📁 DainWiki/
├── 📁 bookstack/ # BookStack 컨테이너 설정 및 데이터
├── 📁 bookstack_db/ # MariaDB 데이터
├── 📁 certs/ # 인증서 저장소 (자동 생성됨)
├── 📁 html/ # nginx 기본 페이지 저장소
├── 📁 vhost.d/ # 가상 호스트 설정 (자동 생성됨)
├── docker-compose.yml # 전체 도커 설정
📌 ① Let's Encrypt 인증서 발급용 설정
service:
- VIRTUAL_HOST=dainwiki.com
- LETSENCRYPT_HOST=dainwiki.com
- LETSENCRYPT_EMAIL=your@email.com
📌 ② APP_URL 값 http → https로 변경함
- - APP_URL=http://dainwiki.com
+ - APP_URL=https://dainwiki.com
→ 프로젝트가 내부적으로 https 주소를 인식하게 해준다.
📌 ③ nginx-proxy 및 letsencrypt 컨테이너 추가
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./certs:/etc/nginx/certs
- ./vhost.d:/etc/nginx/vhost.d
- ./html:/usr/share/nginx/html
networks:
- bookstack_net
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: letsencrypt
restart: always
environment:
- NGINX_PROXY_CONTAINER=nginx-proxy
- DEFAULT_EMAIL=your@email.com
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./certs:/etc/nginx/certs
- ./vhost.d:/etc/nginx/vhost.d
- ./html:/usr/share/nginx/html
depends_on:
- nginx-proxy
networks:
- bookstack_net
→ 자동 프록시 + SSL 발급기 역할