AWS EC2 인스턴스 생성 관련은 생략!!
대략, Ubuntu 20.xx 버전 만들어주면 된다.
$ sudo apt-get update
# Node.js version manager(nvm)
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.0/install.sh | bash
# nvm 활성화
. ~/.nvm/nvm.sh
# 현재 설치된 vnm 버전 확인
$ nvm -v
# 사용가능한 node 버전 확인
$ nvm list available
# 설치된 모든 node 버전 확인
$ nvm list
# 특정 node 버전 설치
$ nvm install 17.0.1
# 다른 node 버전으로 변경
$ nvm alias default [xx.xx.xx] // 해당 버전 입력
# 현재 설정된 node 버전 확인
$ node -v
# pm2 전역 설치
$ npm install -g pm2
$ sudo apt-get install nginx
$ sudo vi /etc/nginx/sites-available/<프로젝트 이름>
server {
listen 80;
server_name <IP주소>; // ex) api.walkdoni.com;
location / {
include proxy_params;
proxy_pass http://<IP주소>:3000;
}
}
$ sudo ln -s /etc/nginx/sites-available/<프로젝트 이름> /etc/nginx/sites-enabled
$ sudo nginx -t // nginx 설정 확인
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
(위와 같이 나와야 성공)
$ sudo systemctl restart nginx
$ sudo systemctl status nginx.service // nginx 상태 확인
$ sudo vi /var/log/nginx/access.log
$ sudo vi /var/log/nginx/error.log
$ sudo vi /etc/nginx/nginx.conf
* nginx 관련 고유 속성 값들을 컨트롤 하는 부분
관련 프로젝트 루트 디렉토리에 생성하면 된다.
$ sudo vi ecosystem.config.js
module.exports = {
apps: [
{
name: 'main', // pm2 name
script: 'dist/main.js', // // 앱 실행 스크립트
instances: 'max', // 클러스터 모드 사용 시 생성할 인스턴스 수
exec_mode: 'cluster', // fork, cluster 모드 중 선택
merge_logs: true, // 클러스터 모드 사용 시 각 클러스터에서 생성되는 로그를 한 파일로 합쳐준다.
autorestart: true, // 프로세스 실패 시 자동으로 재시작할지 선택
watch: false, // 파일이 변경되었을 때 재시작 할지 선택
// max_memory_restart: "512M", // 프로그램의 메모리 크기가 일정 크기 이상이 되면 재시작한다.
},
]
};
* 아래 sh 파일은 jenkins로 등록했음(나중에 아래 jenkins 관련 내용 참고)
$ sudo vi product.sh
#!/bin/bash
cd $(dirname $(realpath $0)) # current folder path
npm install
npm run build
pm2 reload all
$ npm install pm2 -g
$ pm2 start ecosystem.config.js // 아까 위에서 만든 설정 파일을 넣어준다.
* 그 외 유용한 명령어
$ pm2 -version // 현재 버전 확인
$ pm2 kill // 현재 실행 중인 pm2 프로세스를 전부 중단한다.
$ pm2 log // 기록된 로그 확인
$ pm2 monit // 현재 실행 중인 pm2 프로세스를 실시간으로 확인
젠킨스 배포 관련 부분은 아래 링크를 참고하기 바람
https://velog.io/@denver/AWS-Jenkins-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0-52qmek7j
# jenkins - Execute shell - Command
scp -r /home/ubuntu/jenkins/[프로젝트 폴더]/* ubuntu@[해당 IP 주소]:/home/ubuntu/[프로젝트 폴더]
ssh ubuntu@[해당 IP 주소] bash /home/ubuntu/[프로젝트 폴더]/[해당 sh 파일]
위와 같이 젠킨스 설정을 해주고 나면 배포까지 완료!!
전체 프로세스 과정은 다음과 같다.
Local GitHub Push > GitHub WebHook > Jenkins Server Clone
> Deploy Server Scp 파일 이동 > 해당 sh 파일 실행(install, build, reload)