PHP 사이트에 노드 앱 추가

dev | 2018-06-16

이 사이트는 Ubuntu에 Apache-PHP에서 돌리고 있는데 일부 페이지를 노드 기반으로 바꾸려고 서버에 노드를 설치해봤다. 우선 node, npm, pm2를 설치한다. 그냥 apt-get으로 설치하면 버전이 낮을 거 같아서 PPA를 써봤다. 최신 버전(latest)을 설치할까도 생각했지만 안정 버전(stable)이 있는 이유가 있을 거라는 생각과 안정 버전에서도 될 건 다 된다는 생각에 그냥 8.x대를 선택했다.

curl -sL https://deb.nodesource.com/setup_8.x -o nodesource_setup.sh

이거 하고 nodesource_setup.sh 내용을 확인하라는데 너무 길어서 잘 모르겠고 주석 보니 가짜는 아닌거 같아서 그냥 설치했다.

sudo bash nodesource_setup.sh

그러면 apt-get으로 최신 안정 버전을 설치할 수 있다.

sudo apt-get install nodejs

Node와 npm 버전을 확인하고 서버의 로컬호스트로 헬로월드 앱을 만들어서 실행하고 curl로 확인해보니 잘 작동한다. 여기까지는 개발 환경 설정하고 비슷해서 특별한 것이 없다.

아파치의 특정 디렉토리를 이 로컬호스트로 연결하고 싶은데 아파치의 ProxyPass를 사용하면 된다. 내 경우는 proxyproxy_http가 활성화 되어 있지 않아서 이를 활성화 해줘야 했다.

sudo a2enmod proxy
sudo a2enmod proxy_http

문서에는 httpd.conf에서 설정을 바꾸라고 되어 있는데 생김새를 보니 버추얼 호스트에서 설정해줘도 될 것 같아 보인다. 찾아보니 버추얼 호스트에서 설정하는 경우도 있어서 버추얼 호스트 설정에 아래 내용을 넣었다.

ProxyPass /node/ http://localhost:3000/

이렇게 해주니 외부에서도 페이지에 접근이 가능해졌다. 이제 껐다 켰을때 자동으로 올라오게 하면 되는데 pm2가 이걸 해주는것 같았다. Pm2가 뭔지 찾아보니 아웃사이더님 글을 찾을 수 있었고 끝까지 읽어보니 더이상 궁금해 하지 말고 그냥 pm2를 쓰면 되겠다는 강한 믿음이 생겨서 더이상 알아보지 않았다.

두가지를 더 해줘야 하는데 재부팅 했을 때 pm2가 실행되어야 하고 pm2가 어떤 앱을 실행할지 등록을 해줘야 한다. 링크된 글에는 베이그런트부터 시작해서 장황하게 설명이 되어 있는데 내 경우에는 pm2 startup해보니 시스템이 upstart라고 나와서 아래처럼 등록해줬다.

pm2 startup upstart

근데 위의 명령어 결과가 pm2 startup했을때의 결과와 매우 유사해서 그냥 한번만 해주면 되지 않을까 의심하고 있다. 그 다음에 앱 디렉토리로 가서 pm2로 앱을 실행한다.

pm2 start app.js

그러고 이 상태를 저장해서 다음에 pm2가 다시 실행할 수 있게 한다.

pm2 save

상태 저장이 생각보다 간단해서 마음에 든다. ~/.pm2/dump.pm2가 생성되는데 열어보면 생각보다 긴 json 파일에 이것 저것 정보가 들어있다. 서버를 껐다 켜보니 잘 올라온다.

이제 앱을 만들어 올리면 된다.

Comments

  • 후니 2018-12-04

    저의 경우 크롬 localhost를 자동실행하려고 하는데 초보라서 여쭤봅니다. 1)app.js 2)웹 실행 pm2로 이 두가지를 진행하려는데 코드를 어떻게 정리하면 될까요?

  • 신현석 2018-12-05

    질문 내용을 잘 모르겠습니다. 크롬에서 localhost로 접근하려는 경우 app.js가 요청과 응답을 처리하고 있다면 그냥 node app.js 하고 크롬에서 http://localhost:3000 으로 접근하면 응답 내용을 볼 수 있습니다. pm2는 필요 없습니다.

  • 후니 2018-12-05

    부팅시 자동으로 http://localhost:3000 으로 접근하는 코드를 잘몰라 질문 드렸습니다;;

  • 신현석 2018-12-07

    좀 더 자세하게 적어주셔야 할 것 같네요. 1) 서버를 부팅하는 건가요? 사용자 PC를 부팅하는 건가요? 2) 브라우저로 접근하는 건가요? 다른 도구로 접근하는 건가요? 3) '접근'의 의미를 잘 모르겠는데요. 접근하면 어떤 동작이 되는 것을 기대하시는 건가요? 누가 접근하는 건가요?

  • 추가질의 2018-12-09

    네, 단순히 라즈베리 PC에서 html화면을 직접 사용하려는 것입니다. 즉, node.js을 사용하여 간단한 voice명령어를 적용시킨후 localhost:3000을 활성화시켜 음성에 반응하는 미러를 적용하려고 합니다.매번 터미널 명령어를 치고 크롬화면을 클릭하는 작업을 해야하는 번거러움을 자동시작으로 적용하고 싶은 겁니다. app.js는 아래와 같습니다. var express = require('express'); var app = express(); var http = require('http').Server(app); var io = require('socket.io')(http); app.use(express.static(__dirname + '/public')); http.listen(3000, function(){ console.log('listening on *:3000'); });

  • 신현석 2018-12-10

    pm2 설치하시고 pm2 startup upstart pm2 start app.js pm2 save 이렇게 하면 부팅했을때마다 app.js가 구동됩니다.

  • youngh 2018-12-12

    네, 그럼 혹시 크롬을 띄우는 것도 가능할까요?

  • 신현석 2018-12-13

    운영체제별로 다릅니다. 터미널에서 크롬을 여는 방법[1]을 찾아보셔야 할 것 같고요. 부팅시마다 실행하는 것도 운영체제별로 다른데 AWS[2]꺼 보시고 사용하시는 운영체제에 맞는 방법을 찾아보셔야 하고요. app.js에서 exec로 쉘 커맨드를 실행[3]할 수도 있습니다. [1] https://askubuntu.com/questions/234663/what-command-should-i-type-to-run-chrome-from-the-terminal [2] https://stackoverflow.com/questions/12973777/how-to-run-a-shell-script-at-startup [3] https://stackoverflow.com/questions/20643470/execute-a-command-line-binary-with-node-js

Post a comment

:

: 공개 되지 않습니다. Gravatar를 표시 합니다.

:

: HTML 태그를 사용할 수 없습니다.