NodeJS - EC2 접속(.ssh/config) / 배포(scp, pm2)

김정욱·2020년 12월 11일
2

NodeJS

목록 보기
15/22
post-thumbnail
post-custom-banner

EC2 접속

보통 ssh를 사용하는 EC2에 접속 방법은 2가지가 있다
(ssh config방법 매우 강추)


1) sudo ssh –i ‘{myPemKeyName}.pem’ ubuntu@{EIP}

    1. pem키가 있는 곳으로 이동
    cd ~/Desktop (바탕화면에 있다면!)
    2. ssh -i 로 지정하여 접속
    ssh -i "only-posting.pem" ubuntu@ec2-54-180-204-86.ap-northeast-2.compute.amazonaws.com


2) ssh config설정으로 간편하게 접속 (추천!)

1. pem키를 ~/.ssh로 이동


2. pem키를 사용하기 위해 권한 변경
   chmod 400 only-posting.pem


3. ~/.ssh/config 생성 (vi 혹은 gedit)

Host posting
    Hostname 54.180.204.86 
    User ubuntu
    IdentityFile ~/.ssh/only-posting.pem
  • Host 는 자신이 ssh {원하는 이름}으로 입력할 이름을 의미
  • Hostname주소는 본인의 EC2 클릭 후 퍼블릭 IPv4주소 확인

4. ssh posting 으로 접속

EC2 배포 절차

: 해당 프로젝트가 github의 repository에 올라가 있다는 가정에서 시작

1) EC2 접속
2) node / npm / pm2 설치
3) origin repository git clone
4) /config 옮기기 (scp명령어)
5) npm install로 모듈 설치
6) pm2로 시작
7) pm2 list로 확인 / pm2 log로 오류 찾기

pm2

[ pm2 ]

: Process Manager의 약자로 프로세스를 실행하고 관리하기 위한 것

  • 문제 발생하여 Server가 다운되었을 때 --> 자동 재시작
  • Node.js는 싱글 스레드 기반이지만, 멀티 코어를 사용하고 싶다 --> 클러스터 모드로 실행
  • 그 외 전반적인 관리에 매우 용이!

[ pm2 사용법 ]

  • pm2 start ./bin/www --name [원하는 이름] : 프로젝트 시작
     (-i 0 옵션 주면 클러스터 모드로 실행하며 / cpu개수에 맞춰 실행하게 함)
  • pm2 list : 현재 실행중인 list 확인
  • pm2 restart [name || id] : 프로세스 재시작
  • pm2 stop [name || id] : 프로세스 중지
  • pm2 delete [name || id] : 프로세스 삭제
  • pm2 log [name || service number] : 로그 확인
  • pm2 startup : 문제 발생시 재시작

scp

[ scp ]

: ssh원격 접속 프로토콜을 기반으로 한 SecureCopy의 약어로
  원격지에 있는 파일과 디렉터리를 전송하기 위한 파일 전송 프로토콜


[ 로컬 -> 원격지 ]

구문 : scp [옵션] [보낼 파일명] [원격지id]@[원격지ip]:[받는위치]

  • 파일 전송
sudo scp -i "only-posting" /User/jungwook/Desktop/Master/temp.txt ubuntu@ec2-54-180-204-86.ap-northeast-2.compute.amazonaws.com:/home/ubuntu

: Master/temp.txt 파일을 원격지 /home/ubuntu로 이동
  ( EC2 원격지에 보내기 위해 pem키를 -i 옵셥으로 지정 )


  • 디렉터리 전송
sudo scp -i "only-posting" -r /User/jungwook/Desktop/Master ubuntu@ec2-54-180-204-86.ap-northeast-2.compute.amazonaws.com:/home/ubuntu

: Master라는 디렉토리/home/ubuntu로 이동
  ( 디렉토리 하위 내용까지 포함하기 위해 -r옵션 사용 )


[ 원격지 -> 로컬 ]

구문 : scp [옵션] [원격지id]@[원격지ip]:[보낼 파일명] [받는 로컬 위치]

  • 파일 전송
sudo scp -i "only-posting" ubuntu@ec2-54-180-204-86.ap-northeast-2.compute.amazonaws.com:/home/ubuntu/rds.png ~/Desktop

  • 복수의 파일 전송
sudo scp -i "only-posting" ubuntu@ec2-54-180-204-86.ap-northeast-2.compute.amazonaws.com:"/home/ubuntu/rds.png /home/ubuntu/ec2.png" ~/Desktop

: 원격지 ubuntu밑에 있는 rds.png와 ec2.png로컬의 Desktop으로 이동
  ( 복수의 파일의 경로를 "" 큰따옴표로 묶어야 한다 )

EC2에 배포하기(with Github)

1) EC2 접속

  • ssh config 설정 했다면 ssh [HostName]
  • 안했다면, sudo ssh –i ‘{myPemKeyName}.pem’ ubuntu@{EIP}

2) node / npm / pm2 설치

  1. sudo apt-get update : apt-get을 최신화!
  2. sudo apt-get install nodejs : node 설치
  3. sudo apt-get install npm : npm 설치 !
  4. sudo npm install pm2 -g : 글로벌 옵션으로 pm2 설치

3) origin repository git clone

git clone [git repository 주소]


4) /config 옮기기 (scp명령어)

sudo scp -i "only-posting" -r ~/Desktop/config ubuntu@ec2-54-180-204-86.ap-northeast-2.compute.amazonaws.com:/home/ubuntu/project

: 이런 방식으로 config 디렉토리원격지에 clone받은 내 프로젝트에 넣어준다

(주의할 것은 ! 가끔 scp로 옮길 때 대/소문자가 바뀌는 경우가 있어서 프로젝트 시작 시
오류가 뜬 경우가 있었다 (경험) 삽질하지 말고 대/소문자 확인해보세요 제발!)


5) npm install로 모듈 설치

npm install : package.json 안에 dependencies에 있는 모든 모듈을 자동 설치!
  (만약 프로젝트 시작 시 Module Not Found이면 수동으로 하나씩 설치 해줘야 함!)


6) pm2로 시작

pm2 start ./bin/www --name [원하는 이름] -i 0
: 위 명령을 클러스터 모드로 실행한 것


7) pm2 list로 확인 / pm2 log로 오류 찾기

pm2 list : 정상적으로 실행되었는지 확인
pm2 log : error이라면 로그로 오류 확인하여 수정!

profile
Developer & PhotoGrapher
post-custom-banner

0개의 댓글