


Déployer une application Node.js à l'aide de MySQL et Prisma sur un Raspberry Pi
Le déploiement d'applications est devenu de plus en plus accessible, avec une gamme d'options d'hébergement gratuites et payantes telles que Render, AWS et DigitalOcean. Cependant, pour les développeurs qui souhaitent apprendre, expérimenter et déployer des applications sans frais d'hébergement récurrents, un Raspberry Pi offre une excellente alternative. Cet appareil compact mais puissant vous permet de créer votre propre serveur basé sur Linux pour héberger des applications Web.
Dans ce blog, nous explorerons comment déployer une application TypeScript Node.js à l'aide de MySQL (MariaDB sur Raspberry Pi) et Prisma ORM sur un Raspberry Pi. De plus, nous allons configurer NGINX pour le proxy inverse et utiliser Ngrok pour exposer l'application à Internet. Allons-y !
Présentation des outils
Pi aux Framboises
Un ordinateur monocarte à faible coût qui exécute un système d'exploitation basé sur Linux. C’est idéal pour créer votre propre serveur pour l’IoT ou les applications Web.
Node.js & TypeScript
Node.js est un environnement d'exécution pour exécuter JavaScript sur le serveur, et TypeScript ajoute un typage statique à JavaScript, rendant la base de code plus maintenable.
MySQL (MariaDB sur Raspberry Pi)
Système de base de données relationnelle populaire, MariaDB est un remplacement compatible pour MySQL et est suffisamment léger pour un Raspberry Pi.
Prisma ORM
Un outil de mappage objet-relationnel (ORM) qui simplifie les interactions avec les bases de données avec un langage de requête de type sécurisé et des migrations de schémas.
NGINX
Un serveur HTTP et un serveur proxy inverse hautes performances. Il permet d'acheminer le trafic vers votre application Node.js.
Ngrok
Un outil de tunneling qui expose vos applications hébergées localement à Internet en toute sécurité sans configuration réseau complexe.
Conditions préalables
- Un Raspberry Pi fonctionnel - Assurez-vous que SSH est activé sur le Raspberry Pi et que vous pouvez y accéder à distance.
- Dépôt Github - Votre application Node.js TypeScript doit être hébergée dans un référentiel GitHub pour un déploiement facile.
- Compte Ngrok - Créez un compte gratuit sur Ngrok pour obtenir un jeton d'authentification permettant d'exposer votre application Raspberry Pi à Internet.
Configuration du Raspberry Pi
-
Installer le système d'exploitation
Configurez votre Raspberry Pi avec un système d'exploitation comme Raspberry Pi OS. Utilisez le Raspberry Pi Imager pour trouver un autre système d'exploitation compatible avec votre Raspberry Pi.
-
Trouver l'adresse IP
Utilisez un outil comme Angry IP Scanner pour découvrir l’adresse IP de votre Raspberry Pi. Assurez-vous que le Raspberry Pi est connecté au même réseau que votre machine locale.
-
Vérifier l'état du Raspberry Pi
ping <ip_address_of_rpi> </ip_address_of_rpi>
-
SSH dans le Raspberry Pi
ssh <username>@<ip_address_of_rpi> </ip_address_of_rpi></username>
Remplacer
avec le nom d'utilisateur de votre Raspberry Pi et avec l'adresse IP puis entrez le mot de passe. -
Mettre à jour le système
sudo apt update && sudo apt upgrade
-
Installer Git
Vérifiez si git est installé. Sinon, exécutez la commande ci-dessous pour installer git
sudo apt install git
Installation de Node.js
Pour installer node js, nous utiliserons nvm (Node Version Manager). Il vous permet d'installer et d'utiliser rapidement différentes versions de nœud via la ligne de commande.
-
Installer NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
-
Vérifier l'installation
nvm --version
-
Installer la dernière version LTS de Node.js
nvm install --lts
-
Vérifiez l'installation de Node.js et npm
node --version # v22.12.0 npm --version # 10.9.0
Configuration de MySQL (MariaDB)
Pour Raspberry Pi OS, nous installerons MariaDB.
-
Installer le serveur SQL MariaDB
sudo apt install mariadb-server
-
Installation sécurisée de MariaDB
sudo mysql_secure_installation
Suivez les instructions pour sécuriser votre base de données.
- Entrez le mot de passe root actuel : - Appuyez sur Entrée lorsqu'on vous demande de saisir le mot de passe actuel de l'utilisateur root (car il n'a pas encore été défini).
- Définissez le mot de passe root : - Tapez n lorsque vous êtes invité à définir le mot de passe root (nous le définirons plus tard).
- Supprimer les utilisateurs anonymes : - Tapez Y pour supprimer les utilisateurs anonymes et améliorer la sécurité. (À des fins de test, vous pouvez taper n pour garder les utilisateurs anonymes.)
- Interdire la connexion root à distance : - Tapez n pour autoriser la connexion root à distance (facultatif mais moins sécurisé).
- Supprimer la base de données de test : - Tapez y pour supprimer la base de données de test et y accéder. (Tapez n si vous souhaitez le conserver.)
-
Connexion au client MariaDB
sudo mysql
-
Configurer un mot de passe root pour MariaDB
Tout d'abord, nous devons dire au serveur de base de données de recharger les tables de subventions.
MariaDB [(none)]> FLUSH PRIVILEGES;
Modifiez le mot de passe root avec la requête ci-dessous.
MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '<new_password>'; </new_password>
Remplacer
avec votre propre mot de passe. Utilisez la commande exit pour quitter MariaDB CLI.
MariaDB [(none)]> exit; Bye
-
Connectez-vous au client MariaDB avec l'utilisateur root
ping <ip_address_of_rpi> </ip_address_of_rpi>
Entrez le mot de passe de l'utilisateur root.
Configuration de la base de données et de l'utilisateur
Créons une nouvelle base de données et un utilisateur. Nous accorderons tous les privilèges au nouvel utilisateur pour la nouvelle base de données que nous avons créée.
-
Créer une base de données
ssh <username>@<ip_address_of_rpi> </ip_address_of_rpi></username>
-
Créer un nouvel utilisateur avec mot de passe
sudo apt update && sudo apt upgrade
-
Accorder le privilège au nouvel utilisateur créé
sudo apt install git
-
Vinder la table des privilèges
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
Quitter le client MySQL à l'aide de la commande exit.
-
Connexion avec un nouvel utilisateur
nvm --version
Entrez le mot de passe que vous avez utilisé lors de la création de l'utilisateur.
-
Vérifier que l'utilisateur peut répertorier la base de données
nvm install --lts
C'est ça ! Nous utiliserons cette base de données et cet utilisateur dans notre application.
Configurez votre application Node.js
-
Clonez votre référentiel Github
node --version # v22.12.0 npm --version # 10.9.0
-
Accédez au référentiel de votre projet
sudo apt install mariadb-server
-
Installer les dépendances du projet
sudo mysql_secure_installation
-
Compiler le code TypeScript
sudo mysql
Assurez-vous d'avoir configuré la propriété outDir dans votre fichier tsconfig.json. Ceci spécifie le répertoire dans lequel le code JavaScript compilé sera généré. Par défaut, il est généralement défini sur dist, mais vous pouvez le personnaliser en fonction de la structure de votre projet.
Configuration des variables d'environnement (Facultatif)
Si votre projet utilise des variables d'environnement, vous devez les définir sur votre Raspberry Pi. Vous pouvez créer un fichier .env dans le répertoire racine de votre projet pour stocker toutes les variables d'environnement.
-
Créer un fichier .env
MariaDB [(none)]> FLUSH PRIVILEGES;
-
Mettre à jour le fichier .env
MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '<new_password>'; </new_password>
-
Entrez vos variables d'environnement
MariaDB [(none)]> exit; Bye
Remplacez les champs
, et avec celui que vous avez créé lors des étapes précédentes. Enregistrez le fichier en appuyant sur Ctrl O, puis appuyez sur Entrée et quittez l'éditeur en utilisant Ctrl X.
Migrer le schéma Prisma
Si vous utilisez Prisma, tous les fichiers de schéma seront situés dans le répertoire prisma/schema. Nous allons maintenant déployer ces schémas dans la base de données.
Exécutez la commande ci-dessous
sudo mysql -u root -p
Cette commande utilisera le DATABASE_URL fourni dans le fichier .env pour déployer les schémas dans la base de données. Vous pouvez vérifier le déploiement en vous connectant au client MySQL et en utilisant la commande SHOW TABLES ; pour lister toutes les tables.
Configuration de PM2
PM2 est un gestionnaire de processus de production pour les applications Node.js qui aide à gérer et à maintenir l'application en ligne. Installez PM2 pour gérer votre application Node.js.
ping <ip_address_of_rpi> </ip_address_of_rpi>
Configuration de NGINX
-
Installer NGINX
ssh <username>@<ip_address_of_rpi> </ip_address_of_rpi></username>
-
Créer une configuration de site
sudo apt update && sudo apt upgrade
-
Ajoutez le code ci-dessous
sudo apt install git
Voici une répartition de chaque partie :
listen 80; Cette directive indique à NGINX d'écouter sur le port 80, qui est le port par défaut pour le trafic HTTP.
server_name
; Ceci spécifie le nom de domaine ou l'adresse IP de votre Raspberry Pi. Remplacez par l'adresse IP réelle de votre Raspberry Pi. NGINX répondra aux demandes envoyées à cette adresse.location / { ... } Ce bloc définit comment NGINX doit gérer les requêtes adressées à l'URL racine (/). Essentiellement, cela indique à NGINX que chaque fois qu'une requête est adressée à la racine, elle doit être transmise au backend (votre application Node.js) exécuté sur le port spécifié.
proxy_pass http://localhost:YOUR_NODE_JS_PORT; Il s'agit de la ligne clé qui transmet les requêtes entrantes à votre application Node.js. Remplacez YOUR_NODE_JS_PORT par le port réel sur lequel votre application Node.js est exécutée (par exemple, 5000). Les requêtes seront envoyées à l'application Node.js exécutée sur la même machine (localhost).
proxy_http_version 1.1; Ceci définit la version HTTP à 1.1 pour la connexion proxy, ce qui garantit une meilleure gestion de certaines fonctionnalités comme les WebSockets.
proxy_set_header Upgrade $http_upgrade; Cet en-tête permet de mettre à niveau les connexions WebSocket, ce qui est important pour les applications temps réel.
proxy_set_header Connection 'upgrade'; Cet en-tête est utilisé avec l'en-tête Upgrade pour gérer les connexions WebSocket, garantissant que la connexion est correctement mise à niveau de HTTP vers WebSocket.
proxy_set_header Host $host; Ceci transmet l'en-tête Host d'origine de la demande du client au serveur backend. Ceci est utile pour les applications qui s'appuient sur l'en-tête Host d'origine (par exemple, pour le routage ou l'hébergement virtuel).
proxy_cache_bypass $http_upgrade; Cela garantit que les connexions WebSocket contournent tout mécanisme de mise en cache, permettant ainsi à la communication en temps réel de fonctionner sans interférence de la mise en cache.
Enregistrez le fichier en appuyant sur Ctrl O, puis appuyez sur Entrée et quittez l'éditeur en utilisant Ctrl X.
-
Activer la configuration du site
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
-
Tester la configuration NGINX
nvm --version
Si le test réussit, vous verrez quelque chose comme ci-dessous :
ping <ip_address_of_rpi> </ip_address_of_rpi>
-
Redémarrez le serveur NGINX pour appliquer les modifications
ssh <username>@<ip_address_of_rpi> </ip_address_of_rpi></username>
-
Vérifier l'état du serveur NGINX
sudo apt update && sudo apt upgrade
Exécution de l'application
Accédez à votre projet
-
Démarrez votre application à l'aide de PM2
Si vous avez configuré un script dans package.json, utilisez la commande ci-dessous :
sudo apt install git
Ou, vous pouvez exécuter directement votre application en utilisant le fichier index.js dans votre répertoire dist :
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
Vous pouvez également consulter les journaux à l'aide de la commande ci-dessous :
nvm --version
Maintenant, vérifiez votre application en saisissant l'adresse IP de votre Raspberry Pi dans le navigateur de votre ordinateur local. Cela devrait fonctionner. Assurez-vous que votre machine locale et votre Raspberry Pi sont connectés au même réseau ; sinon, ça ne marchera pas.
Exposer votre application au monde à l'aide de Ngrok
Maintenant que vous avez déployé votre application sur le Raspberry Pi, vous ne pouvez accéder à l'application qu'à partir du même réseau sur lequel le Raspberry Pi est exécuté. Pour l'exposer à Internet, nous devons utiliser la redirection de port.
Vous pouvez configurer la redirection de port en utilisant les paramètres de votre routeur, mais dans ce cas, j'utiliserai ngrok. Ngrok est utile pour le développement, nous permettant d'exécuter gratuitement nos applications à des fins de test.
Assurez-vous de créer un compte en visitant https://dashboard.ngrok.com/login. Vous aurez besoin du jeton d'authentification pour configurer ngrok sur le Raspberry Pi.
-
Installer Ngrok
nvm install --lts
-
Ajoutez votre jeton d'authentification au fichier de configuration ngrok
node --version # v22.12.0 npm --version # 10.9.0
-
Désactiver le fichier de configuration nginx par défaut
sudo apt install mariadb-server
-
Tester la configuration NGINX
sudo mysql_secure_installation
-
Redémarrez le serveur NGINX pour appliquer les modifications
sudo mysql
-
Déployez votre application en ligne
MariaDB [(none)]> FLUSH PRIVILEGES;
Cela devrait fournir une URL telle que https://xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx.ngrok-free.app/ qui transfère le trafic vers votre application Node.js. Vous pouvez accéder à cette URL depuis n'importe quel autre réseau et accéder à votre application.
Résumé
Dans ce guide, nous avons déployé avec succès une application TypeScript Node.js avec MySQL et Prisma sur un Raspberry Pi. Nous avons configuré NGINX comme proxy inverse et utilisé Ngrok pour rendre l'application accessible sur Internet. Avec cette configuration, vous disposez de votre propre serveur de développement auto-hébergé et rentable.
Cette approche est parfaite pour apprendre et expérimenter le déploiement d'applications full-stack, tout en acquérant une expérience précieuse dans la gestion de serveurs.
Faites-moi savoir si vous déployez votre application à l'aide de ce guide : j'aimerais connaître votre expérience ! ?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

