본문 바로가기
Experience/- KT AIVLE School

KT AIVLE School 빅프로젝트 - 배포 과정 정리

by Yoojacha 2023. 7. 19.

AWS 설정

IAM User 등록 - group 설정 - MFA 적용

VPC 설정

  1. subnet 2개 생성
  2. 인터넷 게이트웨이 생성 (서브넷 2개 연결)

EC2 생성 및 설정

  • t2.medium (linux, cpu 4, 메모리8g 인스턴스, gp2 용량) 인스턴스 생성
  • 보안 그룹 설정
  • 탄력적 IP 주소 연결
  • ec2 인스턴스 원격 접속
  • ssh-keygen -t ed25519 -b 4096 으로 pub key 생성
  • cat ~/.ssh/id_ed25519.pub 해서 키 복사
  • github의 settings 페이지 안 deploy keys에 키 붙여넣기

EC2에 git 설치 및 레포지토리 클론

  • git 설치 sudo yum install git
  • git clone 우리의 레포지토리
  • git pull origin

EC2에 docker-compose 설치

  • docker 설치 sudo amazon-linux-extras install docker -y
  • docker 시스템 허가 sudo systemctl enable docker.service
  • docker 시스템 실행 sudo systemctl start docker.service
  • ec2-user가 docker를 실행할 수 있도록 권한 설정 sudo usermod -aG docker ec2-user
  • docker-compose 시스템 설치 sudo curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  • docker-compose 권한 설정 sudo chmod +x /usr/local/bin/docker-compose

EC2에 docker 설치 다른 방법

  # 1. 루트 사용자 전환
  sudo su

  # 2. Docker를 설치하기 위해 필요한 패키지들을 설치
  yum install -y docker

  # 3. Docker 서비스 시작
  sudo service docker start

  # 4. Docker 명령어를 sudo 없이 사용할 수 있도록 docker 그룹에 현재 사용자 추가
  sudo usermod -a -G docker ec2-user

  # 5. 변경사항 적용을 위해 인스턴스 재부팅
  sudo reboot

  # 6. docker가 올바르게 설치되었는지 확인
  docker info

docker-compose 실행

  • cp .env.sample .env
  • vi .env 혹은 nano .env로 수정
  • cat .env 확인
  • docker-compose -f docker-compose-deploy.yml up -d (데몬 옵션 백그라운드에서 실행)
  • docker-compose -f docker-compose-deploy.yml —run <서비스명> sh -c “python manage.py 명령”
  • docker-compose -f docker-compose-deploy.yml logs 로 실행 기록 확인

NginX 설정

location /api {
        ...
}

location /.well-known/acme-challenge {
        root /var/lib/letsencrypt/;
}

location / {
        ...
}

도메인 구매 후 ssl 인증서 발급

docker run -it --rm --name certbot \
            -v "/etc/letsencrypt:/etc/letsencrypt" \
            -v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
            certbot/certbot \
            certonly \
            --webroot \
            -w /var/lib/letsencrypt \
            -d 도메인명 \
            --agree-tos

domain 설정 router 53 설정

 

 

 

 

Nginx ssl 설정

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=STATIC:10m inactive=60m use_temp_path=off;

upstream nextjs_upstream {
    server nextjs:3000;
}

upstream backend_upstream {
    server backend:8000;
}

server {
    listen 80;
    server_name localhost;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name 도메인명;
    add_header Access-Control-Allow-Origin $http_origin;
    add_header Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, DELETE";
    add_header Access-Control-Allow-Headers "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range";
    add_header Access-Control-Expose-Headers "Content-Length,Content-Range";
    add_header Access-Control-Allow-Credentials "true";
    add_header Access-Control-Max-Age 7200;

    # SSL 인증서와 개인 키 파일 경로 설정
    ssl_certificate /etc/letsencrypt/archive/도메인명/fullchain1.pem;
    ssl_certificate_key /etc/letsencrypt/archive/도메인명/privkey1.pem;
}

.env 수정

docker-compose up으로 백엔드, 프론트엔드 실행

댓글