Salut tout le monde, aujourd'hui, je souhaite faire un didacticiel sur l'une de mes façons préférées de déployer une API REST rapide, à l'aide de NodeJS/Express, sur un serveur Amazon EC2. Cette technique permet essentiellement à votre serveur EC2 de répondre aux modifications apportées à votre référentiel GitHub.
Créez un nouveau répertoire sur votre machine pour qu'une application NodeJS/Express vive. J'appelle ma rekognition
Ouvrez un terminal et exécutez cette commande pour initialiser un package.json npm init -y
Installer express.js npm i express
Créez un serveur express de base avec un « hello world » sur la route par défaut
const express = require('express'); const app = express(); const port = 3000; app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(port, () => { console.log(`Example app listening at http://localhost:${port}`); });
Testez pour vous assurer que vous voyez « Hello World ! » sur http://localhost:3000/
Bon travail, première étape terminée ! 💪
Initialisez un dépôt Git dans votre répertoire et effectuez votre premier commit -
git init git add . git commit -m "First commit"
Créez un référentiel distant sur votre compte GitHub
Ajoutez le nouveau dépôt comme origine et poussez votre branche.
git remote add origin <REMOTE_REPOSITORY_URL> git push -u origin master
Remplacez <REMOTE_REPOSITORY_URL>
par le lien vers le dépôt distant que vous venez de créer.
Vous devrez peut-être modifier les paramètres de votre référentiel pour utiliser « master » comme branche par défaut au lieu de « main ».
Après cela, vous pouvez supprimer la branche « principale ».
Étape 2 : terminer ! On cuisine au gaz ⛽️
Voici les étapes pour lancer votre instance EC2 :
Accédez au tableau de bord EC2 et lancez une nouvelle instance.
Choisissez une AMI (Amazon Machine Image) appropriée ; J'utilise Amazon Linux 2.
Testons maintenant la connexion à votre serveur via SSH sur un terminal :
ssh ec2-user@<YOUR_SERVER_IP> -i <YOUR_PRIVATE_KEY>.pem
Remplacez les variables par les valeurs que vous avez définies pour votre instance EC2.
Si vous voyez ceci, vous êtes connecté à votre serveur, félicitations ! 👏
Installons NodeJS sur notre serveur :
sudo yum install -y nodejs
Installez pm2 globalement sur notre serveur via npm
sudo npm i -g pm2
Installez git sur le serveur et configurez vos informations d'identification :
sudo yum install git -y
git config --global user.name "Your Name" git config --global user.email "[email protected]"
Bon, maintenant nous allons créer un dossier var/www/
s'il n'existe pas déjà :
sudo mkdir -p /var/www
Ajoutez ensuite la propriété à notre utilisateur ec2 :
sudo chown -R ec2-user:ec2-user /var/www
Accédez au répertoire à partir de la racine de votre serveur – pas au dossier /home people 👌 cd ~/var/www
Maintenant, à partir de là, nous allons cloner notre dépôt git : git clone https://github.com/USERNAME/REPO_NAME.git YOUR_PROJECT_DIRECTORY
Remplacez [USERNAME] [REPO_NAME] et [YOUR_PROJECT_DIRECTORY] par vos propres valeurs.
Ensuite, nous modifions le répertoire dans notre référentiel, afin que cd YOUR_PROJECT_DIRECTORY
puisse créer le fichier ecosystem.config.js
pour notre configuration pm2 :
nano ecosystem.config.js
Cela ressemble à ceci :
module.exports = { apps : [{ name: "my-app", // A name for your application script: "app.js", // The script file to launch the app instances: "max", // This can be set to the number of CPU cores to use, or "max" to use all available autorestart: true, // Automatically restart app if it crashes watch: false, // Enable/disable watching file changes for automatic restart max_memory_restart: '1G', // Optional: Restart app if it reaches a memory limit env: { NODE_ENV: "development", }, env_production: { NODE_ENV: "production", } }] };
Cool beans, d'accord - une fois que cela est créé et enregistré, démarrons l'application avec pm2 :
pm2 start ecosystem.config.js
Maintenant, nous pouvons vérifier que nous avons un message « Hello World ! » depuis notre serveur sur le port 3000 :
Pour que pm2 démarre automatiquement au redémarrage du serveur, exécutons :
pm2 save pm2 startup
Pour vérifier que votre serveur est en cours d'exécution, vous pouvez faire pm2 status
; vous pouvez lire la documentation sur pm2 ici
Si vous êtes arrivé jusqu'ici, vous êtes une superstar ⭐️
C'est la dernière étape de notre processus. Nous allons créer un fichier .yml
pour les actions Github afin de mettre à jour notre serveur chaque fois qu'une modification est transmise à notre branche principale.
Dans votre référentiel, accédez à l'onglet « Actions » et créez un nouveau workflow personnalisé. J'appelle le mien nodejs.yml
Voici le fichier .yml pour mettre à jour le dépôt et redémarrer pm2 :
name: Node.js CI/CD on Amazon Linux on: push: branches: [ master ] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install dependencies run: npm install - name: Deploy to AWS EC2 uses: appleboy/scp-action@master with: host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} source: "./" # This now correctly points to the current directory target: "/var/www/your_project_directory" - name: Restart PM2 application uses: appleboy/ssh-action@master with: host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} script: | cd /var/www/your_project_directory pm2 reload all # This command restarts your application
Assurez-vous de mettre à jour « votre_répertoire_projet »
Enfin, vous devrez ajouter ces secrets d'environnement. REMOTE_HOST
c'est l'adresse IP de votre serveur ; REMOTE_USER
il s'agit de ec2-user
pour l'AMI Amazon Linux 2, puis collez le contenu de votre fichier .pem en tant que SSH_PRIVATE_KEY
Vous pouvez faire tout cela dans les paramètres du référentiel :
C'est ça! Nous avons fini, ouais 😁
Vous pouvez tester tout cela en modifiant le message « Hello World » et en transmettant cette modification à votre branche principale ; alors vous devriez voir la mise à jour sur http://your.ip.address:3000
C'est un peu un processus à mettre en place, mais lorsque vous développez, c'est vraiment agréable d'avoir un pipeline CI/CD simple déployant automatiquement les modifications sur votre serveur API REST. De cette façon, vous pouvez rapidement déployer les modifications en direct et les voir dans le front-end de votre application Web/mobile.
Faites-moi savoir si cela a été utile dans les commentaires, et merci d'avoir lu !!
Paix dehors,
- Nous s