Dans ce didacticiel, nous allons apprendre à configurer une application Web Koa.js pour la production, en utilisant Node.js. Nous allons également lier un exemple de domaine, avec un proxy inverse, en utilisant Apache, et apprendre à le gérer avec un gestionnaire de processus approprié. Sans plus tarder, commençons.
Brève description de Node.js, Koa.js et Apache
Node.js est un framework JavaScript multiplateforme rapide basé sur le moteur V8 de Chrome. Il est utilisé dans les applications de bureau et de serveur et est célèbre pour sa gestion de boucle d'événement à un seul thread. Node.js dispose d'un registre de packages appelé Node Package Manager (NPM), qui héberge plus d'un demi-million de packages. Les packages (ou modules) NPM sont le cœur de réseau de Node.js, car ils sont du code communautaire qui peut être utile dans votre application Node.js. Dans notre application Koa.js, Node.js est au cœur de sa fonction.
Koa.js est un framework web minimaliste, construit sur la plateforme Node.js. Fabriqué par la même équipe derrière le framework Express.js populaire, son objectif est de minimiser davantage le framework Express.js déjà minimaliste en excluant le middleware de son noyau. Une caractéristique majeure de Koa.js est le fait qu'il n'y a pas de rappel. Koa.js est construit sur des générateurs basés sur ES6 et des fonctionnalités ES6, telles que Promises.
Apache est un serveur Web open source populaire, utilisé comme point de départ très basique pour les serveurs Web. Dans ce didacticiel, nous utiliserons Apache comme proxy inverse, ce qui nous permettra de lier notre application à un exemple de domaine. Si vous n'avez pas de domaine, ce tutoriel fonctionnera toujours pour vous, à la seule différence que le site Web fonctionnera sur votre IP VPS, au lieu d'un domaine.
Configuration de Node.js
Comme pour tout framework Node.js, vous devrez installer Node.js sur votre VPS. Pour les besoins de ce didacticiel, je suppose que Node.js est déjà installé sur votre système. Sinon, vous pouvez simplement suivre les instructions ici .
Configuration de notre répertoire d'applications
Nous devrons créer un dossier, qui contiendra les fichiers de base de notre application.
mkdir site
N'hésitez pas à remplacer site
par tout autre nom que vous souhaitez pour le répertoire. Ensuite, nous devrons initialiser notre fichier de package Node.js. Accédez au répertoire que vous venez de créer, exécutez npm init
et complétez les invites. En fin de compte, cela devrait ressembler à ceci:
{
"name": "site",
"version": "1.0.0",
"description": "Koa.js Site",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "yourname",
"license": "ISC"
}
Installation de Koa.js
Maintenant que notre répertoire est configuré, nous pouvons procéder à l'installation de Koa.js. Dans le répertoire de travail actuel /site
, tapez ce qui suit.
npm install koa
Cela va télécharger le module Koa.js à partir de NPM et l'installer dans notre répertoire de projet pour une utilisation future. Ensuite, nous allons créer notre exemple de fichier d'application qui contiendra notre code d'application. Pour ce faire, créez un index.js
fichier.
nano index.js
Une fois à l'intérieur du fichier, créez un exemple d'application.
const Koa = require('koa');
const app = new Koa();
app.use(async ctx => {
ctx.body = 'Hello World';
});
app.listen(3000);
console.log('Website is live!')
Enregistrez et fermez le fichier. CTRL+ X.
Nous voulons nous assurer que notre application fonctionne correctement. Pour le démarrer, exécutez node index.js
, et vous verrez Website is live
dans la console.
Installer Apache
Maintenant que nous savons que notre site Web est fonctionnel, nous pouvons procéder à l'installation d'Apache et de ses dépendances.
sudo apt install -y libapache2-mod-proxy-html libxml2-dev
Afin d'utiliser la fonction de proxy inverse trouvée dans Apache, nous devrons activer les modules nécessaires.
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_ajp
a2enmod rewrite
a2enmod deflate
a2enmod headers
a2enmod proxy_balancer
a2enmod proxy_connect
a2enmod proxy_html
Certains de ces modules ont peut-être déjà été activés, mais il est toujours bon de les revérifier.
Maintenant, nous devons modifier le fichier de configuration par défaut pour Apache.
sudo nano /etc/apache2/sites-enabled/000-default.conf
Ici, nous devrons ajouter un bloc pour notre application.
<VirtualHost *:*>
ProxyPreserveHost On
ProxyPass / http://0.0.0.0:3000/
ProxyPassReverse / http://0.0.0.0:3000
ServerName localhost
</VirtualHost>
Enregistrez le fichier, CTRL+ X.
Vous remarquerez peut-être que nous utilisons le port 3000
comme port pour notre ProxyPass
et ProxyPassReverse
IP. Comme il s'agit du même port que celui sur lequel nous exécutons notre application Koa.js, il est impératif de saisir le bon port.
Une fois les modifications apportées, nous devrons redémarrer Apache et relancer notre application Koa.js.
sudo systemctl restart apache2
Cela garantira que notre fichier de configuration est actif et prêt à fonctionner lorsque nous démarrons notre application Koa.js. Une fois Apache redémarré, revenez dans le répertoire de votre site et démarrez l'application Koa.js comme nous l'avons fait précédemment. À partir de votre navigateur Web, accédez à http://yourdomain
ou http://yourip:
, et vous verrez "Hello World".
Gérer notre application avec systemd
Maintenant que nous avons couvert les bases de la création d'un exemple d'application Koa.js, nous nous rendons compte que dans un environnement de production, le démarrage de l'application tel que nous sommes maintenant n'est pas pratique. Un gestionnaire de processus est définitivement une exigence. C'est là que systemd entre en jeu. En termes simples, systemd se compose d'un logiciel qui fournit des blocs de construction pour un système Linux. Similaire à "init", il fournit un système pour gérer les processus utilisateur après le démarrage du système. Dans le cas de notre application, systemd nous permet de démarrer automatiquement notre site Web après le redémarrage du système, au cas où un événement perturbe la disponibilité du système. Il fournit également un ensemble d'outils qui peuvent être utiles lors de la gestion de notre application. La meilleure partie est le fait qu'il est intégré à Ubuntu 16.04 LTS, nous n'avons donc pas besoin d'installer de logiciel supplémentaire.
Créer un service systemd
Tout ce dont nous avons besoin pour démarrer notre application sera contenu dans un fichier appelé service
. Il contient des détails sur notre application, tels que son nom, son répertoire, son environnement et plus encore. Pour créer notre fichier système, ouvrez un éditeur de texte.
sudo nano /lib/systemd/system/site.service
Modifiez et enregistrez le fichier comme ceci.
[Unit]
Description=desc here
Documentation=https://example.com
After=network.target
[Service]
Environment=NODE_PORT=3000
Type=simple
User=youruser
ExecStart=/usr/bin/node /home/[youruser]/site/index.js
Restart=on-failure
[Install]
WantedBy=multi-user.target
Remplacez youruser
par le nom d'utilisateur de votre serveur. Voici un bref aperçu des domaines importants:
After
- Cela informe systemd d'attendre que l'interface réseau soit prête avant de démarrer notre application.
Environment
- Ici, nous pouvons spécifier des variables d'environnement pour notre application. Notre port Node.js en fait partie.
Type
- Cela informe systemd que notre application peut simplement être démarrée, sans baisser les privilèges des utilisateurs et autres.
User
- Cela indique à systemd que nous voulons exécuter l'application sous notre compte utilisateur, ce qui est recommandé. L'exécution d'applications en tant qu'utilisateur root peut entraîner de nombreux compromis de sécurité.
ExecStart
- Essentiellement la commande que systemd exécutera pour démarrer notre application, similaire à la façon dont nous l'avons démarrée manuellement auparavant.
Restart
- Indique à systemd dans quelles conditions redémarrer notre application. Dans ce cas, nous souhaitons redémarrer notre site internet en cas d'erreur.
Démarrez le service systemd
Nous sommes maintenant prêts à démarrer notre service systemd.
sudo systemctl daemon-reload
Cela est nécessaire chaque fois qu'un fichier de service systemd change pour que systemd enregistre les nouvelles modifications apportées.
Ensuite, lancez votre application.
sudo systemctl start site
Accédez à nouveau au site dans votre navigateur pour vérifier que tout fonctionne.
Fonctions clés de gestion du système
stop
- Arrête complètement l'application.
restart
- Arrête l'application et la redémarre sous un nouveau processus.
enable
- Indique à systemd de démarrer l'application chaque fois que vous démarrez votre ordinateur.
status
- Affiche des informations sur l'application en cours d'exécution, telles que la disponibilité, l'état de l'application et plus encore.
Pour utiliser l'une de ces fonctions, exécutez ce qui suit.
systemctl <function> site
Conclusion
Nous avons réussi à mettre en place une application Koa.js et appris à inverser son proxy, ainsi qu'à la gérer avec systemd. Vous êtes maintenant prêt à développer votre application et à vous appuyer sur cet exemple. Si vous souhaitez en savoir plus sur Koa.js et plus de choses que vous pouvez faire avec, visitez leur site Web , pour plus d'informations utiles. En plus de cela, si vous souhaitez en savoir plus sur le gestionnaire de processus de systemd, lisez la documentation correspondante ici . Enfin, si vous souhaitez en savoir plus sur le proxy inverse d'Apache, n'hésitez pas à les consulter ici .