Node.js und MongoDB am Raspberry Pi

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

  • Web
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! 👍

Kommentare

comments powered by Disqus