MySQL est un système de gestion de la base de données relationnel open source, principalement utilisé pour stocker et récupérer les données rapidement et de manière fiable. Son principe de travail comprend les demandes des clients, la résolution de requête, l'exécution des requêtes et les résultats de retour. Des exemples d'utilisation comprennent la création de tables, l'insertion et la question des données et les fonctionnalités avancées telles que les opérations de jointure. Les erreurs communes impliquent la syntaxe SQL, les types de données et les autorisations, et les suggestions d'optimisation incluent l'utilisation d'index, les requêtes optimisées et la partition de tables.

MySQL est un système de gestion de base de données relationnel open source adapté au stockage, à la gestion, à la requête et à la sécurité des données. 1. Il prend en charge une variété de systèmes d'exploitation et est largement utilisé dans les applications Web et autres domaines. 2. Grâce à l'architecture client-serveur et à différents moteurs de stockage, MySQL traite efficacement les données. 3. L'utilisation de base comprend la création de bases de données et de tables, d'insertion, d'interrogation et de mise à jour des données. 4. L'utilisation avancée implique des requêtes complexes et des procédures stockées. 5. Les erreurs courantes peuvent être déboguées par le biais de la déclaration Explication. 6. L'optimisation des performances comprend l'utilisation rationnelle des indices et des instructions de requête optimisées.

