Déployer rapidement une app node.js avec Apache2 Linux et let’s encrypt /
Quand Docker n'est pas de la partie

05/01/2023

J'ai eu récemment besoin d'effectuer un déploiement d'une application rapide. Ma stack habituel et d'utiliser Docker, Portainer et Traefik. Cependant, cette fois-ci j'ai dû prendre la solution la plus rapide est la plus adaptée, je vous explique comment j'ai fait.

Le setup est extrêmement simple, il vous faudra l’accès à votre serveur Linux Debian ou Ubuntu. Il faudra aussi installer Apache2 si ce n’est pas déjà fait.

Déployez votre code sur le serveur

Je ne vais pas détailler ici la méthode pour téléverser votre code sur votre propre serveur, personnellement ma préférence va pour le déploiement via un repo Github, sur le serveur, j’effectue un git clone ou bien des git pull pour récupérer la dernière version du code.

Démarrez votre application

Ici vous avez le choix, pour faire au plus simple, personnellement, j’utilise le paquet Forever

forever start app.js

Créez un fichier de conf pour Apache

Comme nous volons déployer une application Node JS, l’application va être exécutée de manière locale sur le serveur, c’est-à-dire que l’application sera disponible sur localhost sur le serveur.

L’idée va t’être de demander à Apache de passer le trafic extérieur vers cette application locale. Pour cela, nous allons utiliser la fonction proxyPass d’ Apache.

Afin d’utiliser cette fonction, il faut bien évidemment qu’elle soit disponible dans votre configuration d’Apache2, pour ce faire, activez le mod suivant :

a2enmod proxy proxy_http

Une fois que ce mode est activé, créer un fichier de configuration.

Allez dans le dossier :

/etc/apache2/sites-available

Puis créez le fichier .conf suivant ce style de nomenclature

nomdusite.antoibrossault.com.conf

Le fichier se construit de manière suivante

<VirtualHost *:80>
    ServerAdmin contact@masterOfTheUniverse.com
    ServerName  my-app.antoinebrossault.com

    ProxyRequests off

    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>

    <Location />
            ProxyPass http://localhost:8080/
            ProxyPassReverse http://localhost:8080/
    </Location>

RewriteEngine on
RewriteCond %{SERVER_NAME} =my-app.antoinebrossault.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

Vous noterez que dans cet exemple notre application tourne un sur le port 8080.
Si votre application tourne sur un port différent bien évidemment, veuillez mettre à jour ces lignes.

Activez le site dans Apache2

a2ensite nomdusite.antoibrossault.com.conf

Lancez cert-bot de let’s encrypt pour obtenir un certicat SSL valide

Je ne vais pas détailler ici l’installation de cert-bot, mais c’est un outil extrêmement pratique pour récupérer, renouveler automatiquement les certificats de let’s encrypt.

certbot --apache

Vous devriez maintenant avoir votre application qui tourne avec un certificat SSL valide.

Conclusion

Cette approche n’est pas recommandée avec toutes sortes d’application, mais si vous êtes sur une application de test, expérimentale, c’est globalement une solution rapide et intéressante à avoir dans sa caisse à outils.