티스토리 뷰

반응형

배포의 방식은 다양하다. 아래의 방식은 기초 배포 방식으로 보안에 취약하고 최적화 미들웨어를 추가하지 않았다. 여기서 사용할 PM2는 원격 서버에서 node 프로세스를 백그라운드로 실행시킨다. 따라서 putty 연결이 끊어지는 경우에도 배포가 중단되지 않는다. 따라서 추가 보안적용을 nodejs에 넣어주면 좋다. 만약 nodejs에 대한 다른 정보확인이 필요하다면, 아래의 url을 접속해서 확인하자.

 

[Web/nodejs] - nodejs 기초 총 정리

 

우분투 18.04 LTS 기준으로 만들어본다. 아래의 흐름을 따라가면 배포가 될 것이다.

 

 

 

 

AWS EC2 시작

 EC2에 접속하고 인스턴스 시작을 누른다. 그 후에 18.04 우분투(18.04 LTS 기준)로 설정을 진행한다.

 

보안 그룹 구성 (인바운드/아웃바인드 규칙)

 인스턴스 생성 후 "인바운드 규칙"을 누르고 "인바운드 규칙 편집" 버튼을 눌러서 수정한다. 외부에서 서버로 네트워크 접근할 때 허용할 포트를 설정하는 규칙으로 웹 서버 구축 시 필수적으로 필요하다. HTTP(80)과 HTTPS(443) 포트를 허용해야 한다. 기본적으로 HTTP 접근을 HTTPS로 redirect 시켜주기 위해서 HTTP를 사용한다.

 

포트 80과 포트 443은 자동할당되며, 소스는 0.0.0.0/0과 ::/0을 모두 할당된다. 0.0.0.0/0는 IPv4용이고, ::/0은 IPv6용이다.

 

포트를 열어줄 때 주의 할 점은 본인이 사용하는 포트도 열어줘야 한다. nodejs express에서 3000포트를 사용한다면 3000포트를 할당하고 0.0.0.0/0과 ::/0을 추가한다.

 

AWS EC2 ssh 연결

$ ssh -i ./받은pem파일.pem ubuntu@접.속.주.소
  • 여기서 pem 파일은 인스턴스 시작 시 받은 pem 파일이다. putty로 접속하는 경우에는 ppk로 변경해야하는 작업이 필요하다. 아래의 블로그를 참고하자.
  • https://mozi.tistory.com/191 
  • login 아이디는 ubuntu라고 하면 접속에 성공한다.

 

 

git 설치

> 보통은 EC2에 기본적으로 설치가 되어 있다.

// 설치 (위치는 dir(~))
$ sudo apt install git

// 설치 확인
$ git

 

 

nodejs, npm 설치

기본적으로 curl이 설치되어 있어야한다. curl 설치하자. 이 때 아래와 같이 build-essential 패키지를 설치해야한다. 설치 하지 않으면 C나 C++ 개발 컴파일 시 필요한 stdio.h 등의 기본 라이브러리가 설치가 안되어 에러가 발생할 수도 있다.

$ sudo apt-get update
$ sudo apt-get install -y build-essential
$ sudo apt-get install curl

 

주의 ) 우분투에서 바로 apt-get 명령어로 nodeJS를 설치하면 최신버전이 아닌 낮은 버전이 설치 된다.

curl을 활용하여 nodejs를 설치한다. 아래의 예는 node.js 10.x버전으로 버전 10을 설치한다. ( + npm 설치 )

$ curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
$ sudo apt-get install -y nodejs


// npm 설치
$ sudo apt install npm


// 설치 후 버전 확인
$ npm -v
$ node -v

 

nodejs 삭제

기존 Nodejs 삭제
$ sudo apt-get --purge remove node
$ sudo apt-get --purge remove nodejs
 

 

 

LTS 버전 설치
// LTS 버전 설치 명령어 
$ sudo curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -

// 설치 명령어
$ sudo apt-get install -y nodejs

 

 

git clone

 보통 나는 /client 폴더에 frontend 코드를 넣고 /server에 backend 코드를 넣는다.

$ git clone https://your/git/repository
$ cd [폴더명]
$ npm install

이때 .gitignore로 local에서 git으로 올리지 않는 .env 같은 파일이 있다면,  .env 도 새롭게 만들어야한다. 그 후에 npm start로 바로 서버를 실행 가능하다.

 

 

 

 

 

pm2 설치

 pm2를 통해 서버 상태를 관리한다면 pm2 설치하자. (pm2는 원격 서버에서 node 프로세스를 백그라운드로 실행시키기 위함이다.)  보통 서버를 끄거나 putty 연결이 끊어지면 npm run 해도 끊어지기 때문에 웹 배포가 중단된다. 이러한 문제를 해결하기 위해 Node Process Manager(PM2)를 사용한다. pm2는 모든 디렉토리에서도 사용가능해야 하기 때문에 -g를 붙여서 글로벌로 설치하자.

// 전역 패키지 설치 시 sudo를 넣어줘야한다.
$ sudo npm -g install pm2

 

 

 

서버 실행

// pm2 설치 후 서버 실행
// npm start 대신 pm2 start로 실행시킨다.
$ pm2 start index.js

 

 node.js 서버실행 시 development 모드와 production 모드로 2가지로 나눠서(개발용/배포용) 실행을 한다고 해보자. 그리고 mySQL 정보가 있는 config/config.json가 아래와 같이 있다면, 모드에 따라 다르게 실행을 해야한다.

 

{
  "development": {
    "username": "root",
    "password": "root",
    "database": "punch",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "test": {
    "username": "root",
    "password": null,
    "database": "database_test",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "production": {
    "username": "root",
    "password": null,
    "database": "database_production",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
}

 

 

모드에 따른 실행 명령어은 아래와 같다.

 

// 우분투
$ NODE_ENV=production npm start
$ NODE_ENV=development npm start
or
$ NODE_ENV=production npm start index.js
$ NODE_ENV=development npm start index.js

// 윈도우
$ set NODE_ENV=production&&npm start
$ set NODE_ENV=development&&npm start

 

실행 시 아래 에러 발생 시 해결책은 들어가서 확인을 하자

 [nodejs error] UnhandledPromiseRejectionWarning: SequelizeAccessDeniedError: Access denied for user 'root'@'localhost' (using password: NO)

 

 

만약 Ecosystem Error가 뜬다면 아래의 블로그를 보자

https://rat2.tistory.com/15

 

 

 

변경 발생 시

프로젝트가 git pull을 통해 변경 사항이 있다면, 아래의 명령어로 재시작한다.

 $ pm2 restart all

pm2를 중단하는 방법은 $ pm2 kill 을 하면 된다.

 

 

 

aws 실행확인

 EC2 인스턴스 관리 페이지에서 퍼블릭 DNS 주소 값을 찾고 주소창에 넣으면 된다. node.js 프로젝트라면 서버 실행 포트가 HTTP 포트인 80이 아닌 8080이나 3000이나 기타등등으로 되어있을 확률이 크다. bin/www나 index.js에 port 설정 부분을 참고해서 변경하면 된다.

 설정 배포 주소 접속하기3000포트로 배포를 했다면, 제공받은  IP 주소 뒤에 3000포트를 적어주면 된다.

 

 

위의 사진은 5000포트로 설정을 진행 한 것이다.

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함