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 !
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.
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>
SSH dans le Raspberry Pi
ssh <username>@<IP_ADDRESS_OF_RPI>
Remplacer
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
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
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.
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>';
Remplacer
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>
Entrez le mot de passe de l'utilisateur root.
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>
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.
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.
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>';
Entrez vos variables d'environnement
MariaDB [(none)]> exit; Bye
Remplacez les champs
Enregistrez le fichier en appuyant sur Ctrl O, puis appuyez sur Entrée et quittez l'éditeur en utilisant Ctrl X.
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.
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>
Installer NGINX
ssh <username>@<IP_ADDRESS_OF_RPI>
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
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>
Redémarrez le serveur NGINX pour appliquer les modifications
ssh <username>@<IP_ADDRESS_OF_RPI>
Vérifier l'état du serveur NGINX
sudo apt update && sudo apt upgrade
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.
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.
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!