본문 바로가기
Azure | AWS

AWS EC2 / ELB / Nginx 를 활용한 배포 방법 정리, https 적용 - 백엔드 편

by 자유코딩 2020. 5. 14.

EC2 인스턴스를 사용한다.

ec2 인스턴스를 만든다

인스턴스 시작을 클릭하면 된다.

18.04 버전을 선택한다.

 

다음: 인스턴스 세부 정보 구성을 클릭한다

 

스토리지 추가를 클릭한다

인스턴스 용량을 정할 수 있는 부분이다. 적당히 정한다.

다음: 태그 추가를 클릭한다.

태그에 Name 을 하나 지정했다.

Name 이라고 적어두면 나중에 식별할 때 편하다

 

다음: 보안그룹 구성을 클릭한다.

 

ssh를 내 아이피로 지정한다.

이걸 전체 공개하면 누구나 접속해서 파일을 업로드하고 지울수도 있다.

http, https 도 열어둔다.

검토 시작을 클릭한다.

 

시작하기를 클릭한다.

기존 키페어를 쓰거나 새 키페어를 생성하고 [인스턴스 시작]을 클릭한다.

 

이제 탄력적 IP를 발급 받습니다.

인스턴스에 고정 ip 를 발급받는 과정입니다.

탄력적 IP를 클릭한다.

 

탄력적 ip 주소 할당을 클릭한다.

할당 클릭

 

 

태그를 클릭하고 태그 관리를 클릭한다.

 

 

태그를 적는다.

 

저장한다.

 

이제 인스턴스를 할당한다.

Actions 를 클릭하고 인스턴스를 지정하면 된다.

 

인스턴스 목록에서 고른다.

 

아래 그림처럼 작성하고

 

연결을 클릭한다.

 

 

자 이제 ssh 를 사용해서 접속해보겠습니다.

sudo ssh -i <pem 키 파일 위치> ubuntu@<주소>

접속을 했다면 nginx 를 설치해보겠습니다.

 

nginx 는 나중에 서버에 접속했을때 앱을 보여주기 위해서 설치합니다. 또한 최근 서버 개발자 중에서 Nginx 를 사용할줄 아는 개발자는 굉장히 많습니다.

 

접속했다면 아래와 같이 표시됩니다.

nginx 는 아래 명령어로 설치합니다.

 

sudo apt-get install nginx

이제 ip 주소로 접속하면 nginx 가 표시됩니다.

 

이제 nginx 가 스프링의 포트 8080으로 리다이렉트 시켜주도록 설정한다.

 

nginx 설정 파일을 바꿔주면 된다.

https://eladnava.com/binding-nodejs-port-80-using-nginx/

 

Binding a Node.js App to Port 80 with Nginx

You've finished building your first Node.js web app, and boy, is it awesome. Everything works great on your development machine, but when you try to deploy t...

eladnava.com

 

 

수정하는 방법은 위의 링크에 있는 명령어 3줄을 차례대로 입력하면 된다.

1. sudo su

2. sudo rm /etc/nginx/sites-enabled/default

3.sudo nano /etc/nginx/sites-available/node

4. 아래 내용 입력

80번 포트에 대해서 listen 이라고 적혀있다.

8080 포트로 요청을 보내주면 된다.

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_set_header   X-Forwarded-For $remote_addr;
        proxy_set_header   Host $http_host;
        proxy_pass         "http://127.0.0.1:1337";
    }
}

저장 하려면 이렇게 편집을 마친 상태에서 Ctrl + O 를 눌러줍니다.

그리고 엔터를 누릅니다.

여기서 Ctrl + X 를 누릅니다.

작성이 완료됩니다.

 

5. nginx 를 재시작한다.

sudo service nginx restart

 

sudo su 명령어를 안쓰면 아래와 같은 상황이 생길 수 있다.

괜히 암호 찾는다고 시간 쓰지 말자.

 

sudo su 명령어를 치고 진행해야한다.

그리고 service nginx restart 를 하면 된다.

 

이제 접속하면 8080 포트로 우회 했기 때문에 스프링 부트 앱이 보인다.

자 이제 https 를 입히면 된다.

로드밸런서를 사용하면 쉽게 할 수 있다.

로드밸런서 생성 클릭

application loadbalancer 를 선택한다.

 

