NODE.JS EC2로 배포하기

이재영·2023년 5월 31일
1

Node.js

목록 보기
11/12
post-thumbnail

EC2란?

  • AWS 에서 제공하는 클라우드 컴퓨팅 서비스

1. 인스턴스 생성 및 연결


region : 가까운 지역인 서울로 설정.
인스턴스 시작 클릭

⬇️


이름 : 내가 원하는 이름 작성,
운영체제 : Ubuntu / 프리티어

⬇️


새 키 페어 생성 : RSA 와 .pem 선택

⬇️


ssh 는 기본으로 설정되어있고,
보안 그룹 규칙 추가 클릭 해서 보안 그룹 규칙 3개 추가
1. HTTP
2. HTTPS
3. MYSQL/Aurora
원본 : 0.0.0.0/0
작성 후 인스턴스 시작으로 인스턴스 생성.

⬇️

인스턴스가 생성되었고, 체크연결 버튼 클릭

⬇️

SSH 클라이언트 탭에서
예: 아래의 명령어 복사
아까 발급받은 pem 키를 프로젝트 폴더에 넣고 터미널에 복사한 명령어 실행
위사진 처럼 ⚠️ 포트 22에 관한 문구가 뜨면 위에서 했던 보안 그룹 규칙에서 ssh를 추가하면 된다.

⬇️

복사한 명령어를 실행하면 인스턴스 연결이 된다.

EC2 인스턴스 연결 탭에서 연결버튼을 눌러도 연결 가능.


2. MYSQL 설치 및 설정

1) MYSQL 설치 및 DB,USER 생성

sudo apt-get update
sudo apt-get install mysql-server
sudo mysql -u root -p

명령어 순서대로 입력 / Enter Password: 는 엔터하면 된다.

⬇️

mysql>로 접속이되면,

create database 이름 : 데이터베이스 생성
show databases : 생성되었는지 확인
create user '유저 이름'@'%' identified by '사용할 비밀번호' : 유저 생성
grant all on 데이터베이스이름.* to '유저이름'@'%' : 유저 권한 설정
show grants for '유저이름' : 권한 설정 확인
권한 확인하고 exitsudo service mysql restart
mysql -u admin -p로 접속되는지 확인후 exit

⬇️

2) 외부 접근 허용

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf 로 파일에 접근해

bind-address0.0.0.0 으로 바꾼다.
바꾼 후 , sudo service mysql restart

⬇️

3) mysql 커넥션 생성

Hostname : EC2 인스턴스 퍼블릭 IPv4 DNS 복사 후 입력
Username : 위에서 생성한 유저 이름 입력
Store in Vault 클릭 후, Test Connection 클릭하여 Success 확인 후 OK

⬇️

4) git 저장소 가져오기

git init
git remote and origin "원격저장소 주소" : 원격저장소 연결
git pull origin master
ls -a 로 파일들이 잘 들어왔는지 확인.

⬇️

5) node.js 설치

sudo apt-get update
sudo apt-get install -y build-essential
sudo apt-get install curl
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash --
sudo apt-get install -y nodejs
명령어 순서대로 입력, 중간에 나오는 창은 엔터
설치 후, node-v,npm-v로 버전확인
cd backend/로 package.json 파일이 있는곳으로 이동 후 npm i로 모듈 설치
vi .env로 env에 적혀있는 정보와 mysql 정보가 일치하는지 확인 후, npm start 했을 때, 연결 성공하고
mysql 워크벤치에 테이블이 생성되면 👍


3. 탄력적 IP 설정

  • 인스턴스를 중지하고 다시 시작하게되면 v4 주소가 바뀌기 때문에 mysql 연결이 끊어진다.
    이를 방지하기위해 탄력적 ip로 고정ip를 할당받는다.

1) 할당


EC2 - 탄력적IP 에서 탄력적 IP 주소 할당 클릭 후 다른 설정 없이 할당 클릭

⬇️

2) 연결


할당된 탄력적 ip를 클릭 후, 탄력적 IP 주소 연결 클릭

⬇️


인스턴스 선택 후 , 연결 클릭
연결을 하면

EC2 인스턴스의 탄력적 IP 주소가 할당된걸 확인할 수 있고,
mysql 워크벤치 커넥션의 Hostname 을 해당 IP로 바꿔줘야 한다.


4. Nginx 설정

  • 리버스 프록시로, 서버 앞에 위치하여 클라이언트가 서버에 요청을 하면 리버스 프록시가 호출되고 리버스 프록시는 서버에게 요청해서 응답을 받고 클라이언트에 전송한다.

  • 리버스 프록시를 사용하면
    -1. SSL/TLS 암호화 처리 가능
    -2. 공격자로 부터 서버 보안 강화
    -3. 로드밸런싱, 캐싱

    등이 있다.

1) 설치 및 파일 설정

sudo apt install nginx : nginx 설치
sudo service nginx start : nginx 시작
sudo service nginx status : nginx 상태 확인
sudo service nginx stop : nginx 종료

nginx를 설치하면 cd /etc/nginx/sites-enabled/ 경로에
웹사이트 호스팅을 할 때 설정에 대한 값인 default 파일이 생성이 되는데
설정을 해줘야한다.

해당 경로로 이동 후, sudo vi default 로 설정할 수 있다.


server_name : 내가 요청을 보낼 도메인
try files ~ : # 으로 주석처리
proxy_set_header HOST $host;,
proxy_pass http://127.0.0.1:8080; 추가 후 :wq! 로 저장 후 나오기.

설정파일을 수정했으니 sudo nginx -t로 문법에 오류가 있는지 체크.
원래 경로로 돌아와서 cd ~
nginx 재실행 sudo service nginx restart

2) Route 53 A 레코드 설정

Route 53에서 레코드 생성 클릭하여 위와 같이 작성하면

레코드가 추가된다.
npm start 로 서버를 열고, 설정한 도메인(api.jaeyeong.site)로 접속하면 요청이 간다.

⚠️ 레코드를 설정했다고 바로 설정되지않고, 어느 정도 시간이 지나야 설정이 된다. 나는 1시간 넘게 걸림😭

3) certbot 이용해 https 설정

  • 웹사이트와 사용자 간의 통신을 암호화하는 보안 프로토콜

설치 명령어
sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot/usr/bin/certbot
sudo certbot --nginx 를 입력하면, 이메일과 도메인을 입력하라고 함.
sudo service nginx restart : nginx 재시작
sudo certbot renew : 3개월 마다 인증서 재발급 해주는 명령어

4) pm2 설정

  • 백그라운드에서 서버를 동작하게 해준다. 인스턴스 창을 닫아도 동작한다.

npm i pm2 로 설치 후, backend package.json 파일의 start 부분을 pm2 start app.js로 변경

변경 후, npm start 하면

백그라운드에서 서버가 동작하는걸 확인할 수 있다.
npx pm2 kill : 서버 종료
npx pm2 list : 서버 리스트 확인

5. 요청은 어디로 ?

https://"A 레코드 설정한 도메인"

ex) https://api.jaeyeong.site

profile
한걸음씩

0개의 댓글