


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!
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> </ip_address_of_rpi>
-
SSH in den Raspberry Pi
ssh <username>@<ip_address_of_rpi> </ip_address_of_rpi></username>
Ersetzen Sie
mit dem Benutzernamen Ihres Raspberry Pi und mit der IP-Adresse und geben Sie dann das Passwort ein. -
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 installierensudo apt install git
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
-
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
MySQL (MariaDB) einrichten
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.
- 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
-
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>'; </new_password>
Ersetzen Sie
mit Ihrem eigenen Passwort. 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> </ip_address_of_rpi>
Geben 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> </ip_address_of_rpi></username>
-
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.
Richten Sie Ihre Node.js-Anwendung ein
-
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.
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;
-
.env-Datei aktualisieren
MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '<new_password>'; </new_password>
-
Geben Sie Ihre Umgebungsvariablen ein
MariaDB [(none)]> exit; Bye
Ersetzen Sie die Felder
, und 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> </ip_address_of_rpi>
NGINX konfigurieren
-
NGINX installieren
ssh <username>@<ip_address_of_rpi> </ip_address_of_rpi></username>
-
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
; 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
-
NGINX-Konfiguration testen
nvm --version
Wenn der Test erfolgreich ist, sehen Sie etwa Folgendes:
ping <ip_address_of_rpi> </ip_address_of_rpi>
-
Starten Sie den NGINX-Server neu, um die Änderungen zu übernehmen
ssh <username>@<ip_address_of_rpi> </ip_address_of_rpi></username>
-
Prüfen Sie den NGINX-Serverstatus
sudo apt update && sudo apt upgrade
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
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.
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
-
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.
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!

Der Hauptunterschied zwischen MySQL und SQLite ist das Design-Konzept und die Nutzungsszenarien: 1. MySQL eignet sich für große Anwendungen und Lösungen auf Unternehmensebene, die hohe Leistung und hohe Parallelität unterstützen. 2. SQLite ist für mobile Anwendungen und Desktop -Software geeignet, leicht und leicht einzubetten.

Indizes in MySQL sind eine geordnete Struktur einer oder mehrerer Spalten in einer Datenbanktabelle, die zur Beschleunigung der Datenabnahme verwendet wird. 1) Indexe verbessern die Abfragegeschwindigkeit durch Reduzierung der Menge an gescannten Daten. 2) B-Tree-Index verwendet eine ausgewogene Baumstruktur, die für die Reichweite und Sortierung geeignet ist. 3) Verwenden Sie CreateIndex -Anweisungen, um Indizes zu erstellen, z. 4) Zusammengesetzte Indizes können Multi-Säulen-Abfragen optimieren, z. 5) Erklärung verwenden, um Abfragepläne zu analysieren und zu vermeiden

Durch die Verwendung von Transaktionen in MySQL wird die Datenkonsistenz gewährleistet. 1) Starten Sie die Transaktion über starttransaction und führen Sie dann SQL -Operationen aus und senden Sie sie mit Commit oder Rollback. 2) Setzen Sie SavePoint, um einen Speicherpunkt zu setzen, um teilweise Rollback zu ermöglichen. 3) Vorschläge zur Leistungsoptimierung umfassen die Verkürzung der Transaktionszeit, die Vermeidung großer Abfragen und die Verwendung von Isolationsniveaus.

Szenarien, in denen PostgreSQL anstelle von MySQL ausgewählt wird, umfassen: 1) komplexe Abfragen und erweiterte SQL -Funktionen, 2) strenge Datenintegrität und Säurekonformität, 3) Fortgeschrittene räumliche Funktionen erforderlich, und 4) Eine hohe Leistung ist bei der Verarbeitung großer Datensätze erforderlich. PostgreSQL funktioniert in diesen Aspekten gut und eignet sich für Projekte, die eine komplexe Datenverarbeitung und eine hohe Datenintegrität erfordern.

Die Sicherheit der MySQL -Datenbank kann durch folgende Maßnahmen erreicht werden: 1. Benutzerberechtigungsverwaltung: Strikt auf Zugriffsrechte durch CREATEUSER- und GRANT -Befehle kontrollieren. 2. Verschlüsselte Übertragung: Konfigurieren Sie SSL/TLS, um die Sicherheit der Datenübertragung zu gewährleisten. 3.. Datenbanksicherung und Wiederherstellung: Verwenden Sie MySQLDUMP oder MySQLPump, um regelmäßig Daten zu sichern. 4. Fortgeschrittene Sicherheitsrichtlinie: Verwenden Sie eine Firewall, um den Zugriff einzuschränken und die Protokollierungsvorgänge zu aktivieren. 5. Leistungsoptimierung und Best Practices: Berücksichtigung von Sicherheit und Leistung durch Indexierung und Abfrageoptimierung und regelmäßige Wartung.

Wie kann ich die MySQL -Leistung effektiv überwachen? Verwenden Sie Tools wie MySQLADMIN, ShowGlobalstatus, Perconamonitoring and Management (PMM) und MySQL Enterprisemonitor. 1. Verwenden Sie MySQLADMIN, um die Anzahl der Verbindungen anzuzeigen. 2. Verwenden Sie ShowglobalStatus, um die Abfragenummer anzuzeigen. 3.PMM bietet detaillierte Leistungsdaten und grafische Schnittstelle. 4.MysqlenterPrisemonitor bietet reichhaltige Überwachungsfunktionen und Alarmmechanismen.

Der Unterschied zwischen MySQL und SQLServer ist: 1) MySQL ist Open Source und für Web- und Embedded-Systeme geeignet, 2) SQLServer ist ein kommerzielles Produkt von Microsoft und für Anwendungen auf Unternehmensebene geeignet. Es gibt signifikante Unterschiede zwischen den beiden in der Speicher -Engine-, der Leistungsoptimierung und den Anwendungsszenarien. Bei der Auswahl müssen Sie die Projektgröße und die zukünftige Skalierbarkeit berücksichtigen.

In Anwendungsszenarien auf Unternehmensebene, die eine hohe Verfügbarkeit, eine erweiterte Sicherheit und eine gute Integration erfordern, sollte SQLServer anstelle von MySQL ausgewählt werden. 1) SQLServer bietet Funktionen auf Unternehmensebene wie hohe Verfügbarkeit und fortschrittliche Sicherheit. 2) Es ist eng in Microsoft -Ökosysteme wie Visualstudio und PowerBi integriert. 3) SQLServer führt hervorragende Leistungsoptimierung durch und unterstützt speicheroptimierte Tabellen und Spaltenspeicherindizes.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

MantisBT
Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

EditPlus chinesische Crack-Version
Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Sicherer Prüfungsbrowser
Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)