MySQL est choisi pour ses performances, sa fiabilité, sa facilité d'utilisation et son soutien communautaire. 1.MySQL fournit des fonctions de stockage et de récupération de données efficaces, prenant en charge plusieurs types de données et opérations de requête avancées. 2. Adoptez l'architecture client-serveur et plusieurs moteurs de stockage pour prendre en charge l'optimisation des transactions et des requêtes. 3. Facile à utiliser, prend en charge une variété de systèmes d'exploitation et de langages de programmation. 4. Avoir un solide soutien communautaire et fournir des ressources et des solutions riches.

Les mécanismes de verrouillage d'InnoDB incluent des verrous partagés, des verrous exclusifs, des verrous d'intention, des verrous d'enregistrement, des serrures d'écart et des mèches suivantes. 1. Le verrouillage partagé permet aux transactions de lire des données sans empêcher d'autres transactions de lire. 2. Lock exclusif empêche les autres transactions de lire et de modifier les données. 3. Le verrouillage de l'intention optimise l'efficacité de verrouillage. 4. Enregistrement de l'indice de verrouillage d'enregistrement. 5. Écart d'enregistrement de l'indice des verrous de verrouillage de l'espace. 6. Le verrouillage de la touche suivante est une combinaison de verrouillage des enregistrements et de verrouillage de l'écart pour garantir la cohérence des données.

