엄지월드

https 적용하기(Docker 사용) 본문

Server&DevOps

https 적용하기(Docker 사용)

킨글 2024. 9. 28. 14:22

AWS Linux 1 버전에서 HTTPS를 무료로 적용하는 방법은 다음과 같다.
주로 Let's Encrypt를 사용하여 SSL 인증서를 발급 받는다. 

EPEL 리포지토리 활성화:

sudo yum install epel-release

Certbot 설치

sudo yum install certbot

SSL 인증서 발급

Certbot이 인증서를 발급받으면, 발급된 인증서와 비공개 키는 /etc/letsencrypt/live/api.datecourse.net/ 디렉토리에 저장됩니다. 이 디렉토리에는 다음 파일이 포함됩니다:
- fullchain.pem: 전체 인증서 체인
- privkey.pem: 비공개 키

sudo certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com

 

인증서 자동 갱신 설정

Let's Encrypt 인증서는 90일마다 만료됩니다. 자동 갱신을 설정하려면 다음 명령어를 추가합니다.

echo "0 0 * * * root certbot renew --quiet" | sudo tee -a /etc/crontab > /dev/null

 

Dockerfile 설정

# 1단계: 애플리케이션 빌드
FROM node:16 AS build

# 작업 디렉토리 설정
WORKDIR /app

# 의존성 파일 복사
COPY package*.json ./

# 의존성 설치
RUN npm install

# 모든 소스 코드 복사
COPY . .

# 애플리케이션 빌드
RUN npm run build

# 2단계: 애플리케이션 제공
FROM nginx:alpine

# 사용자 정의 nginx 설정 파일 복사
COPY nginx.conf /etc/nginx/nginx.conf

# 첫 번째 단계에서 빌드한 아티팩트를 Nginx의 html 디렉토리로 복사
COPY --from=build /app/build /usr/share/nginx/html

# 포트 80 노출
EXPOSE 80 443

# Nginx 서버 실행
CMD ["nginx", "-g", "daemon off;"]

 

nginx.conf 설정

worker_processes auto;

events {
    worker_connections 1024;
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    sendfile on;
    keepalive_timeout 65;

    server {
        listen 80;
        server_name your_domain;

        # HTTP 요청을 HTTPS로 리다이렉트
        return 301 https://$host$request_uri;
    }

    server {
        listen 443 ssl;
        server_name datecourse.net;

        ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;

        location / {
            root /usr/share/nginx/html;
            try_files $uri /index.html;
        }

        error_page 404 /index.html;
    }
}

 

아래와 같이 실행 한다. 

docker run -d \
  -p 80:80 -p 443:443 \
  -v /etc/letsencrypt:/etc/letsencrypt \
  dockerid/travel-ui

 

Comments