PM2 를 활용해 yona 서버도 무중단 서비스 운영하기

요새 yona 서버가 자주 중단되는 상황이 발생하고 있네요. 당장 원인을 찾기도 힘들고 일단 무중단으로 운영할 수 있도록 Node.js 진영의 프로세스 관리자 PM2 를 도입해 보았습니다.

기존에는 nohup 을 이용해 아래와 같이 간단히 띄워두고 쓰고 있었습니다.

> nohup ./bin/yona &

최근 들어 자꾸 yona 서버가 중단되어 이참에 PM2 를 도입하도록 했습니다.

우분투 22.04 환경 기준에서 아래와 같이 nodejs 를 설치합니다. (현재 LTS 버전인 16.x 를 기준으로 합니다.)

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

PM2 는 npm 을 이용해 설치합니다.

> sudo npm install pm2@latest -g

이제 PM2 를 사용할 수 있습니다. 이제 yona 설치 경로로 이동합니다. 여기선 /var/www/yona 로 간주하겠습니다.

> cd /var/www/yona

아래와 같이 실행 스크립트를 만들어 줍니다.

> vi yona-pm2.sh

bash 스크립트 내용은 아래와 같습니다. YONA_DATA 의 경로는 운영할 환경에 맞게 변경하시면 됩니다. 스크립트 내용을 yona 소스중 https://github.com/yona-projects/yona/blob/next/restart.sh 를 참고해서 수정해봤습니다. nohup 을 사용하지 않고 pm2 를 이용할 예정이므로 이에 맞게 수정했습니다.

#!/bin/bash

# 포트번호 및 경로 설정
PORT=9000
YONA_DATA=/var/www/yona
export YONA_DATA

# 현재 프로세스 중단시키기..
pid=`ps -ef | grep java | grep com.typesafe.play | awk '{print $2}'`
if [ -n "$pid" ]; then 
	kill $pid
fi

# RUNNING_PID 제거
cd $YONA_DATA

if [ -e $RUNNING_PID ]; then
	rm RUNNING_PID
fi

# Play Framework 방식으로 yona 실행
JAVA_OPTS="-Xmx2048m -Xms1024m -Dyona.data=$YONA_DATA -DapplyEvolutions.default=true -Dhttp.port=$PORT" ./bin/yona </dev/null >/dev/null 2>&1

:wq 로 저장하고 아래와 같이 실행 권한을 줍니다.

> chmod 777 yona-pm2.sh

이제 PM2 로 쉘스크립트를 시작해주면 됩니다.

> pm2 start yona-pm2.sh

이제 아래와 같은 명령어로 간단한 서버 프로세스의 모니터링도 가능하고 몇번 재시작했는지도 알 수 있습니다.

> pm2 list

테이블에 status 가 online 으로 뜬다면 정상입니다. 또한 ↺ 값을 보면 몇 번이나 재시작했는지 알 수 있습니다.

기타 운용관련해서 사용 설명은 PM2 의 설명서를 참조하시기 바랍니다.

감사합니다. ^ㅇ^

참고 URLs >