Les principales raisons des mauvaises performances de requête MySQL incluent le non-utilisation d'index, la mauvaise sélection du plan d'exécution par l'optimiseur de requête, la conception de table déraisonnable, le volume de données excessif et la concurrence de verrouillage. 1. Aucun indice ne provoque une requête lente et l'ajout d'index ne peut améliorer considérablement les performances. 2. Utilisez la commande Expliquez pour analyser le plan de requête et découvrez l'erreur Optimizer. 3. Reconstruire la structure de la table et l'optimisation des conditions de jointure peut améliorer les problèmes de conception de la table. 4. Lorsque le volume de données est important, les stratégies de partitionnement et de division de table sont adoptées. 5. Dans un environnement de concurrence élevé, l'optimisation des transactions et des stratégies de verrouillage peut réduire la concurrence des verrous.

Dans l'optimisation de la base de données, les stratégies d'indexation doivent être sélectionnées en fonction des exigences de requête: 1. Lorsque la requête implique plusieurs colonnes et que l'ordre des conditions est fixe, utilisez des index composites; 2. Lorsque la requête implique plusieurs colonnes mais que l'ordre des conditions n'est pas fixe, utilisez plusieurs index mono-colonnes. Les index composites conviennent à l'optimisation des requêtes multi-colonnes, tandis que les index mono-colonnes conviennent aux requêtes à colonne unique.