https, http 를 열고 가용 영역을 선택한다.

2개 이상 골라줘야 한다.

2a , 2c 고르면 무난하다.

 

골랐으면 보안 설정 구성을 클릭한다.

인증서를 고른다.

보안그룹 구성을 클릭한다.

 

 

이전에 ec2 에 지정한 보안 그룹을 고르고 다음을 클릭한다.

라우팅 구성을 클릭한다.

새 대상 그룹을 만들면 인스턴스를 선택하는 화면이 나타난다.

지금 진행 중인 ec2 인스턴스를 선택한다.

이름을 적고 대상 등록을 클릭한다.

다음 검토를 클릭한다.

생성 한다.

생성을 완료 했다면 이제 route 53으로 간다.

url 로 접속했을때 로드밸런서로 가도록 지정해준다.

 

레코드 세트를 만듭니다.

ㅁㅁㅁ.<도메인 주소> 를 적었을때 로드밸런서가 응답하도록 지정해줍니다.

 

여기까지 했다면 nginx 사이트에 https 로 접속이 될 것입니다.

 

이제 스프링 부트 애플리케이션을 서버에 업로드 할 차례입니다.

 

지금까지의 내용과 하는 방식을 정리하면 이렇습니다.

 

 

여기서 80번 포트로 접속했을때 스프링 부트 애플리케이션으로 가도록 해주면 됩니다.

 

gradle assemble 로 jar 파일을 빌드합니다.

빌드가 되었다면 jar 파일이 생깁니다.

 

그리고 ec2 인스턴스에 scp 명령어를 사용해서 옮기고 실행합니다.

sudo   scp   -i   pem키   복사할파일   ubuntu@서버주소:/경로/경로

복사했다면 실행하면 된다.

그런데 아직 자바가 설치되어 있지 않다.

 

자바를 설치한다. 안된다면 sudo apt-get update 하고 난 후에 설치한다.

 

sudo apt install openjdk-11-jre-headless

java -jar aaa.jar

이때 실행이 안된다면 지금 개발한 RDB 서비스에서 ec2 의 주소를 허가 했는지 확인하자.

ec2 인스턴스의 보안 그룹을 선택하고 규칙을 저장한다.

 

 

실행한 프로세스는 아래 글을 참고해서 끄고 나오면 된다.

https://fors.tistory.com/417

 

AWS putty 에서 실행 중인 프로세스 유지하고 putty 종료하기

1. ctrl + z 를 눌러서 실행되는 프로세스 중단 2. bg 입력해서 프로세스 백그라운드에서 실행 3. disown 입력해서 소유권을 shell session 에서 해제 4. ssh 로그 아웃 풀어서 자세히 설명 1. 서버를 켠다. 2.

fors.tistory.com

명령어 순서

ctrl z

bg

disown

exit

 

이제 도메인 주소로 접속해보겠습니다.

https 로 서비스가 배포되었습니다.

 

- 추가사항

Mysql 을 쓰는 경우 한글이 insert 되지 않는다면 아래 사항을 변경해주세요

Mysql 은 5.xx 버전을 사용하시면 RDS에서 추가로 utf8 설정을 해야합니다.

8.xx 버전을 선택하면 아래 명령어 2줄로 utf8 설정을 마칠 수 있습니다.

 

ALTER TABLE (테이블명) convert to charset utf8;

또는

ALTER DATABASE (데이터베이스 이름) DEFAULT CHARACTER SET utf8;

 

- 추가 사항

우분투 ec2에 깃 설치하기

sudo apt-get install git

우분투에 노드js 설치하기

github.com/nodesource/distributions/blob/master/README.md

curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs

ssh 키 생성하기

ssh-keygen

 

pm2 - typescript 설치하기

sudo su

npm install -g pm2

 

## Add the new typescript dependency in PM2:
pm2 install typescript

## Start app.ts in watch & restart:
pm2 start app.ts --watch

-------

배포 원리 

Route53에 있는 도메인 주소 -> ELB로 이동 -> ELB (80포트)로 이동 -> ELB(443포트)로 이동 -> EC2(80포트)로 이동 -> Nginx가 ec2 80을 -> ec2 3000으로 이동시킴 (스프링이면 8080)

 

이 상태에서 3000(또는8080)에 nodejs, 스프링 서버 띄우기

 

 

댓글