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