Pour optimiser la requête lente MySQL, SlowQueryLog et Performance_Schema doivent être utilisées: 1. Activer SlowQueryLog et définir des seuils pour enregistrer la requête lente; 2. Utilisez Performance_schema pour analyser les détails de l'exécution de la requête, découvrir les goulots d'étranglement des performances et optimiser.

MySQL et SQL sont des compétences essentielles pour les développeurs. 1.MySQL est un système de gestion de base de données relationnel open source, et SQL est le langage standard utilisé pour gérer et exploiter des bases de données. 2.MySQL prend en charge plusieurs moteurs de stockage via des fonctions de stockage et de récupération de données efficaces, et SQL termine des opérations de données complexes via des instructions simples. 3. Les exemples d'utilisation comprennent les requêtes de base et les requêtes avancées, telles que le filtrage et le tri par condition. 4. Les erreurs courantes incluent les erreurs de syntaxe et les problèmes de performances, qui peuvent être optimisées en vérifiant les instructions SQL et en utilisant des commandes Explication. 5. Les techniques d'optimisation des performances incluent l'utilisation d'index, d'éviter la numérisation complète de la table, d'optimiser les opérations de jointure et d'améliorer la lisibilité du code.


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Télécharger la version Mac de l'éditeur Atom
L'éditeur open source le plus populaire

MantisBT
Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

ZendStudio 13.5.1 Mac
Puissant environnement de développement intégré PHP

Version crackée d'EditPlus en chinois
Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

Listes Sec
SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.