Skip to main content

#1. 도커 컨테이너 기반 프로젝트에서 자동 SSL 발급 받는 법


⚠️ 문제
  • (Docker 기반으로 AWS Lightsail에서 운영하는 프로젝트)
  • HTTPS로 접속시 브라우저에서 '보안 경고'가 발생하는 문제


🔍 원인 분석
  • SSL 인증서 없음


⚡ 해결방법
  • 기존 docker-compose.yml 파일에 아래 2가지 Docker 이미지를 추가하여 SSL 자동 발급
    Nginx reverse proxy (jwilder/nginx-proxy),
    Let's Encrypt companion (JrCs/letsencrypt-nginx-proxy-companion)


기존 구성

📁 DainWiki/
├── 📁 bookstack/
├── 📁 bookstack_db/
├── docker-compose.yml

yml 파일 수정 후

📁 DainWiki/
├── 📁 bookstack/         # BookStack 컨테이너 설정 및 데이터
├── 📁 bookstack_db/      # MariaDB 데이터
├── 📁 certs/             # 인증서 저장소 (자동 생성됨)
├── 📁 html/              # nginx 기본 페이지 저장소
├── 📁 vhost.d/           # 가상 호스트 설정 (자동 생성됨)
├── docker-compose.yml   # 전체 도커 설정

image.png


📌 ① 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 발급기 역할