[Spring] Docker Compose를 사용해서 Spring Https 적용기

Sihwan Kim·2024년 2월 20일
0

Spring

목록 보기
2/6
post-thumbnail

Docker-Compose + Nginx + CerBot을 쉽게 적용가능하도록 도와준 github

https://github.com/wmnnd/nginx-certbot


1. 도메인 발급

저는 무료로 사용하기 위해 내 도메인.한국 을 사용했습니다.

이곳에 Ec2 IP를 작성한다.

Elastic IP (탄력적 IP)를 사용해서 IP를 고정하여야한다.


2. nginx.conf 파일 작성


upstream 도커컨테이너 이름 {
    server 도커컨테이너 이름:8080;
}

server {
    listen 80;
    listen [::]:80;

    server_name 도메인;

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

   location / {
        return 301 https://$host$request_uri;
    }
}


server {
    listen 443 ssl;
    server_name 도메인;
    server_tokens off;

    ssl_certificate /etc/letsencrypt/live/vote-share.kro.kr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/vote-share.kro.kr/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        proxy_pass http://도커 컨테이너이름;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

3. docker-compose 파일 작성

version: '1'
services:
  spring-app:
    image: 본인 스프링 이미지
    container_name: 컨테이너이름
    ports:
      - "8080:8080"
    restart: unless-stopped


  nginx:
    image: nginx:1.15-alpine
    restart: unless-stopped
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
      - ./data/certbot/conf:/etc/letsencrypt
      - ./data/certbot/www:/var/www/certbot
    ports:
      - "80:80"
      - "443:443"
    command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
  certbot:
    image: certbot/certbot
    restart: unless-stopped
    volumes:
      - ./data/certbot/conf:/etc/letsencrypt
      - ./data/certbot/www:/var/www/certbot
    entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"

이부분에서 중요하게 봐야할 것은

  nginx:
    image: nginx:1.15-alpine
    restart: unless-stopped
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
      - ./data/certbot/conf:/etc/letsencrypt
      - ./data/certbot/www:/var/www/certbot
    ports:
      - "80:80"
      - "443:443"

./nginx.conf:/etc/nginx/conf.d/default.conf

이부분에서 : 앞부분이 compose 파일 기준 nginx.conf파일 위치이다.


4. let's Encrypt 실행파일

https://github.com/wmnnd/nginx-certbot/blob/master/init-letsencrypt.sh

이 파일을 본인 도메인에 맞게 수정해서 사용

5. 실행파일 동작 이후 Compose 실행

sudo docker-compose build
sudo sh ./init-letsencrypt.sh
sudo docker-compose up -d

이렇게 https 적용 성공!!

0개의 댓글