코딩기록

항해 30일) vscode에서 git 연동, git commit, ec2배포하기, pm2 사용방법 본문

항해99/챕터3 주특기 Node.js

항해 30일) vscode에서 git 연동, git commit, ec2배포하기, pm2 사용방법

뽀짝코딩 2022. 2. 8. 23:47
728x90

깃 코드올리기

먼저 하기!! > Node.js기초반강의 4-5  (10:40-gitignore) 에 깃설치, 로컬, 레파지토리, 커밋등 기본개념 설명

 

노드 터미널에서 .gitignore 파일 먼저 만들기!!

node_modules 라는 파일은 변경사항으로 취급하지 않음  절대 배포하면 안되는 파일!!

 

 .gitignore 

node_modules

 

 

 

  1. 깃헙 repository 만들기
    1. new repository 클릭
    2.  create a new repository → repository name 적고 public 선택, initialize this repository with: 아래 체크박스는 아무것도 체크하지 않는다.
    3. 만들고 나면 레파지토리페이지로 자동으로 이동됨 Quick setup - ~~ 에서 HTTPS 선택 후 주소 복사
  2. vscode에서 터미널을 열고 git init 설치하기 > git remote add origin + 내 깃주소 입력 (아무것도 안나오면 성공!!)
  3. GitHub 레파지토리 올리기  /
  4. 내 vscode에서 깃헙에 올리기(local repository > remote repository)
    1.  
    2. vscode터미널에서 git push -u origin master 입력

이렇게 화면이 나오면 깃헙 홈피로 가서 내 레파지토리 새로고침을 한다.

 

 

커밋

  1. git commit -m "메시지 적기"

 

 

*변경사항 올리기

1. vscode 터미널에서 git status 검색시 빨간글씨가 나옴.

2. git add .  >  모든파일 스테이징에 올리기

   git add app.js    >  app.js파일만 올리기

3. 처음으로 commit할떄

    git commit -m "파일설명사항적기"     >내 깃헙 레파지토리에 들어가면 첫화면에 보임

 

 

커밋할게 없을떄 보이는 화면

 

   두번째 push할때    >  git push

 

 

 

브런치 생성하기

1.  깃헙주소 연결하기

git remote add origin 깃헙주소

2. 로컬에 브런치 만들기

git branch 이름

예) git branch suzy

3. 로컬 브런치 확인하기

git branch

4. branch로 작업 장소 이동하기

git checkout suzy

5. add하기

git add .

6. 커밋

git commit -m "제목적기"

7. 원격저장소(깃헙홈피)에 브런치 올리기 

git push -u origin  suzy

8. merge (깃헙홈피에서)

홈피에서 머지를 클릭 한다

9. pull 풀 (로컬 작업)

브랜치, main 둘다 pulll 해야 한다.

git pull origin main 

 

 

강제 pull 하기

1. git pull 받을 목록을 repository 에서 업데이트

git fetch --all

2. git reset 으로 head를 최신으로 가리킨다

git reset --hard origin/master

3. git pull 로 확인

git pull

이렇게 하면 그냥 최신버전 헤드를 가리킴으로써 덮어쓰기와 같은 효과가 된다.



출처: https://mosei.tistory.com/entry/GIT-git-pull-시-merge-오류가-날때-강제-git-pull-덮어쓰기-방법 [씹어먹는 블로그]

 

 

 

 

 

 

 


배포하기

[가장 많이 쓰는 리눅스 명령어]

더보기
ls: 내 위치의 모든 파일을 보여준다.

pwd: 내 위치(폴더의 경로)를 알려준다.

mkdir: 내 위치 아래에 폴더를 하나 만든다.

cd [갈 곳]: 나를 [갈 곳] 폴더로 이동시킨다.

cd .. : 나를 상위 폴더로 이동시킨다.

cp -r [복사할 것] [붙여넣기 할 것]: 복사 붙여넣기

rm -rf [지울 것]: 지우기

sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다.
sudo su: 관리자 권한이 있는 계정으로 접속한다. (exit 입력하면 관리자 계정에서 로그아웃)

 


 

 

AWS EC2에 접속하기

  • gitbash를 실행하고, 아래를 입력!예) 아래와 비슷한 생김새!
  •  
  • ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20 ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
  • Key fingerprint 관련 메시지가 나올 경우 Yes를 입력해주세요!
  • git bash를 종료할 때는 exit 명령어를 입력하여 ssh 접속을 먼저 끊어주세요.

 

 

 

Node.js 및 MongoDB 설치

Ubuntu 20.04에 MongoDB 5를 설치하는 방법 | 18.04

최신버전 v5.0.6 설치 -220318-금

https://computingforgeeks.com/how-to-install-mongodb-database-on-ubuntu/

 

ubuntu@ec2-15-165-158-25.ap-northeast-2.compute.amazonaws.com

 

 

1. EC2 Instance에 Node.js 설치하기

1). Git bash 접속 

