Node.js und MongoDB am Raspberry Pi

Wie man Node.js und MongoDB am Raspberry Pi installiert und seinen Server automatisch beim Booten startet.

Artikelbild

Der Raspberry Pi ist wirklich ein kleiner Alleskönner. In letzter Zeit verwende ich ihn gerne als Node-Server. Hier ist ein Beispiel, wie man auf einem Raspberry Pi 2 Node.js und MongoDB installieren kann. Außerdem wird ein automatisches Start-Script hinterlegt, welches beim Booten vom Pi automatisch ausgeführt wird.

Node.js installieren

Mit folgendem Befehl werden NodeSource Packages zu apt hinzugefügt:

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -

Nun kann Node.js über apt-get installiert werden:

sudo apt install nodejs

Jetzt sollte node im Terminal zur Verfügung stehen:

pi@raspberrypi:~ $ node -v
v6.8.1

MongoDB installieren

Um MongoDB zu installieren benötigt man folgenden Befehl:

sudo apt-get install mongodb-server

Um zu testen, ob alles korrekt installiert wurde, kann man wie folgt die Version überprüfen:

pi@raspberrypi:~ $ mongo --version
MongoDB shell version: 2.4.10

Auto-Start-Script

Um am Pi einen Node-Server automatisch nach dem Booten zu starten, lege ich zuerst ein Script mit Ausführungsrechten in meinem Home-Verzeichnis an:

cd
touch startup.sh
chmod +x startup.sh

Um dieses beim Starten des Pis auszuführen, wird dieses unter /etc/rc.local eingetragen:

sudo nano /etc/rc.local
/home/pi/startup.sh

Starten des Node.js-Servers

Für den Server kommt Express zum Einsatz. Die package.json hat folgenden Inhalt:

{
  ...
  "dependencies": {
    "express": "^4.14.0",
    "mongodb": "^2.2.11",
    "promise": "^7.1.1"
  }
}

Das Server-Script sieht wie folgt aus:

// index.js
var MongoClient = require('mongodb').MongoClient;
var Promise = require('promise');
var express = require('express');
var app = express();
var url = 'mongodb://localhost:27017/test';

function connect(url) {
  return new Promise(function(resolve, reject) {
    MongoClient.connect(url, function(err, db) {
      if (err) {
        console.error('mongo connection error: ', err.message);
        reject(err);
      } else {
        console.info("connected to mongodb");
        resolve(db);
      }
    });
  });
}

connect(url).then(function(db) {
  app.get('/', function (req, res) {
    // do something with db
    res.send('Node.js and MongoDB up and running');
  });

  app.listen(3000, function () {
    console.log('Server started on port 3000!');
  });
}, function(err) {
  console.error(err);
});

Diese zwei Dateien werden auf den Raspberry Pi in folgenden Ordner übertragen:

pi@raspberrypi:~ $ cd server/express/
pi@raspberrypi:~/server/express $ ll
total 8
-rw-r--r-- 1 pi pi 805 Oct 22 20:27 index.js
-rw-r--r-- 1 pi pi 311 Oct 22 20:27 package.json

Die fehlenden Dependencies können mit diesem Befehl installiert werden:

pi@raspberrypi:~/server/express $ npm install

Um zu testen, ob alles korrekt installiert wurde, kann man den Server wie folgt starten:

pi@raspberrypi:~/server/express $ node index.js
connected to mongodb
Server started on port 3000!

Wenn das alles geklappt hat, kann dieser Befehl in die startup.sh übertragen werden, um den Node-Server automatisch beim Booten zu starten. Um auf Nummer Sicher zu gehen, wird der Pfad von Node.js im Ganzen angegeben. Diesen bekommen man über den Befehl which node.

pi@raspberrypi:~/server/express $ which node
/usr/bin/node

Nun kann der endgültige Befehl in die startup.sh eingetragen werden:

cd
nano startup.sh

Dort fügt man diesen Befehl ein:

#!/bin/bash
/usr/bin/node /home/pi/server/express/index.js

Zum Testen kann das Script direkt aufgerufen werden:

./startup.sh

Beim nächsten Neustart des Pi sollte nun der Server automatisch gestartet werden.

Viel Spaß beim Basteln! 👍

Feedback