So erstellen Sie einen Raspberry Pi-Server für die Entwicklung
Veröffentlicht: 2022-03-11Der Raspberry Pi ist ein kleiner Computer, den Sie für nur 5 US-Dollar bekommen können und auf dem Sie viele verschiedene Arten von Software ausführen und viele verschiedene Projekte erstellen können.
In diesem Artikel führe ich Sie durch den Prozess der Einrichtung als Heimentwicklungsserver und der Bereitstellung einer Full-Stack-JavaScript-Anwendung, auf die Sie von außerhalb Ihres Netzwerks zugreifen können. Dies ist großartig, um Ihren eigenen digitalen Remote-Arbeitsbereich einzurichten oder einfach die Kontrolle über die Hardware zu haben, die Sie für die Entwicklung verwenden.
Was benötigen Sie für diesen Raspberry Pi Home Server?
Obwohl dies jetzt insbesondere ein Raspberry Pi 3-Tutorial ist, sollte es immer noch mit Modellen funktionieren, die bis zur ersten Generation zurückgehen – wenn Sie ein älteres Modell oder einen Raspberry Pi Zero haben, teilen Sie uns bitte Ihre Erfahrungen in den Kommentaren unten mit.
Zusätzlich zum Raspberry Pi Board selbst benötigen Sie:
- Ein Micro-USB-Ladegerät
- Ein Ethernet-Kabel
- Eine microSD-Karte (mindestens 8 GB und Karten bis zu 32 GB scheinen gut zu funktionieren)
Diese werden sich auch während der Ersteinrichtung als nützlich erweisen:
- Eine USB-Tastatur
- Ein HDMI-Kabel und ein Monitor
Das Raspberry Pi-Betriebssystem: Raspbian
Die Installation eines Betriebssystems auf einem Raspberry Pi ist einfach. Installieren Sie zunächst mit Ihrem Computer das Boot-Image auf einer microSD-Karte. Dann einfach die Karte in den Raspberry Pi stecken und von dort booten.
Raspbian ist eine von Debian 7.0 ( Wheezy ) portierte Linux-Distribution und ist das offizielle Betriebssystem für Raspberry Pi, das für die Architektur des Geräts optimiert ist. Während es andere Möglichkeiten gibt, Ihr bevorzugtes Betriebssystem auf dem Pi auszuführen, verwenden wir Raspbian wegen seiner Einfachheit.
Dieses Tutorial wurde aktualisiert, um mit dieser Version (oder höher) von Raspbian zu funktionieren:
Kernel version : #1 SMP Debian 4.9.110-3+deb9u4 (2018-08-21) Kernel release : 4.9.0-8-amd64
Um Raspbian zu installieren, gehen Sie zur offiziellen Download-Seite und laden Sie die ZIP-Datei mit der neuesten Raspbian-Version herunter.
Stecken Sie dann die microSD-Karte in den SD-Kartensteckplatz oder -adapter Ihres Computers. Befolgen Sie je nach Betriebssystem Ihres Computers die Anweisungen auf der Raspberry-Website für Linux, Mac OS oder Windows.
Wenn der Vorgang abgeschlossen ist, werfen Sie die SD-Karte aus Ihrem Computer aus und legen Sie sie in den Raspberry Pi ein. Verbinden Sie den Raspberry Pi über das Ethernet-Kabel mit Ihrem Router und stecken Sie das Micro-USB-Ladegerät ein, wodurch der Raspberry Pi gestartet wird.
Für die Erstkonfiguration gibt es zwei Möglichkeiten:
- Wenn Sie eine USB-Tastatur und einen HDMI-Monitor haben, können Sie diese für die Ersteinrichtung an den Raspberry Pi anschließen.
- Ihr Pi sollte diese Geräte erkennen, sobald sie angeschlossen sind.
- Beim ersten Start des Pi wird automatisch
raspi-config
. Nach dem ersten Start müssen Siesudo raspi-config
selbst ausführen, um das Gerät zu konfigurieren.
- Wenn Sie sie nicht haben, können Sie sich mit SSH mit Ihrem Raspberry Pi verbinden, während er eingeschaltet ist:
- Zuerst müssen Sie die IP-Adresse Ihres Raspberry Pi in Ihrem lokalen Netzwerk finden. Dies kann durch eine Verbindung zur Admin-Seite Ihres Routers oder durch die Verwendung eines Netzwerktools wie
nmap
. - Sobald Sie die IP-Adresse des Geräts haben, verbinden Sie sich mit SSH von Ihrem Terminal aus (oder über Putty, wenn Sie Windows verwenden). Der Standardbenutzer ist
pi
und das Standardpasswort istraspberry
. Wenn die IP-Adresse beispielsweise 192.168.1.16 lautet, führenssh [email protected]
und geben Sie das Passwort ein, wenn Sie dazu aufgefordert werden. - Wenn Sie verbunden sind, führen Sie
sudo raspi-config
.
- Zuerst müssen Sie die IP-Adresse Ihres Raspberry Pi in Ihrem lokalen Netzwerk finden. Dies kann durch eine Verbindung zur Admin-Seite Ihres Routers oder durch die Verwendung eines Netzwerktools wie
raspi-config
führt Sie durch die endgültige Einrichtung. Sie können alle Optionen konfigurieren, aber die wichtigsten sind die ersten beiden: das Dateisystem erweitern, um sicherzustellen, dass der gesamte SD-Kartenspeicher für das Betriebssystem verfügbar ist, und das Passwort für den Standard-Pi-Benutzer zu ändern, damit Ihr Server verfügbar ist vor Eindringlingen geschützt.
Installieren Sie einen Webserver (Nginx) auf Ihrem Raspberry Pi
Als Nächstes installieren Sie den Webserver. Ich bevorzuge Nginx, weil es einen geringen Speicherbedarf hat und weil es gut mit Node.js zusammenspielt (das Sie später einrichten werden). Andere Webserver wie Apache oder lighttpd würden auch funktionieren, aber wir verwenden Nginx für diese Demonstration.
Bevor Sie mit der Installation beginnen, müssen Sie sicherstellen, dass alles auf dem neuesten Stand ist, indem Sie diese Befehle auf dem Pi ausführen:
sudo apt-get update sudo apt-get upgrade
Dann können Sie Nginx mit apt-get
installieren:
sudo apt-get install nginx
Starten Sie nach Abschluss der Installation den Server, indem Sie Folgendes ausführen:
sudo service nginx start
Wenn Sie die lokale IP Ihres Raspberry Pi im vorherigen Schritt nicht herausfinden mussten, ist es an der Zeit, dies herauszufinden, indem Sie ifconfig
ausführen. Die Ausgabe für Ihren Ethernet-Adapter wird unter eth0
und mit seiner lokalen IP-Adresse mit der Bezeichnung inet addr
.
Sobald Sie die IP-Adresse kennen, können Sie den Browser Ihres Computers darauf richten, wo Sie die Standardnachricht „Willkommen bei Nginx“ sehen sollten.
Offen für das Web: Portweiterleitung
Sie können diesen Schritt überspringen, wenn Sie nicht vorhaben, von außerhalb Ihres lokalen Netzwerks auf Ihren Raspberry Pi zuzugreifen. Aber für diejenigen, die von anderen Standorten aus auf ihren Server zugreifen möchten, stellen wir sicher, dass dies möglich ist.
In einem typischen Heimnetzwerk sind mit dem Router verbundene Geräte für die Außenwelt unsichtbar. Nur Ihr Router ist von außen über die externe IP-Adresse Ihres Netzwerks erreichbar. Ihr Router ist dafür verantwortlich, zu bestimmen, welcher eingehende Datenverkehr in das Netzwerk zugelassen wird und an welches Gerät er gesendet werden soll.
Wenn ein Gerät im lokalen Netzwerk eine Verbindung initiiert (z. B. wenn Sie eine Website in Ihrem Browser öffnen), erkennt der Router den eingehenden Antwortdatenverkehr als Teil dieser Verbindung und lässt ihn durch. Wenn der Router jedoch eingehenden Datenverkehr empfängt, der nicht Teil einer offenen Verbindung ist (z. B. wenn ein externes Gerät versucht, eine Verbindung mit einem internen Gerät herzustellen), wird der eingehende Datenverkehr daran gehindert, in das Netzwerk zu gelangen. Dies ist eine wichtige Sicherheitsfunktion zum Schutz des Netzwerks!
Wie können Sie sich also von außen mit Ihrem Pi verbinden? Die Antwort ist Portweiterleitung. Der Router muss so konfiguriert werden, dass eingehende Verbindungen an bestimmten Ports durchgelassen und an das richtige Gerät gesendet werden. Standardmäßig verwendet das HTTP-Protokoll Port 80 und SSH verwendet Port 22. Dies sind also die beiden Ports, die Sie auf Ihrem Router öffnen müssen, um auf Ihre Webanwendung zuzugreifen und sichere Verbindungen für die Verwaltung Ihres Servers zuzulassen.
Die Schritte zum Konfigurieren Ihres Routers zum Öffnen und Weiterleiten der Ports können je nach Ihrem Internetanbieter und der Marke Ihres Routers variieren, aber Sie sollten in jedem Fall in der Lage sein, dies über die erweiterten Konfigurationsoptionen auf der Admin-Seite Ihres Routers zu erreichen. Suchen Sie einfach nach einer Option mit einem Namen wie „Forwarding“, „Port Forwarding“ oder „Network Address Translation“.
Sie müssen einen Port für HTTP-Verbindungen und einen anderen für SSH öffnen. Die Grundidee besteht darin, Daten, die an diese beiden externen Ports adressiert sind, an Ihren Raspberry Pi weiterzuleiten, wobei der Webverkehr an Port 80 geht, wo Nginx lauscht, und der SSH-Verkehr an Port 22, wo der SSH-Server Verbindungen von externen Computern akzeptiert. Hier ist ein Beispiel dafür, wie dies auf der Konfigurationsseite Ihres Routers aussehen könnte:
192.168.1.16
lautet. Der gesamte eingehende Datenverkehr für die Ports 80 oder 22 wird an diese interne Adresse weitergeleitet. Sie können die externe IP-Adresse Ihres Routers ermitteln, indem Sie einfach „Was ist meine IP-Adresse“ in Google eingeben. Wenn Sie sich dann außerhalb des Netzwerks Ihres Routers bewegen, können Sie testen, ob die Portweiterleitung funktioniert, indem Sie eine SSH-Verbindung mit ssh pi@{external IP address}
öffnen. Ebenso kann die HTTP-Portweiterleitung getestet werden, indem Sie die externe IP-Adresse in die Adressleiste Ihres Browsers eingeben. Denken Sie nur daran, dass die Portweiterleitung es jedem von außen ermöglicht, über diese Ports auf das Gerät zuzugreifen, wenn er die externe IP Ihres Routers kennt.
Wenn Sie keine statische IP haben, können Sie dynamisches DNS einrichten. Es ist ein sehr einfacher und einfacher Schritt. Sie können dynamisches DNS von Ihrem Router aus einrichten oder Ihren Raspberry Pi dafür konfigurieren. Ich werde hier nicht darauf eingehen, wie man DDNS konfiguriert, aber BitPi.co hat bei Bedarf ein gutes Tutorial zu diesem Thema.

