코딩/라즈베리파이

라즈베리파이 NodeJS 서버 백그라운드 구동하기 (pm2 forever)

드리프트 2021. 8. 23. 21:04
728x170

 

 

안녕하세요?

 

개인적으로 Strapi 서버를 라즈베리파이에 구동시키면서 간단한 개인 블로그용 CMS (Content Management System)을 구축했는데요.

 

Strapi.js가 Node 백엔드 프로그램이라 "npm start"로 실행해야 합니다.

 

그런데 외부에서 라즈베리파이에 접속할 때는 스마트폰의 terminal 앱에서 집에 있는 라즈베리파이 서버에 접속하는데요.

 

외부에서 ssh로 터미널 접속해서 "npm start"로 서버를 구동했으면 이 서버를 백그라운드로 계속 돌려야할 필요가 생깁니다.

 

그래서 나온게 Node.js 세계에서는 forever와 PM2가 유명한데요.

 

이 두가지 패키지에 대해 간단한 사용법에 대해 알아 보겠습니다.

 

일단 라즈베리파이 서버 구축에 대해 궁금하시면 제가 올린 시리즈가 있으니 참고 바랍니다.

 

1편. https://cpro95.tistory.com/135?category=790305

 

라즈베리파이로 NAS 서버 만들기

안녕하세요? 라즈베리파이로 여러 가지를 만들 수 있는데 그중 가장 쉬운 게 아마 서버 구축일 겁니다. 보통 집에 왜 라즈베리파이 서버를 구축하려고 하냐면 여러 가지 이유가 있겠지만 외부에

cpro95.tistory.com

2편. https://cpro95.tistory.com/136?category=790305 

 

라즈베리파이로 NAS 서버 만들기 2편 - ftp

안녕하세요? 지난시간에 라즈베리파이로 서버 구축하는 방법에 대해 알아 봤는데요. https://cpro95.tistory.com/135 라즈베리파이로 NAS 서버 만들기 안녕하세요? 라즈베리파이로 여러 가지를 만들 수

cpro95.tistory.com

3편. https://cpro95.tistory.com/147?category=790305 

 

라즈베리파이로 NAS 서버 만들기 3편 - 토렌트 서버 (transmission)

안녕하세요? 지난 시간에 이어 라즈베리파이로 NAS 서버 만들기를 계속 하도록 하겠습니다. 1편. cpro95.tistory.com/135 라즈베리파이로 NAS 서버 만들기 안녕하세요? 라즈베리파이로 여러 가지를 만들

cpro95.tistory.com

팁. https://cpro95.tistory.com/461?category=790305 

 

라즈베리파이 OS sudo, sudoers 설정

안녕하세요? 오늘은 간단한 작업을 알아 보겠습니다. 지난 시간에 라즈베리파이에서 root 계정을 이용했었는데요. 저는 개인 서버이고 중요한 서버가 아니라서 아예 root 계정으로 전환해서 작업

cpro95.tistory.com

 

 

 

Forever

 

일단 Forever는 아주 옛날에 나온 패키지입니다.

 

https://github.com/foreversd/forever

 

GitHub - foreversd/forever: A simple CLI tool for ensuring that a given script runs continuously (i.e. forever)

A simple CLI tool for ensuring that a given script runs continuously (i.e. forever) - GitHub - foreversd/forever: A simple CLI tool for ensuring that a given script runs continuously (i.e. forever)

github.com

 

사용법이 간단해서 초창기에는 많은 유저분들이 사용했는데요.

 

일단 설치는 전체설치하셔야 합니다.

sudo npm install forever -g

일단 설치하셨으면 실행해 볼까요?

forever

도움말이 상당히 깁니다.

 

시간이 부족한 이 글의 독자분들을 위해 핵심만 알려드리도록 하겠습니다.

 

 

기본적인 사용법

forever start main.js

간단한 Node.js 코드를 만들었다고 할때 그 파일을 백그라운드로 실행 시켜 주는 명령어 입니다.

 

웹 개발에서는 Nodemon이 많이 쓰입니다.

 

그래서 위와 같은 단순한 명령어로는 forever 패키지는 잘 쓰지 않는데요.

 

 

NPM START 백그라운드 실행하기

 

우리가 목표로 하는 거는 NPM 스크립트의 실행인데요.

 

보통 "npm start"로 전체 서버를 구동시킵니다.

 

그러면 다음과 같이 해야 될가요?

 

forever start npm start

무언가 에러가 났습니다.

 

start 명령어 뒤에 바로 백그라운드로 실행시킬 자바스크립트 파일이 나오는데 그게 없다는 얘기네요.

 

근데 우리의 목적은 패키지 구동인 "npm start"인데 말입니다.

 

그래서 forever에서는 -c 옵션을 제공합니다.

 

Help 파일에서 보면

-c  COMMAND      COMMAND to execute (defaults to node)

라고 되어 있습니다.

 

즉, COMMAND를 실행시키는 옵션입니다.

 

그래서 최종적으로 "npm start"를 실행시킬려면 다음과 같이 하면 됩니다.

 

forever start -c "npm start" ./

마지막에 현재 디렉토리를 명기했습니다.

 

이게 빠지면 COMMAND인 "npm start"를 어디서 실행시키는지 불명확하기 때문에 꼭 필요한 옵션입니다.

 

그럼, forever를 구동 시켰는데요.

 

뭐가 구동되고 있는지 확인하는 방법은 뭘까요?

 

 

 

forever list

 

바로 forever list 명령어입니다.

 

forever list

