이 블로그 글은 React / Express Server 배포 방법입니다.
배포 서버를 관리하다 보면 늘 걱정되는 것이 있다.
바로 CI / CD 적인 측면이다.
이때, 간단하게 적용할 수 있는 방법이 있다.
바로 Linux의 Crontab을 이용한 방법이다.
먼저, 이 글은 PM2의 설치와 Nginx 설치가 되어있어야 한다.
// pm2 설치
npm install pm2 -g
// nginx 설치
sudo apt update
sudo apt install nginx
설치가 되었다면 쉘 스크립트 파일을 생성한 뒤
touch deploy.sh
다음 코드를 작성한다.
cd /home/deploy
echo 패치를 받아옵니다.
git fetch origin master
HEAD=$(git rev-parse HEAD)
ORIGIN=$(git rev-parse origin/master)
if [ $HEAD != $ORIGIN ]; then
echo 커밋이 다르므로 서버를 재시작합니다.
git pull origin master
sudo systemctl stop nginx
# back-end 재시작
cd /home/deploy/backend
sudo npm install
sudo npm run build
sudo pm2 restart main
# front-end 재시작
cd /home/deploy/frontend
sudo npm install
sudo npm run build
sudo systemctl start nginx
echo 배포 완료^^
fi
여기서 git rev-parse
는 리비전을 조회하는 명령어이다.
결국 HEAD
와 origin/master
에 있는 리비전을 받아와 비교하여 서버의 상태가 GitHub와 같은지 확인하는 것이다.
이후 로그 파일을 생성해주고 권한을 변경해준다.
touch /home/deploy.log
chmod 777 /home/deploy.log
chmod 777 /home/deploy.sh
크론 탭 설정은 다음과 같이 바꾼다.
* * * * * /home/deploy.sh >> deploy.log 2>&1
2>&1
는 표준에러 출력을 앞의 log 파일로 리다이렉트해서 관리하기 위해 작성한 것이다.
이 방법은 가볍게 배포를 하기 위해 좋다고 생각한다.
하지만, 개인적으로는 Travis-CI나 Jenkins와 같은 툴을 붙여 사용하는 노력도 필요할 것 같다. 규모가 큰 서비스라면 CI(Continuous Integraion) 관점에서 좋은 코드를 유지하고 그 코드를 CD(Continuous Delivery / Continuous Deployment)할 수 있는 방법을 항상 고려해야한다. 위의 스크립트는 리비전만 확인하고 GitHub에 올라와있는 코드의 신뢰성은 보장하지 못한다. 따라서 가볍게 적용할만한 프로젝트(토이 / 사이드 프로젝트)에만 적용하는 것이 좋을 것 같다.
React를 Nginx 웹 서버에 배포하기
[Node.JS] 프로세스 관리도구 PM2 사용법
쉘스크립트에서 이따금씩 사용되는 2>&1 이해하기
Git 도구 리비전 조회하기