최근에 Co-Code라는 코딩 교육 플랫폼 프로젝트를 시작하면서 백엔드를 맡게 되었습니다!!
가장 먼저 하게된건 서버 배포하기...
바로 시작하겠습니다
가장 먼저 EC2부터 생성해보았다!
(제 블로그 AWS에 인스턴스 생성 실습이 있으니 참고하시면 될 것 같습니다)
=> Ubuntu를 사용했음!! (+ 프리티어)
키페어도 만들어서 잘 보관해주고!!
ssh -i "pem 파일 이름" ubuntu@ec2-"퍼블릭 ip 주소".ap-northeast-2.compute.amazonaws.com
이제 작업중인 환경에서 (저는 vscode를 사용하기 때문에 vscode 터미널을 이용했음) pem 파일 위치로 이동 후
위의 명령어를 입력하여 EC2 서버로 접속한다
그런데
Permissions for 'key.pem' are too open
에러가 발생....😫
(관련 내용은 제 블로그 게시물에 올려놨습니다!!)
이렇게 해결을 하고 난 후 EC2 서버에 접속 완료
sudo apt update
sudo apt install nodejs
sudo apt install npm
위와 같은 명령어로 EC2 서버에 npm과 node.js 를 설치합니다
(git은 이미 깔려있음)
node.js와 npm 설치가 완료 되었으면 원하는 디렉토리에 올리고 싶은 Node.js 서버가 있는 git에서 clone을 해준다
git clone이 다 되었으면 서버 폴더로 이동해서 npm install 명령어를 실행하여 필요한 의존성들을 설치해준다
(저는 node가 최신버전으로 깔리지 않아 다른 명령어로 업그레이드 시켰는데 추후에 따로 다뤄보겠습니다!)
DB도 설정해줘야 하는데 저는 MongoDB를 사용하였습니다
// 몽고디비 설치
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
// list 파일 생성
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
// 패키지 관리자 업데이트
sudo apt update
sudo apt upgrade
// 데몬 설치
sudo apt-get install -y mongodb-org
위의 코드로 MongoDB를 다운로드 하고
sudo systemctl start mongod
또는
sudo service mongod start
위의 코드로 DB를 실행하면 되는데 이상이 없으면 DB가 잘 실행된 것!
mongosh
use admin
db.createUser({user: "아이디", pwd: "비밀번호", roles:["root"]});
exit
sudo service mongod restart // 재시작
이제 위의 명령어로 EC2 MongoDB 접속을 위한 계정을 생성한다
=> 현재 MongoDB를 설치한 곳은 로컬 컴퓨터가 아니라 AWS EC2 인스턴스에 설치한 것이므로 EC2 인스턴스에 있는 MongoDB에 접속하기 위해서는 접속 허용 IP를 변경해줘야한다
$ sudo vi /etc/mongod.conf
위 명령어로 MongoDB 설정 파일을 열고
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
# engine:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1 // 여기를 0.0.0.0으로 변경!
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
security: // 이 문장 추가!!
authorization: enabled // 이 문장 추가!!
...
i를 눌러서 입력 모드로 변환 후 수정하고 esc를 눌러 명령 모드로 다시 돌아와 :wq로 저장 후 종료한다.
sudo service mongod restart
MongoDB를 재실행 해준다!
위에 있는 index.js 코드를 보면 알 수 있듯이 git에는 올리지 않는 .env 파일로
서버 포트와 DB 접속 주소등을 저장해놨기 때문에
(dotenv 사용했음)
vi를 사용하여 .env 파일을 복사해서 직접 만들어줬습니다!
위의 과정을 모두 수행한 후, node index.js 명령어로 서버를 실행시켜 EC2 퍼블릭 IP 주소 :포트번호 로 접속하면 되는데
아마 이런 결과를 볼 수 있을 것이다
=> EC2 인바운드 규칙을 수정해서 인스턴스에서 어떤 포트를 개방할지 정의해줘야 접근이 가능함!
이런식으로 생성한 EC2 인스턴스의 보안 그룹에서 인바운드 규칙을 설정해줘야하는데
node.js 기본 포트번호인 3000을 사용했기 때문에 EC2에서 3000번 포트를 0.0.0.0/0 (누구든 접근 가능) 하게 설정했음!
MongoDB도 기본 포트번호인 27017를 사용했기 때문에 0.0.0.0/0 으로 포트를 허용해놨음!
그럼 이제 끝!!!
이 아니라 사용중인 터미널에서 인스턴스를 나와서 다른 작업을 하려면 어쩔 수 없이 서버를 꺼야하는데
(계속 터미널을 실행하고 있을 수 는 없으니..)
=> pm2를 사용하여 해결할 수 있다!
pm2는 공식 문서에 의하면 n ode.js 애플리케이션을 위한 고급 프로덕션 프로세스 매니저라고 설명되어 있는데
여러 기능중 하나가 프로그램이 꺼지면 자동으로 다시 켜주는것!
pm2로 서버를 start한 경우 pm2로 직접 끄지 않으면 알아서 재시작을 해주는..
(결론은 계속 켜져있게 해주는거임)
npm install -g pm2 명령어를 사용하여 pm2를 다운로드 하고
pm2 start index.js 명령어를 적어주면 pm2로 서버를 시작할 수 있음
이제 실행 후 status가 online이면 ubuntu 터미널을 닫아도 서버가 계속 실행됨!
(pm2 list 명령어로 위와 같이 pm2 상태를 확인할 수 있음)
=> pm2 명령어 검색해서 한 번 공부해보는걸 추천!
(나 포함..😭)
배포 후 관리
이렇게 배포를 마무리 했으면 계속해서 코드를 수정하면서 서버에 적용해야 하는데...
ssh -i "pem 파일 이름" ubuntu@ec2-"퍼블릭 ip 주소".ap-northeast-2.compute.amazonaws.com
인스턴스 접속은 이전에 다뤘던 명령어와 동일하게 진행하고
$ git pull
git pull을 통해 clone했던 github의 코드 내용으로 서버를 최신화해준다
$ sudo service mongod restart
mongodb 재실행
$ pm2 start 0(실행중인 pm2의 id)
pm2로 서버를 재시작
위의 사이클로 계속해서 로직을 수정하면서 적용하면 된다!
DB작업의 경우 MongoDBCompass에 DB 경로를 입력하여 접속한 후 함께 확인하면서 진행하고 있다!
'Backend > Node' 카테고리의 다른 글
[Node.js] Nodemailer를 사용하여 회원가입시 이메일 인증 구현하기 (0) | 2024.05.07 |
---|---|
CORS란 무엇일까? (1) | 2024.02.04 |
JWT 토큰 (1) | 2024.01.31 |
TypeORM 이란? (1) | 2024.01.28 |