Heim >Datenbank >MySQL-Tutorial >Stellen Sie eine Node.js-Anwendung mit MySQL und Prisma auf einem Raspberry Pi bereit
Die 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!
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.
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>
SSH in den Raspberry Pi
ssh <username>@<IP_ADDRESS_OF_RPI>
Ersetzen Sie
Aktualisieren Sie das System
sudo apt update && sudo apt upgrade
Git installieren
Überprüfen Sie, ob Git installiert ist. Wenn nicht, führen Sie den folgenden Befehl aus, um git
zu installieren
sudo apt install git
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
Installation überprüfen
nvm --version
Installieren Sie die neueste LTS-Version von Node.js
nvm install --lts
Node.js- und npm-Installation überprüfen
node --version # v22.12.0 npm --version # 10.9.0
Für Raspberry Pi OS werden wir MariaDB installieren.
Installieren Sie den MariaDB SQL Server
sudo apt install mariadb-server
Sichere MariaDB-Installation
sudo mysql_secure_installation
Befolgen Sie die Anweisungen, um Ihre Datenbank zu sichern.
Melden Sie sich beim MariaDB-Client an
sudo mysql
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;
Ändern Sie das Root-Passwort mit der folgenden Abfrage.
MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '<new_password>';
Ersetzen Sie
Verwenden Sie den Exit-Befehl, um die MariaDB-CLI zu verlassen.
MariaDB [(none)]> exit; Bye
Melden Sie sich mit dem Root-Benutzer beim MariaDB-Client an
ping <IP_ADDRESS_OF_RPI>
Geben Sie das Passwort für den Root-Benutzer ein.
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>
Neuen Benutzer mit Passwort erstellen
sudo apt update && sudo apt upgrade
Neu erstelltem Benutzer Berechtigung gewähren
sudo apt install git
Berechtigungstabelle leeren
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
Beenden Sie den MySQL-Client mit dem Exit-Befehl.
Mit neuem Benutzer anmelden
nvm --version
Geben 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
Das ist es! Wir werden diese Datenbank und diesen Benutzer in unserer Anwendung verwenden.
Klonen Sie Ihr Github-Repository
node --version # v22.12.0 npm --version # 10.9.0
Navigieren Sie zu Ihrem Projekt-Repository
sudo apt install mariadb-server
Projektabhängigkeiten installieren
sudo mysql_secure_installation
TypeScript-Code kompilieren
sudo mysql
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.
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;
.env-Datei aktualisieren
MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '<new_password>';
Geben Sie Ihre Umgebungsvariablen ein
MariaDB [(none)]> exit; Bye
Ersetzen Sie die Felder
Speichern Sie die Datei, indem Sie Strg O drücken, drücken Sie dann die Eingabetaste und verlassen Sie den Editor mit Strg X.
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 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 installieren
ssh <username>@<IP_ADDRESS_OF_RPI>
Erstellen Sie eine Site-Konfiguration
sudo apt update && sudo apt upgrade
Fügen Sie den folgenden Code hinzu
sudo apt install git
Hier 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
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
NGINX-Konfiguration testen
nvm --version
Wenn der Test erfolgreich ist, sehen Sie etwa Folgendes:
ping <IP_ADDRESS_OF_RPI>
Starten Sie den NGINX-Server neu, um die Änderungen zu übernehmen
ssh <username>@<IP_ADDRESS_OF_RPI>
Prüfen Sie den NGINX-Serverstatus
sudo apt update && sudo apt upgrade
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
Oder 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
Sie können die Protokolle auch mit dem folgenden Befehl überprüfen:
nvm --version
Ü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.
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
Fügen Sie Ihr Authentifizierungstoken zur ngrok-Konfigurationsdatei hinzu
node --version # v22.12.0 npm --version # 10.9.0
Standard-Nginx-Konfigurationsdatei deaktivieren
sudo apt install mariadb-server
NGINX-Konfiguration testen
sudo mysql_secure_installation
Starten Sie den NGINX-Server neu, um die Änderungen zu übernehmen
sudo mysql
Stellen Sie Ihre App online bereit
MariaDB [(none)]> FLUSH PRIVILEGES;
Dies 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.
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!