Maison > base de données > tutoriel mysql > Déployer une application Node.js à l'aide de MySQL et Prisma sur un Raspberry Pi

Déployer une application Node.js à l'aide de MySQL et Prisma sur un Raspberry Pi

Linda Hamilton
Libérer: 2025-01-06 04:06:38
original
486 Les gens l'ont consulté

Deploy a Node.js Application Using MySQL and Prisma on a 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

  1. Un Raspberry Pi fonctionnel - Assurez-vous que SSH est activé sur le Raspberry Pi et que vous pouvez y accéder à distance.
  2. 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.
  3. 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

  1. 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.

  2. 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.

  3. Vérifier l'état du Raspberry Pi

    ping <IP_ADDRESS_OF_RPI>
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  4. SSH dans le Raspberry Pi

    ssh <username>@<IP_ADDRESS_OF_RPI>
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion

    Remplacer avec le nom d'utilisateur de votre Raspberry Pi et avec l'adresse IP puis entrez le mot de passe.

  5. Mettre à jour le système

    sudo apt update && sudo apt upgrade
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  6. Installer Git

    Vérifiez si git est installé. Sinon, exécutez la commande ci-dessous pour installer git

    sudo apt install git
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion

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.

  1. Installer NVM

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  2. Vérifier l'installation

    nvm --version
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  3. Installer la dernière version LTS de Node.js

    nvm install --lts
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  4. Vérifiez l'installation de Node.js et npm

    node --version
    # v22.12.0
    
    npm --version
    # 10.9.0
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion

Configuration de MySQL (MariaDB)

Pour Raspberry Pi OS, nous installerons MariaDB.

  1. Installer le serveur SQL MariaDB

    sudo apt install mariadb-server
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  2. Installation sécurisée de MariaDB

    sudo mysql_secure_installation
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion

    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.)
  3. Connexion au client MariaDB

    sudo mysql
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  4. 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;
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion

    Modifiez le mot de passe root avec la requête ci-dessous.

    MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '<new_password>';
    
    Copier après la connexion
    Copier après la connexion

    Remplacer avec votre propre mot de passe.

    Utilisez la commande exit pour quitter MariaDB CLI.

    MariaDB [(none)]> exit;
    Bye
    
    Copier après la connexion
    Copier après la connexion
  5. Connectez-vous au client MariaDB avec l'utilisateur root

    ping <IP_ADDRESS_OF_RPI>
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion

    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.

  1. Créer une base de données

    ssh <username>@<IP_ADDRESS_OF_RPI>
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  2. Créer un nouvel utilisateur avec mot de passe

    sudo apt update && sudo apt upgrade
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  3. Accorder le privilège au nouvel utilisateur créé

    sudo apt install git
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  4. Vinder la table des privilèges

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  5. Quitter le client MySQL à l'aide de la commande exit.

  6. Connexion avec un nouvel utilisateur

    nvm --version
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion

    Entrez le mot de passe que vous avez utilisé lors de la création de l'utilisateur.

  7. Vérifier que l'utilisateur peut répertorier la base de données

    nvm install --lts
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion

C'est ça ! Nous utiliserons cette base de données et cet utilisateur dans notre application.


Configurez votre application Node.js

  1. Clonez votre référentiel Github

    node --version
    # v22.12.0
    
    npm --version
    # 10.9.0
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  2. Accédez au référentiel de votre projet

    sudo apt install mariadb-server
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  3. Installer les dépendances du projet

    sudo mysql_secure_installation
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  4. Compiler le code TypeScript

    sudo mysql
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion

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.

  1. Créer un fichier .env

    MariaDB [(none)]> FLUSH PRIVILEGES;
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  2. Mettre à jour le fichier .env

    MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '<new_password>';
    
    Copier après la connexion
    Copier après la connexion
  3. Entrez vos variables d'environnement

    MariaDB [(none)]> exit;
    Bye
    
    Copier après la connexion
    Copier après la connexion

    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
Copier après la connexion

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>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Configuration de NGINX

  1. Installer NGINX

    ssh <username>@<IP_ADDRESS_OF_RPI>
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  2. Créer une configuration de site

    sudo apt update && sudo apt upgrade
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  3. Ajoutez le code ci-dessous

    sudo apt install git
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion

    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.

  4. Activer la configuration du site

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  5. Tester la configuration NGINX

    nvm --version
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion

    Si le test réussit, vous verrez quelque chose comme ci-dessous :

    ping <IP_ADDRESS_OF_RPI>
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  6. Redémarrez le serveur NGINX pour appliquer les modifications

    ssh <username>@<IP_ADDRESS_OF_RPI>
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  7. Vérifier l'état du serveur NGINX

    sudo apt update && sudo apt upgrade
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion

Exécution de l'application

  1. Accédez à votre projet

  2. 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
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion

    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
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion

    Vous pouvez également consulter les journaux à l'aide de la commande ci-dessous :

    nvm --version
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion

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.

  1. Installer Ngrok

    nvm install --lts
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  2. Ajoutez votre jeton d'authentification au fichier de configuration ngrok

    node --version
    # v22.12.0
    
    npm --version
    # 10.9.0
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  3. Désactiver le fichier de configuration nginx par défaut

    sudo apt install mariadb-server
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  4. Tester la configuration NGINX

    sudo mysql_secure_installation
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  5. Redémarrez le serveur NGINX pour appliquer les modifications

    sudo mysql
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  6. Déployez votre application en ligne

    MariaDB [(none)]> FLUSH PRIVILEGES;
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion

    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!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal