


Stellen Sie eine Node.js-Anwendung mit MySQL und Prisma auf einem Raspberry Pi bereit
Jan 06, 2025 am 04:06 AMDie Bereitstellung von Anwendungen ist mit einer Reihe kostenloser und kostenpflichtiger Hosting-Optionen wie Render, AWS und DigitalOcean immer zugänglicher geworden. Für Entwickler, die jedoch ohne wiederkehrende Hosting-Gebühren lernen, experimentieren und Anwendungen bereitstellen möchten, bietet ein Raspberry Pi eine hervorragende Alternative. Mit diesem kompakten und dennoch leistungsstarken Gerät können Sie Ihren eigenen Linux-basierten Server zum Hosten von Webanwendungen erstellen.
In diesem Blog erfahren Sie, wie Sie eine TypeScript Node.js-Anwendung mit MySQL (MariaDB auf Raspberry Pi) und Prisma ORM bereitstellen ein Raspberry Pi. Darüber hinaus konfigurieren wir NGINX für Reverse-Proxying und verwenden Ngrok, um die Anwendung dem Internet zugänglich zu machen. Lasst uns eintauchen!
Tools-Übersicht
Raspberry Pi
Ein kostengünstiger Einplatinencomputer, auf dem ein Linux-basiertes Betriebssystem ausgeführt wird. Es eignet sich ideal zum Erstellen eines eigenen Servers für IoT- oder Webanwendungen.
Node.js & TypeScript
Node.js ist eine Laufzeitumgebung zum Ausführen von JavaScript auf dem Server, und TypeScript fügt JavaScript statische Typisierung hinzu, wodurch die Codebasis besser wartbar wird.
MySQL (MariaDB auf Raspberry Pi)
MariaDB ist ein beliebtes relationales Datenbanksystem, ein kompatibler Ersatz für MySQL und leicht genug für einen Raspberry Pi.
Prisma ORM
Ein Object-Relational Mapping (ORM)-Tool, das Datenbankinteraktionen mit einer typsicheren Abfragesprache und Schemamigrationen vereinfacht.
NGINX
Ein leistungsstarker HTTP-Server und Reverse-Proxy-Server. Es hilft dabei, den Datenverkehr an Ihre Node.js-Anwendung weiterzuleiten.
Ngrok
Ein Tunneling-Tool, das Ihre lokal gehosteten Anwendungen sicher und ohne komplexe Netzwerkkonfigurationen dem Internet zugänglich macht.
Voraussetzungen
- Ein funktionierender Raspberry Pi – Stellen Sie sicher, dass SSH auf dem Raspberry Pi aktiviert ist und Sie remote darauf zugreifen können.
- Github-Repository – Ihre Node.js TypeScript-Anwendung sollte zur einfachen Bereitstellung in einem GitHub-Repository gehostet werden.
- Ngrok-Konto – Erstellen Sie ein kostenloses Konto bei Ngrok, um ein Authentifizierungstoken für die Offenlegung Ihrer Raspberry Pi-App im Internet zu erhalten.
Raspberry Pi einrichten
-
Installieren Sie das Betriebssystem
Richten Sie Ihren Raspberry Pi mit einem Betriebssystem wie Raspberry Pi OS ein. Verwenden Sie den Raspberry Pi Imager, um andere Betriebssysteme zu finden, die mit Ihrem Raspberry Pi kompatibel sind.
-
Suchen Sie die IP-Adresse
Verwenden Sie ein Tool wie Angry IP Scanner, um die IP-Adresse Ihres Raspberry Pi zu ermitteln. Stellen Sie sicher, dass der Raspberry Pi mit demselben Netzwerk wie Ihr lokaler Computer verbunden ist.
-
Überprüfen Sie den Raspberry Pi-Status
ping <IP_ADDRESS_OF_RPI>
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopieren -
SSH in den Raspberry Pi
ssh <username>@<IP_ADDRESS_OF_RPI>
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopierenErsetzen Sie <Benutzername> mit dem Benutzernamen Ihres Raspberry Pi und <IP_ADDRESS_OF_RPI> mit der IP-Adresse und geben Sie dann das Passwort ein.
-
Aktualisieren Sie das System
sudo apt update && sudo apt upgrade
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopieren -
Git installieren
Überprüfen Sie, ob Git installiert ist. Wenn nicht, führen Sie den folgenden Befehl aus, um git
zu installierensudo apt install git
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopieren
Node.js installieren
Um Node js zu installieren, verwenden wir nvm (Node Version Manager). Es ermöglicht Ihnen, schnell verschiedene Versionen des Knotens über die Befehlszeile zu installieren und zu verwenden.
-
NVM installieren
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopieren -
Installation überprüfen
nvm --version
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopieren -
Installieren Sie die neueste LTS-Version von Node.js
nvm install --lts
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopieren -
Node.js- und npm-Installation überprüfen
node --version # v22.12.0 npm --version # 10.9.0
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopieren
MySQL (MariaDB) einrichten
Für Raspberry Pi OS werden wir MariaDB installieren.
-
Installieren Sie den MariaDB SQL Server
sudo apt install mariadb-server
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopieren -
Sichere MariaDB-Installation
sudo mysql_secure_installation
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenBefolgen Sie die Anweisungen, um Ihre Datenbank zu sichern.
- Geben Sie das aktuelle Root-Passwort ein: – Drücken Sie die Eingabetaste, wenn Sie aufgefordert werden, das aktuelle Passwort für den Root-Benutzer einzugeben (da es noch nicht festgelegt wurde).
- Legen Sie das Root-Passwort fest: – Geben Sie n ein, wenn Sie dazu aufgefordert werden, das Root-Passwort festzulegen (wir legen es später fest).
- Anonyme Benutzer entfernen: – Geben Sie Y ein, um anonyme Benutzer zu entfernen und die Sicherheit zu verbessern. (Zu Testzwecken können Sie n eingeben, um Benutzer anonym zu halten.)
- Root-Anmeldung aus der Ferne verbieten: – Geben Sie n ein, um die Root-Anmeldung aus der Ferne zuzulassen (optional, aber weniger sicher).
- Entfernen Sie die Testdatenbank: – Geben Sie y ein, um die Testdatenbank zu entfernen und darauf zuzugreifen. (Geben Sie n ein, wenn Sie es behalten möchten.)
-
Melden Sie sich beim MariaDB-Client an
sudo mysql
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopieren -
Richten Sie ein Root-Passwort für MariaDB ein
Zuerst müssen wir den Datenbankserver anweisen, die Gewährungstabellen neu zu laden.
MariaDB [(none)]> FLUSH PRIVILEGES;
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenÄndern Sie das Root-Passwort mit der folgenden Abfrage.
MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '<new_password>';
Nach dem Login kopierenNach dem Login kopierenErsetzen Sie <new_password> mit Ihrem eigenen Passwort.
Verwenden Sie den Exit-Befehl, um die MariaDB-CLI zu verlassen.
MariaDB [(none)]> exit; Bye
Nach dem Login kopierenNach dem Login kopieren -
Melden Sie sich mit dem Root-Benutzer beim MariaDB-Client an
ping <IP_ADDRESS_OF_RPI>
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopierenGeben Sie das Passwort für den Root-Benutzer ein.
Datenbank und Benutzer einrichten
Lassen Sie uns eine neue Datenbank und einen Benutzer erstellen. Wir gewähren dem neuen Benutzer alle Berechtigungen für die neue Datenbank, die wir erstellt haben.
-
Erstellen Sie eine Datenbank
ssh <username>@<IP_ADDRESS_OF_RPI>
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopieren -
Neuen Benutzer mit Passwort erstellen
sudo apt update && sudo apt upgrade
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopieren -
Neu erstelltem Benutzer Berechtigung gewähren
sudo apt install git
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopieren -
Berechtigungstabelle leeren
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopieren Beenden Sie den MySQL-Client mit dem Exit-Befehl.
-
Mit neuem Benutzer anmelden
nvm --version
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopierenGeben Sie das Passwort ein, das Sie beim Erstellen des Benutzers verwendet haben.
-
Überprüfen Sie, ob der Benutzer die Datenbank auflisten kann
nvm install --lts
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopieren
Das ist es! Wir werden diese Datenbank und diesen Benutzer in unserer Anwendung verwenden.
Richten Sie Ihre Node.js-Anwendung ein
-
Klonen Sie Ihr Github-Repository
node --version # v22.12.0 npm --version # 10.9.0
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopieren -
Navigieren Sie zu Ihrem Projekt-Repository
sudo apt install mariadb-server
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopieren -
Projektabhängigkeiten installieren
sudo mysql_secure_installation
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopieren -
TypeScript-Code kompilieren
sudo mysql
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopieren
Stellen Sie sicher, dass Sie die outDir-Eigenschaft in Ihrer tsconfig.json-Datei konfiguriert haben. Dies gibt das Verzeichnis an, in dem der kompilierte JavaScript-Code generiert wird. Standardmäßig ist es normalerweise auf dist eingestellt, Sie können es jedoch basierend auf Ihrer Projektstruktur anpassen.
Umgebungsvariablen einrichten (optional)
Wenn Ihr Projekt Umgebungsvariablen verwendet, müssen Sie diese auf Ihrem Raspberry Pi festlegen. Sie können eine .env-Datei im Stammverzeichnis Ihres Projekts erstellen, um alle Umgebungsvariablen zu speichern.
-
.env-Datei erstellen
MariaDB [(none)]> FLUSH PRIVILEGES;
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopieren -
.env-Datei aktualisieren
MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '<new_password>';
Nach dem Login kopierenNach dem Login kopieren -
Geben Sie Ihre Umgebungsvariablen ein
MariaDB [(none)]> exit; Bye
Nach dem Login kopierenNach dem Login kopierenErsetzen Sie die Felder <Benutzername>, <Passwort> und <Datenbankname> mit dem, das Sie in den vorherigen Schritten erstellt haben.
Speichern Sie die Datei, indem Sie Strg O drücken, drücken Sie dann die Eingabetaste und verlassen Sie den Editor mit Strg X.
Prisma-Schema migrieren
Wenn Sie Prisma verwenden, befinden sich alle Schemadateien im Verzeichnis prisma/schema. Wir werden diese Schemata nun in der Datenbank bereitstellen.
Führen Sie den folgenden Befehl aus
sudo mysql -u root -p
Dieser Befehl verwendet die in der .env-Datei bereitgestellte DATABASE_URL, um die Schemata in der Datenbank bereitzustellen. Sie können die Bereitstellung überprüfen, indem Sie sich beim MySQL-Client anmelden und den Befehl SHOW TABLES verwenden. um alle Tabellen aufzulisten.
PM2 einrichten
PM2 ist ein Produktionsprozessmanager für Node.js-Anwendungen, der bei der Verwaltung und Onlinehaltung der Anwendung hilft. Installieren Sie PM2, um Ihre Node.js-Anwendung zu verwalten.
ping <IP_ADDRESS_OF_RPI>
NGINX konfigurieren
-
NGINX installieren
ssh <username>@<IP_ADDRESS_OF_RPI>
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopieren -
Erstellen Sie eine Site-Konfiguration
sudo apt update && sudo apt upgrade
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopieren -
Fügen Sie den folgenden Code hinzu
sudo apt install git
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopierenHier ist eine Aufschlüsselung der einzelnen Teile:
listen 80; Diese Anweisung weist NGINX an, auf Port 80 zu lauschen, dem Standardport für HTTP-Verkehr.
server_name <your_raspberrypi_IP>; Dies gibt den Domänennamen oder die IP-Adresse Ihres Raspberry Pi an. Ersetzen Sie diese durch die tatsächliche IP-Adresse Ihres Raspberry Pi. NGINX wird auf Anfragen antworten, die an diese Adresse gesendet werden.
location / { ... } Dieser Block definiert, wie NGINX Anfragen an die Root-URL (/) verarbeiten soll. Dies teilt NGINX im Wesentlichen mit, dass jede Anfrage, die an den Root gestellt wird, an das Backend (Ihre Node.js-Anwendung) weitergeleitet werden soll, das auf dem angegebenen Port ausgeführt wird.
proxy_pass http://localhost:YOUR_NODE_JS_PORT; Dies ist die Schlüsselzeile, die eingehende Anfragen an Ihre Node.js-Anwendung weiterleitet. Ersetzen Sie YOUR_NODE_JS_PORT durch den tatsächlichen Port, auf dem Ihre Node.js-App ausgeführt wird (z. B. 5000). Die Anfragen werden an die Node.js-Anwendung gesendet, die auf demselben Computer (localhost) ausgeführt wird.
proxy_http_version 1.1; Dadurch wird die HTTP-Version für die Proxy-Verbindung auf 1.1 gesetzt, was eine bessere Handhabung bestimmter Funktionen wie WebSockets gewährleistet.
proxy_set_header Upgrade $http_upgrade; Mit diesem Header können WebSocket-Verbindungen aktualisiert werden, was für Echtzeitanwendungen wichtig ist.
proxy_set_header Connection 'upgrade'; Dieser Header wird zusammen mit dem Upgrade-Header verwendet, um WebSocket-Verbindungen zu verwalten und sicherzustellen, dass die Verbindung ordnungsgemäß von HTTP auf WebSocket aktualisiert wird.
proxy_set_header Host $host; Dadurch wird der ursprüngliche Host-Header von der Client-Anfrage an den Backend-Server übergeben. Dies ist nützlich für Anwendungen, die auf den ursprünglichen Host-Header angewiesen sind (z. B. für Routing oder virtuelles Hosting).
proxy_cache_bypass $http_upgrade; Dadurch wird sichergestellt, dass WebSocket-Verbindungen alle Caching-Mechanismen umgehen, sodass die Kommunikation in Echtzeit ohne Störungen durch Caching funktioniert.
Speichern Sie die Datei, indem Sie Strg O drücken, drücken Sie dann die Eingabetaste und verlassen Sie den Editor mit Strg X.
-
Aktivieren Sie die Site-Konfiguration
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopieren -
NGINX-Konfiguration testen
nvm --version
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopierenWenn der Test erfolgreich ist, sehen Sie etwa Folgendes:
ping <IP_ADDRESS_OF_RPI>
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopieren -
Starten Sie den NGINX-Server neu, um die Änderungen zu übernehmen
ssh <username>@<IP_ADDRESS_OF_RPI>
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopieren -
Prüfen Sie den NGINX-Serverstatus
sudo apt update && sudo apt upgrade
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopieren
Ausführen der Anwendung
Navigieren Sie zu Ihrem Projekt
-
Starten Sie Ihre Anwendung mit PM2
Wenn Sie ein Skript in package.json eingerichtet haben, verwenden Sie den folgenden Befehl:
sudo apt install git
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopierenOder Sie können Ihre Anwendung direkt über die Datei index.js in Ihrem dist-Verzeichnis ausführen:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopierenSie können die Protokolle auch mit dem folgenden Befehl überprüfen:
nvm --version
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopieren
Überprüfen Sie nun Ihre App, indem Sie die IP-Adresse Ihres Raspberry Pi in den Browser auf Ihrem lokalen Computer eingeben. Es sollte funktionieren. Stellen Sie sicher, dass sowohl Ihr lokaler Computer als auch Raspberry Pi mit demselben Netzwerk verbunden sind. Andernfalls funktioniert es nicht.
Machen Sie Ihre App mit Ngrok der Welt zugänglich
Nachdem Sie Ihre App nun auf dem Raspberry Pi bereitgestellt haben, können Sie nur noch über dasselbe Netzwerk auf die App zugreifen, in dem der Raspberry Pi ausgeführt wird. Um es dem Internet zugänglich zu machen, müssen wir die Portweiterleitung verwenden.
Sie können die Portweiterleitung mithilfe Ihrer Router-Einstellungen einrichten, aber in diesem Fall verwende ich ngrok. Ngrok ist nützlich für die Entwicklung und ermöglicht es uns, unsere Apps zu Testzwecken kostenlos auszuführen.
Stellen Sie sicher, dass Sie ein Konto erstellen, indem Sie https://dashboard.ngrok.com/login besuchen. Sie benötigen das Authentifizierungstoken, um ngrok auf dem Raspberry Pi zu konfigurieren.
-
Installieren Sie Ngrok
nvm install --lts
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopieren -
Fügen Sie Ihr Authentifizierungstoken zur ngrok-Konfigurationsdatei hinzu
node --version # v22.12.0 npm --version # 10.9.0
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopieren -
Standard-Nginx-Konfigurationsdatei deaktivieren
sudo apt install mariadb-server
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopieren -
NGINX-Konfiguration testen
sudo mysql_secure_installation
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopieren -
Starten Sie den NGINX-Server neu, um die Änderungen zu übernehmen
sudo mysql
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopieren -
Stellen Sie Ihre App online bereit
MariaDB [(none)]> FLUSH PRIVILEGES;
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenDies sollte eine URL wie https://xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx.ngrok-free.app/ bereitstellen, die den Datenverkehr an Ihre Node.js-App weiterleitet. Sie können von jedem anderen Netzwerk aus zu dieser URL navigieren und auf Ihre Anwendung zugreifen.
Zusammenfassung
In diesem Leitfaden haben wir erfolgreich eine TypeScript Node.js-Anwendung mit MySQL und Prisma auf einem Raspberry Pi bereitgestellt. Wir haben NGINX als Reverse-Proxy konfiguriert und Ngrok verwendet, um die Anwendung über das Internet zugänglich zu machen. Mit diesem Setup verfügen Sie über Ihren eigenen kostengünstigen, selbst gehosteten Entwicklungsserver.
Dieser Ansatz eignet sich perfekt zum Erlernen und Experimentieren mit der Bereitstellung von Full-Stack-Anwendungen und sammelt gleichzeitig wertvolle Erfahrungen in der Serververwaltung.
Lassen Sie mich wissen, wenn Sie Ihre Anwendung mithilfe dieses Leitfadens bereitstellen – ich würde gerne von Ihren Erfahrungen hören! ?
Das obige ist der detaillierte Inhalt vonStellen Sie eine Node.js-Anwendung mit MySQL und Prisma auf einem Raspberry Pi bereit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Reduzieren Sie die Verwendung des MySQL -Speichers im Docker

Wie verändern Sie eine Tabelle in MySQL mit der Änderungstabelleanweisung?

So lösen Sie das Problem der MySQL können die gemeinsame Bibliothek nicht öffnen

Führen Sie MySQL in Linux aus (mit/ohne Podman -Container mit Phpmyadmin)

Ausführen mehrerer MySQL-Versionen auf macOS: Eine Schritt-für-Schritt-Anleitung

Wie sichere ich mich MySQL gegen gemeinsame Schwachstellen (SQL-Injektion, Brute-Force-Angriffe)?

Wie konfiguriere ich die SSL/TLS -Verschlüsselung für MySQL -Verbindungen?