2).  ssh -i /c/Users/Pack/Desktop/ppojjackcoding-keypair.pem ubuntu@3.34.183.244

3).  Node.js v16을 설치해주는 명령어

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

curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -

sudo apt-get install -y nodejs
npm install

 

4). 설치 확인

node -v

npm -v

 

 

2.  EC2 Instance에 MongoDB 설치하기

wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -

 

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list

 

sudo apt-get update

 

sudo apt-get install -y mongodb-org

 

 

mongoDB 공식자료

https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/

wget -qO - <https://www.mongodb.org/static/pgp/server-4.2.asc> | sudo apt-key add -

echo "deb [ arch=amd64,arm64 ] <https://repo.mongodb.org/apt/ubuntu> bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list

sudo apt-get update

sudo apt-get install -y mongodb-org
  • MongoDB 실행 명령어
    • 아래 명령어를 실행하고 아무 반응이 없다면 잘 된것!
    sudo service mongod start

3.  mongoDB 접속 계정 생성하기

방금 만든 mongoDB를 외부에 열어주기 전에, 접속에 필요한 아이디와 비밀번호를 세팅하기. 세팅 안 하면 누구나 열어볼 수 있음.

mongo

차례대로 다 하면 됨

# admin(최고 관리자)설정하기
use admin;

# 계정 생성하기
db.createUser({user: "test", pwd:"test", roles:["root"]});
# 원하는 서버이름 적기
use hello;

# 계정 생성하기
db.createUser({user: "test", pwd:"test", roles:["dbOwner"]});

 

계정 생성 확인해보기 (정상적으로 들어갔는지)

# 위에 생성하고 바로 하는 거면, 바로 db.getUser()하면 됨
# 생성된 계정이 권한 확인이 가능한 상태인지 확인 (정상적으로 처리되면 1 리턴됨)
db.auth("아이디", "비밀번호")

# 계정 권한 확인
db.getUsers();

 

계정 생성 완료 되었으면 나가기

# 나오기
exit

# MongoDB 재시작
sudo service mongod restart

4. mongoDB 외부에 열어주기 (권한 설정)

sudo vi /etc/mongod.conf

# sudo: 관리자(SuperUser) 권한으로 다음을 실행
# => "관리자 권한으로 /etc 폴더 아래 mongod.conf 파일을 Vim으로 켜줘!"라는 뜻

입력하려면 i 누르고 키보드 방향키로 이동하면서 수정한다.

다음과 같은 내용을

아래와 같이 바꿔준다.

❗️0.0.0.0 확인, # 뺐는지 확인, 스펠링 확인!!! 오류의 주범!!!!

# 내용 저장하고 에디터 종료하기. esc 누르고 다음 입력.
:wq

# 재시작
sudo service mongod restart

5.robo3T 켜기

- 노트북 두개 모양 클릭하기

- create 누르기

connection 정보 다음과 같이 작성

 

상단 Authentication 탭을 클릭합니다.

  1. Perform authentication 체크박스를 클릭
  2. 생성한 계정의 아이디와 비밀번호를 입력하고 좌측 하단 Test 눌러서 초록불 뜨나 확인
  3. 'save'를 클릭

 

 

 

 

 

 

 

 

 

 

 

 

 

EC2 Instance에서 git 클론만들기

 

내 아이피로 들어간다

 

 

 

 

 

 

pwd 확인

git clone 내깃 http주소붙여넣기

(내 깃헙홈피에서HTTPS 주소 복사)

 

ls -al  로 확인하면 

 

 

 

 

nodejs_spa_mall 이 들어간게 보인다.

이렇게 내가 진행중인 프로젝트로 들어가서 명령어를 입력해 서버를 돌린다.

명령어 예)  node app.js

 

 

 

  • 프로젝트 실행
    1. cd nodejs_spa_mall
    2. node app.js

 


pm2

 

 

pm2 설치 - 서버 꺼지지 않게 하는 pm2    //과제 배포시 먼저 설정하기

sudo -s
npm install -g pm2

pm2 최신 버전 설치

npm install -g pm2@latest

 

 

  • //pm2로 app.js 실행
  • pm2 start app.js

 

pm2(process manager) 를 통해 서버를 돌릴 시,

로직상 문제가 생겨 예외가 발생하면 자동으로 애플리케이션을 재시작해준다

즉, 톰캣처럼 서버가 계속 중단되지 않고 실행시켜주는 모듈이다

 

설치 방법 : npm install pm2 -g

               (-g 는 글로벌 전역의 약자로, 내 컴퓨터 전체에서 사용가능하게 한다는 뜻)

 

실행 방법 : pm2 start main.js   가 안되면   sudo pm2 start server.js

               pm2 start main.js --watch 

               (main.js 파일이 수정될때마다 수정된 것을 반영하여 pm2가 재실행시킴)

              

 

               

