Node.js und MongoDB am Raspberry Pi
Wie man Node.js und MongoDB am Raspberry Pi installiert und seinen Server automatisch beim Booten startet.
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.
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
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
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
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