Comment déployer une application Web Clojure sur Ubuntu 14.04

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 explique comment déployer une application Web Clojure sur un droplet Ubuntu 14.04.

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 apt-get update
sudo apt-get 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. Leiningen doit être installé en quelques étapes.

Tout d’abord, installez Java.

sudo apt-get install openjdk-7-jre-headless

Ensuite, téléchargez le script d’installation de Leiningen. Leiningen contient un paquet Ubuntu, mais il est très obsolète.

sudo curl https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein -o /usr/local/bin/lein

Définissez les autorisations de sorte que tout utilisateur puisse utiliser l’utilitaire + lein + fourni par Leiningen.

sudo chmod a+x /usr/local/bin/lein

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. Nous avons installé Java à la dernière étape. Nous allons ensuite installer Supervisor et Nginx.

sudo apt-get install nginx supervisor

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 /var/www/do-clojure-web/app/db /var/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 /var/www/do-clojure-web/app/
sudo cp ~/do-clojure-web/db/do-clojure-web.h2.db /var/www/do-clojure-web/app/db/

L’application s’exécutera sous le nom d’utilisateur * www-data * sur le système pour pouvoir écrire dans notre base de données intégrée. Définissez le propriétaire du chemin d’application sur * www-data *.

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

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

cd /var/www/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. L’option que vous utiliserez ici s’appelle Supervisor; c’est plus facile à gérer et plus polyvalent qu’un simple script. Cependant, pour un service qui doit vraiment être mis à l’échelle, consultez la uWSGI documentation sur l’exécution d’une application Clojure.

Créez et éditez le fichier + / etc / supervisor / conf.d / do-clojure-web.conf +.

sudo nano /etc/supervisor/conf.d/do-clojure-web.conf

Ajoutez cette configuration au fichier et enregistrez-le.

/etc/supervisor/conf.d/do-clojure-web.conf

[program:do-clojure-web]
command=/usr/bin/java -jar do-clojure-web.jar
directory=/var/www/do-clojure-web/app
user=www-data
autostart=true
autorestart=true
startretries=3
redirect_stderr=true
stdout_logfile=/var/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 + / var / www / do-clojure-web / app +. Il s’assurera également de se connecter à + ​​/ var / www / logs / do-clojure-web.app.log + et tentera de redémarrer l’application en cas de blocage.

É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 + / etc / nginx / sites-available / default +.

sudo nano /etc/nginx/sites-available/default

Ajoutez la section surlignée en rouge au fichier. Ceci définit notre backend pour référence facile dans la prochaine section de configuration.

/ etc / nginx / sites-available / default

. . .
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##




server {
   listen 80 default_server;
. . .

Maintenant, trouvez le bloc qui commence par + location / +. Mettez toutes les lignes en commentaire en ajoutant un «+ # +» au début de chaque ligne.

/ etc / nginx / sites-available / default

. . .
       # Make site accessible from http://localhost/
       server_name localhost;


        location / {
               # First attempt to serve request as file, then
               # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
               # Uncomment to enable naxsi on this location
               # include /etc/nginx/naxsi.rules
        }

       # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
. . .

Ensuite, juste en dessous de cela, ajoutez la section suivante, qui indiquera à Nginx d’écouter comme un serveur Web normal sur le port 80 et d’envoyer en proxy vos demandes à l’application Clojure.

/ etc / nginx / sites-available / default

. . .

       # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests














       #location /RequestDenied {
       #       proxy_pass http://127.0.0.1:8080;
       #}

É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. Allez-y et démarrez le démon Supervisor pour que votre application Clojure soit lancée.

sudo service supervisor 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 supervisor 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.