리눅스(Centos6.x) 서버에 node.js 설치하기
node.js 초기에는 node.js 하나만 다운로드 받으면 됐지만, 지금은 여러가지 모듈과 함께 기능들을 제공하고 있어서 node.js를 다운로드 받을 수 있는 별도의 모듈(Node Package Manager)을 통해 설치한다.
1.소스 컴파일
1) source 다운로드
wget http://nodejs.org/dist/v0.10.24/node-v0.10.24.tar.gz
2) 압축 해제 및 폴더이동
tar zxvf node-v*.tar.gz
cd node-v*
3) configure 및 컴파일
./configure
make
4) 설치
make install
2.바이너리 설치
yum install npm
바이너리로 npm을 설치할 경우 EPEL repository를 설치해야 한다.
EPEL (Extra Packages for Enterprise Linux) 은 Fedora Project 에서 제공되는 저장소로 각종 패키지의 최신 버전을 제공하는 community 기반의 저장소이다.
RHEL 의 패키지 정책은 보수적이고 안정성이 최우선이라 패키지 업데이트가 잘 되지 않는다.
즉, epel 로 npm을 설치할 수 있으나 그 버전이 매우 낮다.
2-1 epel 설치방법
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
서론이 길어지만 위의 이유에서 컴파일 또는 바이너리방식이 아닌 node 사이트에서 직접 파일을 받기로 했다.
(epel 설치후 npm을 설치하면 그 버전이 매우 낮다)
nodejs 는 https://nodejs.org/en/download/ 에서 다운로드 받을 수 있다.
각 OS별로 제공하며 2017.09 현재 최신버전은 6.11.3 버전이다.
파일다운로드
wget https://nodejs.org/dist/v6.11.3/node-v6.11.3-linux-x64.tar.xz
압축해제
tar xvf node-v6.11.3-linux-x64.tar.xz
버전확인
node -v
필요한 경우 별도의 모듈을 다운로드 받아야 하는 경우가 있다.
예를 들어 mqtt 경우 아래와 같이 설치한다.
npm install mqtt --save
위와 같이 실행하면 현재 경로에 node_modules/mqtt/에 파일들이 생긴다.
기존에 node를 설치했다면 기존 구조와 비슷하게 맞추기 위해 node 설치 디렉토리 안의 lib 로 이동 후 npm install mqtt --save 를 실행한다.
그러면 다음과 같이 이쁜 구조로 mqtt 가 설치된다.
{node}/lib/node_modules/npm
{node}/lib/node_modules/mqtt
다른 모듈 설치시에도 {node}/lib 안에서 설치를 한다.
예)
cd /usr/local/node-v6.11.3-linux-x64/lib
npm install request --save
{node}/lib/node_modules/npm
{node}/lib/node_modules/mqtt
{node}/lib/node_modules/request
모듈을 설치했으면 이 모듈을 작성하려는 코드에 적용한다.
test.js (샘플)
==================
var mqtt = require('mqtt');
var request = require('request');
var client = mqtt.connect('mqtt://test.mosquitto.org')
var item = [];
client.on('connect', function() {
client.subscribe('beacons')
})
.
.
.
실행시 모듈을 못찾는 경우가 있다.
[root@dev1 bin]# node test
module.js:340
throw err;
^
Error: Cannot find module 'mqtt'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (/usr/local/node-v6.11.3-linux-x64/bin/test.js:1:74)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
이런 경우에는 모듈의 경로를 상대적으로 설정해주면 된다.
var mqtt = require('../lib/node_modules/mqtt');
var request = require('../lib/node_modules/request');
var client = mqtt.connect('mqtt://test.mosquitto.org')
var item = [];
client.on('connect', function() {
client.subscribe('beacons')
})
끝~
참고
https://nodejs.org/en/
https://www.npmjs.com/package/mqtt
https://blog.risingstack.com/getting-started-with-nodejs-and-mqtt/