pm2 명령어 :  

               pm2 list 

               (pm2를 이용하여 실행한 프로세스 목록 확인)

               pm2 log

               (로그를 확인하여 에러난 부분을 확인)

               pm2 stop id/name

               (id 또는 name에 해당하는 실행중인 프로세스 정지)

               pm2 restart id/name 

               (id 또는 name에 해당되는 프로세스 재시작)

               pm2 delete id/name 

               (id 또는 name에 해당하는 프로세스 삭제, 파일은 삭제x)

               pm2 kill 

               (pm2에서 관리중인 모든 프로세스 delete, 셧다운)

               pm2 monit 

               (pm2 프로세스 실시간 모니터링 도구, 다른이가 pm2로 서버를 돌렸을때 모니터 할 수 있다.)

 

 

pm2 명령어 사용 예시)

1. pm2로 server.js 켜기

pm2 start server.js  로 pm2를 켠다 안먹히면  sudo pm2 start server.js 

2. pm2로 id나 name 멈추기

pm2 stop app

3. pm2로 id나 name 삭제하기

pm2 delete app

4.  sudo를 연속적으로 쓰기

sudo -s

쓰기전에는 ubuntu@ 

쓰고 난후에는 root@ 로 변경된걸 볼 수 있다.

5.  monit / pm2 모니터링

sudo pm2 monit

 

 

 

주의!! pm2로 서버 돌릴때 주의사항!!

하지만 오류가 났을때 pm2로 서버를 돌리는 것과 node app.js로 노드를 돌리는 것은 다른 개념이라서

pm2 start app.js 돌리고 프론트와 작업했을때 오류가 나면 인터넷 창이 안열리지만 pm2 list 를 확인하면 

위처럼 status가 online으로 뜬다.  이럴때

1. pm2 stop server.js  로  pm2서버를 멈춘다. 안먹히면 sudo pm2 stop server.js

2. pm2 restart server.js   재시작한다.

pm2는 git Bash를 꺼도 서버가 돌아간다는 장점은 있지만 오류가 났을 때 구체적인 오류 메시지를 볼수 없다는 단점도 있다.  node server.js로 돌렸을때 오류핸들링을 모두 하고 나면 서버가 꺼지는 일은 없다. 

 

** node server.js 서버 돌릴때 오류 메시지 예시 **

 

ec2서버 여럿이서 같이 관리 하기

 

서버를 배포하지 않은 다른이가 ec2에 접근하여 git pull을 하면  .git에 접근 권한이 없다는 error가 발생한다.

 

에러 메시지 내용

error: cannot open .git/FETCH_HEAD: Permission denied

해결 방법은 서버에서 git 접근하려는 위치에서 아래 명령어를 입력한다.

sudo chown -R $USER .git/

 

해당 ec2에 접속한 사람이 git 접근 권한을 가지게 되어 git pull과 같은 작업을 할 수 있게 된다.

 

 


 

 

 

 

EC2 Instance 포트 설정: iptables  (80 -> 3000 aws에서 ec2생성하고 바로하기)

AWS -> ec2 

 

iptables란?

  • 리눅스로 들어오는 모든 요청은 iptables에 의해 정의된 규칙을 따라 처리되며, 우리는 이것을 이용해 외부에서 80 포트로 들어오는 요청을 리눅스 내부에서 사용되는 3000 포트로 전달하도록 규칙을 설정할거예요!
  • AWS가 아닌 리눅스 운영체제 내부에서의 방화벽 역할을 하는 프로그램입니다.

왜 80 포트인가요?

  1. ex) [<http://www.google.com>](<http://www.google.com>) 으로 접속하는 경우 http://www.google.com:80 으로 접속하는것과 동일합니다.
  2. ex) [<http://www.naver.com>](<http://www.naver.com>) 로 접속하는 경우 http://www.naver.com:80 으로 접속하는것과 동일합니다.

이것은 http 프로토콜을 사용하는 경우 기본 포트를 80으로 사용하는것이 약속으로 정해져 있기 때문입니다.

  •  💡 참고로 https 의 기본 포트는 443이예요!
    • 우리가 브라우저로 접속하는 경우 기본적으로 80 포트를 사용하도록 되어 있습니다.
    •  
    •  iptables 규칙 변경 명령어 (80 → 3000 전달 규칙)
    • 포트번호 변경 명령어(Git bash)
    • sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
    • sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000

접속 확인

node app.js 입력

  • iptables 규칙 변경 명령어를 실행하고 나면 아래와 같이 접속되는것을 확인할 수 있습니다!

 

 

 

 Node.js git 원격 저장소 확인방법 

git remote -v

 

 

 

 

 

 

 

참고

*ec2셋팅정리

https://ppojjakcoding.tistory.com/117

*pm2 모니터링

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=pxkey&logNo=221275998457

*깃배쉬-ec2에서 몽고디비설정하기 

[Server] Node.js에서 Ec2서버와 Mongodb 연결하기 (tistory.com)

반응형
Comments