Comment déployer une application Web Clojure sur FreeBSD 10.2

introduction

L’intérêt pour la programmation fonctionnelle et, plus spécifiquement, la programmation pour le Web dans Clojure continue de croître. De nombreux tutoriels sur la création d’applications de base négligent souvent les détails du déploiement. Cet article vous montrera comment déployer une application Web Clojure sur un droplet FreeBSD 10.2.

Plus précisément, nous allons créer un exemple d’application Clojure et le conditionner pour une utilisation en production, puis configurer l’environnement de cette application sur le serveur en utilisant Supervisor pour exécuter l’application et Nginx pour lui envoyer des demandes.

Conditions préalables

Avant de commencer ce guide, vous aurez besoin des éléments suivants:

Étape 1 - Création et conditionnement d’un exemple d’application Clojure

La toute première étape consiste à utiliser + git + pour récupérer l’exemple de projet Clojure à déployer.

Commencez par mettre à jour vos paquets et installez + git + sur le serveur.

sudo pkg update
sudo pkg install git

Ensuite, clonez le référentiel de projet exemple.

git clone https://github.com/do-community/do-clojure-web.git

Ce référentiel est le résultat final du suivi du tutoriel Clojure Web Web. Si vous le souhaitez, au lieu de cloner ce référentiel, vous pouvez suivre ce tutoriel vous-même.

Clojure utilise le JVM pour exécuter son code. Vous devez donc compiler votre projet pour l’exécuter. Leiningen, outil de gestion de la dépendance et d’automatisation de la construction pour les applications Clojure, facilite cette tâche.

Nous allons maintenant installer Leiningen.

sudo pkg install leiningen

Vous remarquerez une sortie indiquant que Java requiert deux points de montage spéciaux du système de fichiers. Nous nous en occuperons à l’étape suivante.

Maintenant, vous pouvez compiler votre projet pour qu’il soit exécuté sur le serveur avec + lein +.

cd ~/do-clojure-web
lein uberjar

Étape 2 - Configuration de l’environnement d’application Clojure

Nous avons besoin de trois éléments principaux pour que cette application fonctionne correctement: Java, Supervisor et Nginx. Lors de la dernière étape, nous avons installé Java lors de l’installation de Leiningen. Nous allons ensuite installer Supervisor et Nginx.

sudo pkg install nginx py27-supervisor

Comme indiqué à l’étape 1, Java requiert deux points de montage spéciaux du système de fichiers. Exécutez ces deux commandes pour vous assurer qu’elles sont montées.

sudo mount -t fdescfs fdesc /dev/fd
sudo mount -t procfs proc /proc

Plutôt que d’exécuter ces commandes à chaque démarrage du système, nous le ferons automatiquement. Editez le fichier + / etc / fstab + en utilisant + ee + ou votre éditeur de texte favori.

sudo ee /etc/fstab

Assurez-vous que la fin de votre fichier + / etc / fstab + contient les deux entrées suivantes.

/ etc / fstab

fdesc   /dev/fd     fdescfs     rw  0   0
proc    /proc       procfs      rw  0   0

Vous aurez également besoin d’un emplacement pour conserver votre application Web Clojure et ses fichiers journaux. Créez cette structure de répertoire ensuite.

sudo mkdir -p /www/data/do-clojure-web/app/db/ /www/logs

Vous pouvez maintenant déplacer votre fichier d’application Clojure et votre fichier de base de données dans les répertoires que vous avez créés.

sudo cp ~/do-clojure-web/target/do-clojure-web-0.1.0-standalone.jar /www/data/do-clojure-web/app/
sudo cp ~/do-clojure-web/db/do-clojure-web.h2.db /www/data/do-clojure-web/app/db/

L’application s’exécutera en tant qu’utilisateur * www * sur le système pour qu’il puisse écrire dans notre base de données intégrée. Définissez le propriétaire du chemin d’application sur * www *.

sudo chown -R www /www/data/do-clojure-web/

Accédez au répertoire de l’application Clojure.

cd /www/data/do-clojure-web/app/

Dans un environnement de production, le numéro de version de l’application changera à chaque mise à jour. Vous ne voulez pas avoir à mettre à jour votre configuration système chaque fois que cela se produit. Pour éviter cela, créez un lien symbolique vers la version en cours d’exécution de l’application. Vous ferez référence au lien symbolique dans les étapes à venir.

sudo ln -s do-clojure-web-0.1.0-standalone.jar do-clojure-web.jar

L’application est actuellement configurée pour être accessible uniquement via localhost, mais vous pouvez toujours vous assurer qu’elle démarre sans erreur. Faites-le avant de continuer.

sudo java -jar do-clojure-web.jar

Si tout fonctionne correctement, vous devriez obtenir une sortie semblable à celle-ci:

Sortie

. . .
2015-06-12 04:30:17.882:INFO:oejs.Server:jetty-7.x.y-SNAPSHOT
2015-06-12 04:30:17.995:INFO:oejs.AbstractConnector:Started [email protected]:5000