Installieren Sie das Framework: Full-Stack-JavaScript
Sie können die meisten Web-Frameworks auf Nginx ausführen, aber lassen Sie uns sehen, wie Sie mit JavaScript den vollen Stapel erreichen. Dazu müssen Sie Node.js und MongoDB installieren.
Heutzutage wird Node.js einfach auf einem Raspberry Pi installiert mit:
sudo apt-get install nodejs
Sobald die Installation abgeschlossen ist, können Sie überprüfen, ob sie funktioniert, indem Sie node -v
.
Jetzt können Sie MongoDB installieren, indem Sie einfach Folgendes eingeben:
sudo apt-get install mongodb
Beachten Sie jedoch, dass Sie, wenn Sie den Raspberry Pi jemals ausschalten müssen, zuerst den Dienst herunterfahren müssen, um eine Beschädigung der Datenbank zu vermeiden:
sudo service mongodb stop
Stellen Sie Ihre App bereit
Sie können auf Ihrem lokalen Computer entwickeln und Ihre Änderungen dann in ein Git-Repository auf BitBucket übertragen. Da Raspbian mit vorinstalliertem Git geliefert wird, können Sie Ihren neuesten Anwendungscode auf das Gerät ziehen und ausführen.
Bauen Sie das Projekt auf
Lassen Sie uns zunächst Anwendungscode einrichten und in ein Git-Repository übertragen. Es gibt viele Möglichkeiten, eine Anwendung zu starten, aber einer meiner Favoriten ist Generator-Angular-Fullstack, der sowohl Server- als auch Client-Code gerüstet.
Installieren Sie generator-angular-fullstack
auf Ihrem Computer:
npm install -g generator-angular-fullstack
Erstellen Sie ein neues Verzeichnis für Ihre Anwendung:
mkdir my-app cd my-app
Und gerüstet die Anwendung:
yo angular-fullstack my-app
Erstellen Sie das Repository und übertragen Sie den Code
Erstellen Sie nun ein Repository in BitBucket, wie hier beschrieben. Richten Sie dann Ihr lokales Verzeichnis ein:
git init git remote add origin [email protected]:USER/REPO.git
So können Sie den Code committen und pushen:
git add . git commit -m 'Initial commit' git push -u origin master
Der Generator wird mit dem Grunt-Build-Control-Plugin geliefert, mit dem Sie den Build-Code an einen bestimmten Zweig in Ihrem Repository übergeben können. Fügen Sie einfach die Konfiguration für BitBucket zu Gruntfile.js
im Stammverzeichnis Ihrer Anwendung hinzu:
buildcontrol: { options: { dir: 'dist', commit: true, push: true, connectCommits: false, message: 'Built %sourceName% from commit %sourceCommit% on branch %sourceBranch%' }, bitbucket: { options: { remote: '[email protected]:USER/REPO.git', branch: 'build' } } }, // ...
Jetzt ausführen:
grunt build
…um den Verteilungsordner zu erstellen, gefolgt von diesem:
grunt buildcontrol:bitbucket
…um den Code zu committen und in den Build-Zweig in Ihrem Repository zu pushen.
Generieren Sie den SSH-Schlüssel
Sie haben jetzt Ihren Code gehostet. Bevor Sie es auf Ihrem Raspberry Pi bereitstellen können, müssen Sie einen SSH-Schlüssel für den Raspberry Pi generieren und ihn Ihrem BitBucket-Konto hinzufügen. Wir werden diesen Schritt schnell ausführen, aber wenn Sie Probleme haben, folgen Sie bitte der BitBucket-Anleitung. Melden Sie sich also wieder bei Ihrem Raspberry Pi-Terminal an und generieren Sie das öffentliche/private Schlüsselpaar:
ssh-keygen
Starten Sie dann den Agenten:
ssh-agent /bin/bash
Und fügen Sie den Schlüssel zum Agenten hinzu:
ssh-add /home/pi/.ssh/id_rsa
Jetzt müssen Sie nur noch den Inhalt des öffentlichen Schlüssels ausgeben:
cat /home/pi/.ssh/id_rsa.pub
…damit Sie es kopieren und in BitBucket einfügen können.
Klicken Sie in BitBucket auf Ihr Profilbild und gehen Sie zu Konto verwalten . Suchen Sie unter SICHERHEIT nach SSH-Schlüsseln und klicken Sie auf die Schaltfläche Schlüssel hinzufügen .
Klonen Sie das Repository
Es gibt keine Konvention dafür, wo der Code Ihrer Apps platziert werden soll, aber Sie können ein /var/www
-Verzeichnis erstellen und alle Ihre Projekte dort ablegen.
cd /var sudo mkdir www
Um die Verwendung von sudo
zu vermeiden, wenn Sie Dateien im Webroot platzieren möchten, können Sie den Eigentümer auf Ihren Pi-Benutzer und die Gruppe auf www-data
ändern, die von Nginx verwendet wird:
sudo chown -R pi:www-data www cd www
Jetzt können Sie den Build-Zweig Ihres Repositorys klonen und die Abhängigkeiten installieren:
git clone [email protected]:USER/REPO.git --branch build --single-branch cd REPO npm install --production
Sobald es fertig ist, können Sie Ihre App starten und die Umgebung auf Produktion einstellen:
export NODE_ENV=production; node server/app.js &
Richten Sie nun Ihren Computerbrowser auf die IP-Adresse des Geräts, um zu überprüfen, ob es funktioniert.
Nginx-Reverse-Proxy konfigurieren
Es bleibt noch ein Schritt, um Ihre Anwendung von außen zugänglich zu machen. Obwohl Nginx auf Port 80 lauscht, wo es HTTP-Anforderungen für Ihren Pi empfängt, lauscht die Node-Anwendung selbst auf einem anderen Port (z. B. Port 8080). Daher müssen Sie Nginx so konfigurieren, dass es als Reverse-Proxy fungiert, Anforderungen erkennt, die für Ihre Anwendung bestimmt sind, und sie an Node.
Nginx speichert die Konfigurationsdatei für jede Anwendung, die es bedient, im Ordner „ sites-available
“:
cd /etc/nginx/sites-available/
Hier können Sie die default
kopieren und nach Belieben bearbeiten:
sudo cp default my-app sudo nano my-app
Die endgültige Konfigurationsdatei sollte folgendermaßen aussehen, wobei Nginx als Proxy für den Node.js-Server fungiert:
server { listen 80; root /var/www/my-app/; # identifies the location of the application you are configuring server_name my-app.dev; # identifies the hostname used by this application's traffic location / { proxy_pass http://localhost:8080/; # configures the back-end destination for this traffic } }
Um diese Konfiguration zu aktivieren, müssen Sie einen Symlink im Ordner „ sites-enabled
“ erstellen, in dem Nginx während der Laufzeit nach aktiven Konfigurationen sucht:
sudo ln -s /etc/nginx/sites-available/my-app /etc/nginx/sites-enabled/my-app
Und laden Sie den Dienst neu, um diese Änderungen zu aktivieren:
sudo service nginx reload
An diesem Punkt ist Ihre Anwendung bereit, HTTP-Verkehr zu empfangen, der für die Domäne my-app.dev
ist (dank der server_name my-app.dev
Direktive, die Sie oben konfiguriert haben). Das letzte Problem, das Sie lösen müssen, ist, wie Sie den Datenverkehr, den Sie von außen senden, mit diesem Domainnamen abgleichen können. Obwohl Sie einen Domainnamen kaufen und auf Ihre IP verweisen könnten, kommt die hosts
-Datei zur Rettung und macht dies unnötig.
Fügen Sie auf der Workstation, von der aus Sie auf die Site zugreifen, einfach die externe IP-Adresse Ihres Routers hinzu und gleichen Sie sie mit dem Hostnamen my-app.dev
. Jeglicher HTTP-Datenverkehr, den Sie für my-app.dev
generieren, wird dann direkt an Ihren Router gesendet, mit dem korrekten Hostnamen im Host
-HTTP-Header.
Unter Windows können Sie mit Administratorrechten die Datei in c:\windows\system32\drivers\etc\hosts
mit dem Notepad bearbeiten. Unter Linux und Mac können Sie das Terminal mit sudo nano /etc/hosts
bzw. sudo nano /private/etc/hosts
verwenden.
## # Host Database # # localhost is used to configure the loopback interface # when the system is booting. Do not change this entry. ## 127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost 212.124.126.242 my-app.dev # add your host name to the list
Was kommt als nächstes?
Nachdem alles eingerichtet ist, können Sie beliebig viele Anwendungen auf Ihrem Raspberry Pi bereitstellen und für immer oder pm2 installieren, um Ihre Node.js-Server am Leben zu erhalten.
Und denken Sie daran, dass Sie, wenn etwas schief geht, einfach die SD-Karte löschen und von vorne beginnen können!