**EC2에 배포한 애플리케이션에 Load Balancer 와 도메인 및 HTTPS 인증서 열기
=>Load Balancer 와 Domian그리고 HTTP 인증서는 배포된 Application이라면 전부 연결할 수 있음
1.EC2에 Django 배포하기
1)Django Project 생성
=>가상 환경 생성: 애플리케이션을 다른 곳에 배포할 때 필요한 패키지만 가져가서 실행하기 위해서
-배포할 애플리케이션을 만들 때는 필수
-python3 -m venv ./myvenv #윈도우즈에서는 python3 대신에 python,pip
-myvenv/Scripts/activate
=>필요한 패키지 설치
pip install django
=>코딩
-장고프로젝트 생성:django-admin startproject ec2django
-
-settings.py파일의 ALLOWED_HOSTS부분을 ['*'] 으로 수정
=>실행해서 테스트
-python manage.py migrate
-python manage.py runserver 0.0.0.0:80
=>사용한 패키지 목록을 텍스트 파일에 내보내기
- pip freeze > requirements.txt
=>git 에 push: EC2는 Ubuntu Linux 운영체제로 생성할 것인데 Linux 에서 프로젝트를 만들어서 코딩하는 것은 쉽지 않아서 Windows에서 작업하고 clone을 받아서 사용하기 위함
-github에 접속해서 repository 생성
-로컬에서 코드를 commit
git init
git add .
git commit -m "
-로컬의 프로젝트와 repository 연결한 후 push
git remote add 이름 github레포지토리이름url #처음 만들 떄는 이름을 일반적으로 origin으로 설정
git push origin main #코드 업로드, origin은 이름이고 main은 branch 이름
-코드가 업로드가 안되는 경우
1)현재 branch가 main이 아닌 경우: git hub의 기본 branch 는 main인데 첫 브랜치 이름은 master 로 나오는 경우가 종종 있음 => git branc -m master main으로 해도됨 git checkout -b main
2)인증이 되지 않은 경우: 인증을 여러 번 수행해서 현재 기본 인증이 맞지 않는 경우
먼저 git hub에서 토큰을 하나 발급 받고 난 후 아래 명령을 수행하고 첫 push를 할 때 입력
git remote set-url origin https://유저이름@github.com/유저이름/레포지이름.git
3)github의 commit 과 내 commit 이 맞지 않은 경우
레포지토리 생성시 readme 파일을 생성했거나 다른 곳에서 push를 한 경우인데 이 경우는 먼저 pull
2)EC2에 python과 git 을 설치하고 push 된 코드를 clone해서 실행
=>인스턴스를 생성하는데 되도록이면 22,80.443 을 공개한 형태로 생성
=>접속방법
-원격 콘솔에 접속
-원격으로 pem과 함께 연결
=>서버로 사용할 목적이라면 Elastic IP를 할당받아서 연결 해주어야 합니다.
기본적으로 배정된 Public IP 주소는 재부팅 되면 변경될 수 있습니다.
하지만 이경우는 CI/CD 에서 선호하는 방식은 아님
코드를 자주 수정해야 할때는 불편함을 겪음
=>git 설치
sudo apt-get update
sudo apt-get install git -y
-코드 클론
git clone 레포지토리url
-python과 pip 설치
sudo apt-get update python3
sudo apt-get install pip3
-패키지 설치: pip으로 설치하면 나중에 패키지가 설치되지 않았다고 나옴
sudo pip3 install -r requirements.txt
-실행
sudo python3 manage.py runserver 0.0.0.0:80
-실행 확인
다른 컴퓨터의 브라우저에서 http://elasticIP 입력
2.domain 연결
1)Route53
=>도메인을 발급하고 관리해주는 서비스
=>최근의 Web Service 는 IP 기반이 아니고 도메인 기반이며 https 서비스의 보안 문제 떄문에 https 를 사용하는데 https의 인증서는 IP를 가지고는 발급받을 수 없음
=>도메인은 Route 53 이외의 곳에서 발급받은 것도 사용 가능
Route 53에서는 발급 받을 수 있는 도메인이 한계가 있습니다
2)도메인과 EC2 애플리케이션 연결
=>Route 53 서비스에서 호스팅 영역을 클릭해서 도메인이 보이는지 확인
=>레코드 생성 클릭
-도메인을 생성
-값에 EC2의 IP를 설정
=>다른 컴퓨터의 브라우저에서 연결한 레코드의 도메인을 입력해서 확인
3.Elastic Load Balancer
1)ELB
=>AWS 가 제공하는 Load Balancer
=>Load Balancer 는 집중되는 트래픽을 여러 대나 네트워크에 분배하는 장비
한 대에 집중되는 부하를 분산시키기 때문에 부하 분산 장치라고도 합니다.
=>웹 서버의 경우는 nginx와 같은 소프트웨어를 이용해서 구현이 가능하고 public cloud 에서 제공하는 서비스를 이용해서 구현하는 것이 가능
2)ELB의 종류
=>ALB
-Application Load Balancer
-요청하는 명령어의 내용을 보고 판단을 하기 때문에 URL 디렉토리 단위로 분배하는 것이 가능
-암호화 가능
-정적 IP 설정 가능
-지원 프로토콜이 HTTP와 HTTPS
=>NLB
-Network Load Balancer
-정적 IP를 이용한 로드 밸런싱이 가능
-지원 프로토콜이 TCP와 TLS
3)Load Balancer 사용시 주의사항
=>시간 제한의 문제 발생
- 애플리케이션에서 특정 시간 내에 응답을 받지 못할 경우 504 Error를 발생 시킴
애플리케이션 서버나 데이터베이스 서버 확인
-60초라는 응답 시간 제한이 있으므로 대규모 애플리케이션에서는 시간 제한을 늘려줄 필요가 있음
이 경우 애플리케이션을 작은 규모로 분할해서 해결하기도 합니다
되도록이면 작은 규모로 분할해서 해결하는 것을 권장
4)EC2 인스턴스에 Load Balancer 연결
=>EC2 서비스에 instance 안에 load Balancer 찾기
=>들어가서 Load Balancer 클릭
-종류를 선택(ALB)
-대상 그룹 생성을 눌러서 IP나 인스턴스 선택
gateway는 서비스 규모가 커지면 사용해야함.
API server <=> Application server <=> Data Server
애플리케이션을 만들어서 배포하면 하나의 region 에서만 배포가 되지만
Mappings을 선택하면 여러개 의 region에서도 배포 가능 (최소 2개이상 클릭)
=>action은 밑에 create 해서 사용하면됨
=>생성이 완료되면 Load Balancer 의 Domain Name 을 이용해서 접속이 가능
-접속이 안되는 경우 대상 그룹에 대상이 등록이 안되서 접속이 안될 수 있으므로 대상을 확인
Client <-> Load Balancer <-> EC2 Application
4.HTTPS 인증서 적용
1) SSL /TLS
=> HTTP를 HTTPS 로 바꿔주는 인증서
2)HTTPS 적용
=>AWS Certificate Manager 서비스에 접속
=>인증서 요청 클릭
=>퍼블릭 인증서 요청
-도메인 이름을 설정하고 요청을 클릭
=>인증서가 만들어지면 인증서를 클릭하고 Route53 서비스 생성을 클릭
=>Elastic Load Balancer 에 인증서 등록
-로드 밸런서 상세 화면으로 이동해서 리스너 추가를 클릭
-프로토콜을 HTTPS 로 변경
-대상 그룹을 선택
-보안 리스너 설정에서 인증서를 클릭
5.Node Application을 EC2 에서 실행
1)EC2 에 nodejs 설치
2)Spring Boot Application을 EC2 에서 실행
-SpringBoot Application 생성
git clone https://github.com/itstudy001/itstuddyspringboot
-JDK 설치
=>Java 는 Spring Version과 연관되므로 Spring Version을 확인하고 설치
현재는 17버전 설치하면 거의 모든 Spring Version 지원
sudo apt-get update
sudo apt install openjdk-17-jre-headless
java -version:자바 실행 환경 확인
javac -version: 자바 개발 환경 확인
-SpringBootApplication 빌드 및 실행
-자바 프로그램은 빌드를 먼저 합니다
빌드를 할 떄는 만들어진 프로젝트가 뭔지 알아야 하는데 최근에는 거의 gradle 만 사용합니다.
- linux 나 mac에서 현재 디렉토리에 있는 명령어를 실행할 때는 앞에 ./를 붙여야 합니다.
- 파일 경로를 지정할 때는 붙이지 않아도 됩니다.
./gradlew clean build
- 명령을 수행하고 나면 build/libs 디렉토리에 jar 나 war 확장자를 갖는 파일이 생성되는데 이 파일이 실행 파일입니다.
=>자바 프로그램 실행
sudo java -jar [jar 파일 경로]
=>Spring Boot Application은 별다른 설정이 없으면 8080 포트로 서비스를 시작합니다.
=>서버 구동 후 확인
다른 컴퓨터에서 IP:8080 으로 테스트 가능
- 서버가 제대로 구동 중인데 404 에러가 발생하면 보안 그룹에서 8080 포트에 대한 접속을 허용하지 않기 때문일 수 있습니다.
- 보안 규칙의 인바운드 편집을 눌러서 8080 포트를 추가해주면 됩니다.
'Study > AWS' 카테고리의 다른 글
AWS(6)-S3에 파일 upload(Django, Spring Boot, react) (2) | 2024.04.17 |
---|---|
AWS(5) - DataBase (0) | 2024.04.16 |
AWS(3) (0) | 2024.04.13 |
AWS(2)-EC2 를 활용해 MySQL 접속 (0) | 2024.04.11 |
AWS (0) | 2024.04.09 |