Allez-y et arrêtez l’application pour l’instant en appuyant sur la combinaison de touches + CTRL + C +.

Étape 3 - Configuration de Supervisor pour exécuter l’application Clojure

Il existe quelques options pour gérer votre application en tant que service. Pour un service devant vraiment évoluer, je vous recommande de consulter la uWSGI documentation sur l’exécution d’une application Clojure.

Créez et éditez le fichier + / usr / local / etc / supervisord.conf +.

sudo ee /usr/local/etc/supervisord.conf

Ajoutez cette configuration au bas du fichier et enregistrez-la.

/usr/local/etc/supervisord.conf

[program:do-clojure-web]
command=/usr/local/bin/java -jar do-clojure-web.jar
directory=/www/data/do-clojure-web/app
user=www
autostart=true
autorestart=true
startretries=3
redirect_stderr=true
stdout_logfile=/www/logs/do-clojure-web.app.log

Cette configuration est assez simple. Le démon superviseur (service) exécutera notre application à partir du répertoire + / www / data / do-clojure-web / app / +. Il s’assurera également de se connecter à + ​​/ www / logs / do-clojure-web.app.log + et tentera de redémarrer l’application en cas de plantage.

Étape 4 - Configuration de Nginx en tant que serveur proxy

Parce que l’application Web Clojure accepte uniquement les connexions de localhost sur le port 5000, nous devons placer un serveur Web tel que Nginx devant lui pour fournir un accès externe. Cela sera également très pratique pour servir des actifs statiques à mesure que vous développez votre application.

Editez le fichier + / usr / local / etc / nginx / nginx.conf +.

sudo ee /usr/local/etc/nginx/nginx.conf

Premièrement, ajoutez le bloc + upstream, surligné en rouge ci-dessous, au-dessus du bloc` + server + `déjà dans le fichier.

/usr/local/etc/nginx/nginx.conf

. . .
   #gzip  on;






   server {
           listen       80;
           server_name  localhost;
. . .

Maintenant, trouvez le bloc qui commence par + location / + (dans le bloc + serveur +). Mettez en commentaire toutes les lignes qu’il contient en ajoutant un «+ # » au début de chaque ligne et en ajoutant la nouvelle section ` location / +` surlignée en rouge. Ceci dit à Nginx d’écouter comme un serveur Web normal sur le port 80 et d’envoyer en proxy vos demandes à l’application Clojure.

/usr/local/etc/nginx/nginx.conf

. . .
   server {
       listen       80;
       server_name  localhost;

       #charset koi8-r;

       #access_log  logs/host.access.log  main;

       location / {
           root   /usr/local/www/nginx;
           index  index.html index.htm;















       #error_page  404              /404.html;
. . .

Enregistrez et quittez le fichier.

Étape 5 - Démarrage des services et test de l’accès

Il est temps d’allumer toutes les pièces et de s’assurer que tout fonctionne correctement. La première étape consiste à vérifier que vos services sont configurés pour démarrer au démarrage.

Editez le fichier + / etc / rc.conf +.

sudo ee /etc/rc.conf

Ajoutez ces deux lignes à la fin du fichier + / etc / rc.conf +.

/usr/local/etc/rc.conf

nginx_enable="YES"
supervisord_enable="YES"

Enregistrez et quittez le fichier.

Allez-y et démarrez le démon Supervisor pour que votre application Clojure soit lancée.

sudo service supervisord start

Attendez environ 30 secondes qu’il démarre, puis démarrez le proxy frontal du serveur Web Nginx.

sudo service nginx start

Visitez + http: // + dans votre navigateur. Vous devriez voir l’exemple de chargement de site d’application Clojure.

Si vous venez juste d’obtenir une page Nginx par défaut, essayez de redémarrer Supervisor avec + sudo service supervisord restart +, attendez 30 secondes et redémarrez Nginx avec + sudo service nginx restart +.

Une fois le site chargé, cliquez sur le lien * Ajouter un emplacement * en haut de l’écran et essayez d’ajouter quelques coordonnées numériques pour vous assurer que les autorisations d’accès à la base de données sont correctes. Par exemple, vous pouvez ajouter 1 pour * x valeur * et 2 pour * y valeur *. Cela devrait vous amener à une page qui dit:

sortie add-location

Added [1, 2] (id: 1) to the db. See for yourself.

Si vous cliquez sur le lien * Voir tous les emplacements * en haut de l’écran, vous devriez voir un tableau avec votre nouvelle entrée.

Conclusion

Vous venez de déployer une application Clojure à l’aide de Leiningen, Supervisor et Nginx! Il y a beaucoup à apprendre sur le déploiement de sites Web et d’applications même les plus simples. L’étape suivante consiste à déployer votre application personnalisée au lieu de l’application de démonstration utilisée dans ce tutoriel.