🧡 AWS

AWS EC2에 HTTPS 적용하기 (feat. Nginx, Certbot)

MNY 2024. 10. 4. 14:02
728x90
반응형
Keyword

1. certbot

2. nginx

3. letencrypt

4. domain

 

 https 적용 방법들? 

  • 스프링 자체 적용
  • nginx 사용 ✅
  • OSI 7계층의 L4계층?

 

 Github Clone 

* 해당 과정은 EC2 인스턴스에서 진행

init-letsencrypt.sh 만들기

init-letsencrypt.sh 파일 생성:

vi init-letencrypt.sh

 

작업 모드로 변경: i

init-letsencrypt.sh 파일 작성:

 

GitHub - wmnnd/nginx-certbot: Boilerplate configuration for nginx and certbot with docker-compose

Boilerplate configuration for nginx and certbot with docker-compose - wmnnd/nginx-certbot

github.com

  • 도메인명 변경
    • 우리가 만든 EC2의 public IP로 변경
    • 도메인(ex: todayspace.com)이 있다면 도메인명으로 변경
    • 단, 구매한 도메인에 우리가 만든 EC2 인스턴스의 public IP와 연결되어 있어야 함
    • 다음 단계(Jenkins)로 넘어가기 위해서는 도메인 필요
      • 무료, 유료 상관없으나 원활한 작업을 위해서는 유로 권장
  • 이메일 변경

저장하고 나가기: ESC + :wq

 

 docker-compose.yml 업데이트 

* 해당 과정은 EC2 인스턴스에서 진행

docker-compose.yml 업데이트

docker-compose.yml 경로로 가기:

  • 절대 경로 : /home/ubuntu
  • 상대 경로 : . (현재 디렉토리)
  • 명령어
    • pwd : 현재 경로
    • ls -al : 현재 디렉토리의 파일 전체 보기 ( . 숨김 파일 포함 )
    • ls : 현재 디렉토리의 파일 보기 ( 숨김 파일 제외 )

docker-compose.yml 파일 열기:

vi docker-compose.yml

 

작업 모드로 변경: i

docker-compose.yml 파일 업데이트

version: '3.8'

services:
  app:
    image: today-space-back:latest
    container_name: today-space-back
    env_file:
	    - ./config/.env
    ports:
      - "8080:8080"
    depends_on:
      - db

  db:
    image: postgres:14
    container_name: today-space-db
    env_file:
	    - ./config/.env
    volumes:
      - db_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
      
  nginx:
		image: nginx:latest
		container_name: today-space-nginx
	  ports:
		  - "80:80"
		  - "443:443" // add
	  volumes:
		  - ./data/nginx/app.conf:/etc/nginx/conf.d/default.conf
		  - ./data/certbot/conf:/etc/letsencrypt // add
      - ./data/certbot/www:/var/www/certbot // add
	  depends_on:
		  - app

	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;'"


volumes:
  db_data:

 

저장하고 나가기: ESC + :wq

 

 app.conf(nginx.conf) 업데이트 

* 해당 과정은 EC2 인스턴스에서 진행

app.conf 업데이트

app.conf 경로로 가기:

  • 절대 경로 : /home/ubuntu/data/nginx
  • 상대 경로 : ./data/nginx
  • 명령어
    • cd [디렉토리 경로] : 입력한 [디렉토리 경로]로 이동
    • cd ../ : 상위 디렉토리로 이동
    • cd - : 이전 디렉토리로 이동

app.conf 파일 열기:

vi app.conf

 

작업 모드로 변경: i

app.conf 파일 업데이트:

# app.conf

server {
    listen 80;
    server_name today-space.com; # 도메인명 또는 인스턴스 public IP
    server_tokens off;

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

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

server {
    listen 443 ssl;
    server_name today-space.com; # 도메인명 또는 인스턴스 public IP
    server_tokens off;

    ssl_certificate /etc/letsencrypt/live/today-space.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/today-space.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
		    root /usr/share/nginx/html;
		    try_files $uri /index.html;
		    index index.html index.htm;
    }
  
    location /v1 {
		    proxy_pass http://today-space.com:8080; # 혹은 다른 내부 네트워크 서비스로 설정
		    proxy_http_version 1.1;
		    proxy_set_header Upgrade $http_upgrade;
		    proxy_set_header Connection 'upgrade';
		    proxy_set_header Host $host;
		    proxy_cache_bypass $http_upgrade;
		    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		    proxy_set_header X-Forwarded-Proto $scheme;
    }

    error_page 500 502 503 504   /50x.html;
    location = /50x.html {
		    root /usr/share/nginx/html;
    }

}

 

저장하고 나가기: ESC + :wq

 

 참고 자료

 

Jenkins 컨테이너 속 docker Permission Denied on Mac

mac 환경에서 docker 기반 Jenkins 속 docker 커멘드 실행 시 권한 제한이 생길 때 해결 방법

sftth.github.io

 

 

 

728x90
반응형