맨 밑에 보시면 info 로그에 Forever processes running 라고 나오는 걸로 봐서 그 다음에 있는게 우리가 돌리고자 하는 서버인거 같네요.

 

맞습니다.

 

마지막에서 유심히 볼거는 바로 forever pid 와 id 인데요.

 

forever pid 는 29690 이고, id 는 29697 이네요.

 

서버를 중지하고 싶을 때 쓰이는 프로세서 id가 위에서 보면 id라고 하는 29697 입니다.

 

 

forever stop

 

위에서 가동시켰던 서버를 중지해 볼까요?

 

forever stop 29697

info 로그에 Forever stopped process 라고 나오는 걸로 봐서 중지가 된거 같습니다.

 

log파일을 볼려면 위의 logfile인 /home/cpro95/.forever/VQHx.log tail해서 보시면 됩니다.

 

tail -f /home/cpro95/.forever/VQHx.log

 

지금까지 forever를 이용한 Node 서버 백그라운드 구동하기에 대해 알아 보았는데요.

 

forever 패키지는 더이상 유지 보수가 안되고 있고, 심지어 forever 개발자도 pm2를 사용하라고 권하고 있습니다.

 

그래서 전문적인 Process Management 패키지인 pm2에 대해 알아 보겠습니다.

 

 

 

PM2

 

 

설치는 홈페이지에 나와 있듯이

 

sudo npm install -g pm2

라고 하면 됩니다. 저는 라즈베리파이에 글로벌로 설치할거라 sudo로 실행했습니다.

 

깃헙 링크 : https://github.com/Unitech/pm2

 

GitHub - Unitech/pm2: Node.js Production Process Manager with a built-in Load Balancer.

Node.js Production Process Manager with a built-in Load Balancer. - GitHub - Unitech/pm2: Node.js Production Process Manager with a built-in Load Balancer.

github.com

 

본격적으로 사용법에 대해 알아 보겠습니다.

 

 

Node 앱 실행하기

 

애플리케이션을 시작하거나, 데몬화하거나, 모니터링하는 가장 간단한 방법은 다음과 같이 실행하는 겁니다.

pm2 start app.js

또는 다음과 같이 다른 응용 프로그램을 쉽게 시작시킬수 있습니다.

pm2 start bashscript.sh
pm2 start python-app.py --watch
pm2 start binary-file -- --port 1520

PM2는 Javascript 서버만 관리하는게 아니고 pm2 로 실행한 모든 프로세서를 관리하는 프로그램입니다.

 

그래서 PM2가 막강한 이유겠죠.

 

그러면 Node 패키지를 실행해 볼까요?

 

pm2 start "npm start"

라고 하시면 됩니다.

 

스크린샷을 보시면 뭔가 forever 보다 세련돼 보이는데요.

 

id, name, mode, status, cpu, memory 등 다양한 정보를 제공해 주고 있습니다.

 

리눅스의 htop 으로 프로세서를 볼때랑 흡사한데요. 굉장히 직관적입니다.

 

그런데 우리가 실행시킨 프로세서의 name 이 그냥 "npm start"입니다.

 

여러개의 "npm start"를 실행했을 때 뭐가 뭔지 헷갈릴 수 있는데요.

 

이럴때도 pm2는 여러가지 옵션을 제공해 줍니다.

 

일단 실행시킨 서버를 중지해 보겠습니다.

 

pm2 stop "npm start"

 

stop 명령어를 실행하고 연이어 list로 프로세서 리스트를 살펴보았습니다.

 

status 가 stopped로 되어 있어 확실히 중지된 상태입니다.

 

그러면 아까 얘기드린 프로세서를 헷갈리지 않게 하는 옵션에 대해 알아 보겠습니다.

 

그건 바로 name에 본인이 직접 이름을 지을 수 있는데요.

 

다음과 같이 하시면 됩니다.

 

pm2 start --name Strapi "npm start"

또는

pm2 start "npm start" --name "Strapi Server"

--name 옵션은 마지막에 넣어도 중간에 넣어도 상관없습니다.

 

스페이스가 포함된 이름을 쓸 경우에는 큰 따옴표로 묶으면 됩니다.

 

 

 

그외 명령어

 

그외 애플리케이션 상태 관리는 다음과 같이 여러가지가 있습니다.

pm2 restart app_name
pm2 reload app_name
pm2 stop app_name
pm2 delete app_name

 

그리고 상태창을 보는 명령어는 list 외 ls, status 도 동일하게 적용되니 참고 바랍니다.

 

로그를 보고 싶을 때는 다음과 같이 하시면 됩니다.

pm2 logs

// 또는 길게 보고 싶으시면
pm2 logs --lines 200

 

 

모니터링

 

PM2가 사랑받는 이유 중 하나는 바로 모니터링인데요.

 

다음과 같이 입력하시면 터미널창에 아래 스크린샷이 나타나겁니다.

pm2 monit

뭔가 서버 운영자 같은 포스가 느껴지지 않습니까?

 

그리고 다음과 같이 실행하면 더 굉장한게 나타납니다.

pm2 monitor

또는 

pm2 plus

 

pm2 monitor 또는 pm2 plus 라고 치면 pm2.io 계정을 이용해 웹에서 모니터링 할 수 있게 보여줍니다.

 

정말 굉장하지 않나요?

 

그래서 현재 Node.js 서버 백그라운드 구동 프로그램은 PM2가 대세라고 합니다.

 

지금까지 Node 서버 백그라운드 구동하기에 대해 알아 보았습니다.

 

많은 도움이 되셨으면 합니다.

 

 

그리드형