Clojure est un langage de programmation moderne, dynamique et puissant sur la plate-forme Java. Il est basé sur le langage de programmation LISP et possède des compilateurs qui permettent d'être exécuté à la fois sur l'environnement d'exécution Java et .Net. Clojure vous aide à créer des systèmes à partir de zéro sans toucher directement au code Java. Actuellement, il est utilisé par de nombreuses grandes entreprises, notamment Walmart et Puppet Lab.
Dans ce tutoriel, nous expliquerons comment déployer une application Web Clojure sur Ubuntu 20.04.
Prérequis
- Un serveur exécutant Ubuntu 20.04.
- Un nom de domaine valide pointé vers l'adresse IP de votre serveur.
- Un mot de passe root est configuré sur le serveur.
Mise en route
Avant de commencer, il est recommandé de mettre à jour vos packages système vers la dernière version. Vous pouvez les mettre à jour avec la commande suivante :
apt-get update -y
Une fois tous les packages mis à jour, installez Java et les autres packages requis en exécutant la commande suivante :
apt-get install git curl default-jdk -y
Une fois tous les packages installés, vérifiez la version installée de Java avec la commande suivante :
java -version
Vous devriez obtenir le résultat suivant :
openjdk version "11.0.9.1" 2020-11-04 OpenJDK Runtime Environment (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04) OpenJDK 64-Bit Server VM (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)
Une fois que vous avez terminé, vous pouvez passer à l'étape suivante.
Installer Nginx et Supervisor
Ensuite, vous devrez installer le serveur Web Nginx et le superviseur sur votre système. Nginx est un serveur Web utilisé pour héberger des applications sur Internet. Supervisor est un système client/serveur qui permet à ses utilisateurs de surveiller et de contrôler un certain nombre de processus sur les systèmes d'exploitation basés sur Linux.
Vous pouvez installer les deux packages avec la commande suivante :
apt-get install nginx supervisor -y
Une fois les deux packages installés, vous pouvez passer à l'étape suivante.
Télécharger l'application Clojure
Tout d'abord, vous devrez télécharger l'application Clojure à partir du référentiel Git. Vous pouvez le télécharger en exécutant la commande suivante :
git clone https://github.com/do-community/do-clojure-web.git
Une fois le téléchargement terminé, vous devriez obtenir le résultat suivant :
Cloning into 'do-clojure-web'... remote: Enumerating objects: 37, done. remote: Total 37 (delta 0), reused 0 (delta 0), pack-reused 37 Unpacking objects: 100% (37/37), 6.25 KiB | 399.00 KiB/s, done.
Ensuite, vous devrez installer Leiningen sur votre système. Leiningen est un outil d'automatisation de la construction et de gestion des dépendances utilisé pour créer des projets écrits dans le langage de programmation Clojure. Vous pouvez télécharger le package binaire Leiningen avec la commande suivante :
curl https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein -o /usr/bin/lein
Une fois le téléchargement terminé, définissez l'autorisation d'exécution avec la commande suivante :
chmod 755 /usr/bin/lein
Ensuite, changez le répertoire en Clojure et compilez le projet avec la commande suivante :
cd do-clojure-web
lein uberjar
Une fois le projet compilé, vous devriez obtenir le résultat suivant :
Retrieving commons-codec/commons-codec/1.6/commons-codec-1.6.jar from central Retrieving javax/servlet/servlet-api/2.5/servlet-api-2.5.jar from central Retrieving org/clojure/java.jdbc/0.2.3/java.jdbc-0.2.3.jar from central Retrieving com/h2database/h2/1.3.170/h2-1.3.170.jar from central Retrieving org/eclipse/jetty/jetty-server/7.6.13.v20130916/jetty-server-7.6.13.v20130916.jar from central Retrieving org/eclipse/jetty/orbit/javax.servlet/2.5.0.v201103041518/javax.servlet-2.5.0.v201103041518.jar from central Retrieving org/eclipse/jetty/jetty-continuation/7.6.13.v20130916/jetty-continuation-7.6.13.v20130916.jar from central Retrieving org/eclipse/jetty/jetty-http/7.6.13.v20130916/jetty-http-7.6.13.v20130916.jar from central Retrieving org/eclipse/jetty/jetty-io/7.6.13.v20130916/jetty-io-7.6.13.v20130916.jar from central Retrieving org/eclipse/jetty/jetty-util/7.6.13.v20130916/jetty-util-7.6.13.v20130916.jar from central Retrieving medley/medley/0.5.3/medley-0.5.3.jar from clojars Retrieving clout/clout/2.1.0/clout-2.1.0.jar from clojars Retrieving compojure/compojure/1.3.1/compojure-1.3.1.jar from clojars Retrieving ring/ring-core/1.3.2/ring-core-1.3.2.jar from clojars Retrieving instaparse/instaparse/1.3.4/instaparse-1.3.4.jar from clojars Retrieving crypto-random/crypto-random/1.2.0/crypto-random-1.2.0.jar from clojars Retrieving crypto-equality/crypto-equality/1.0.0/crypto-equality-1.0.0.jar from clojars Retrieving clj-time/clj-time/0.6.0/clj-time-0.6.0.jar from clojars Retrieving ring/ring-codec/1.0.0/ring-codec-1.0.0.jar from clojars Retrieving ring/ring-defaults/0.1.2/ring-defaults-0.1.2.jar from clojars Retrieving ring/ring-ssl/0.2.1/ring-ssl-0.2.1.jar from clojars Retrieving ring/ring-headers/0.1.1/ring-headers-0.1.1.jar from clojars Retrieving ring/ring-anti-forgery/1.0.0/ring-anti-forgery-1.0.0.jar from clojars Retrieving hiccup/hiccup/1.0.2/hiccup-1.0.2.jar from clojars Retrieving ring/ring-jetty-adapter/1.3.2/ring-jetty-adapter-1.3.2.jar from clojars Retrieving ring/ring-servlet/1.3.2/ring-servlet-1.3.2.jar from clojars Compiling do-clojure-web.handler Created /root/do-clojure-web/target/do-clojure-web-0.1.0.jar Created /root/do-clojure-web/target/do-clojure-web-0.1.0-standalone.jar
Une fois que vous avez terminé, vous pouvez passer à l'étape suivante.
Créer une structure de répertoire pour l'application Clojure
Ensuite, vous devrez créer une structure de répertoires pour l'application Clojure et placer les fichiers et répertoires requis à un emplacement spécifique.
Commencez par créer une structure de répertoires avec la commande suivante :
mkdir -p /var/www/html/do-clojure-web/app/db
Ensuite, copiez votre application et votre base de données Clojure dans le répertoire spécifique avec la commande suivante :
cp /root/do-clojure-web/target/do-clojure-web-0.1.0-standalone.jar /var/www/html/do-clojure-web/app/
cp /root/do-clojure-web/db/do-clojure-web.h2.db /var/www/html/do-clojure-web/app/db/
Ensuite, définissez les autorisations et la propriété appropriées avec la commande suivante :
chown -R www-data:www-data /var/www/html/do-clojure-web/
chmod -R 775 /var/www/html/do-clojure-web/
Ensuite, changez le répertoire vers l'application Clojure et créez un lien symbolique de votre application Clojure :
cd /var/www/html/do-clojure-web/app/
ln -s do-clojure-web-0.1.0-standalone.jar do-clojure-web.jar
Ensuite, vérifiez si votre application fonctionne ou non en exécutant la commande suivante :
java -jar do-clojure-web.jar
Si tout va bien, vous devriez obtenir le résultat suivant :
2020-11-25 10:19:51.456:INFO:oejs.Server:jetty-7.x.y-SNAPSHOT 2020-11-25 10:19:51.497:INFO:oejs.AbstractConnector:Started [email protected]:5000
Une fois que vous avez terminé, vous pouvez passer à l'étape suivante.
Configurer le superviseur pour l'application Clojure
Il existe plusieurs façons de gérer l'application Clojure en tant que service. Dans ce didacticiel, nous utiliserons Supervisor pour gérer l'application Clojure. Vous pouvez le configurer en créant un fichier dans le répertoire de configuration du Superviseur :
nano /etc/supervisor/conf.d/do-clojure-web.conf
Ajoutez les lignes suivantes :
[program:do-clojure-web] command=/usr/bin/java -jar do-clojure-web.jar directory=/var/www/html/do-clojure-web/app user=www-data autostart=true autorestart=true startretries=3 redirect_stderr=true stdout_logfile=/var/log/do-clojure-web.app.log
Enregistrez et fermez le fichier puis redémarrez le service Superviseur pour appliquer les modifications :
systemctl restart supervisor
Ensuite, activez le service Superviseur pour qu'il démarre au redémarrage du système :
systemctl enable supervisor
Vous pouvez maintenant vérifier le statut du Superviseur avec la commande suivante :
systemctl status supervisor
Vous devriez obtenir le résultat suivant :
? supervisor.service - Supervisor process control system for UNIX Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2020-11-25 10:22:31 UTC; 1min 12s ago Docs: http://supervisord.org Main PID: 40927 (supervisord) Tasks: 28 (limit: 2353) Memory: 104.6M CGroup: /system.slice/supervisor.service ??40927 /usr/bin/python3 /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf ??40946 /usr/bin/java -jar do-clojure-web.jar Nov 25 10:22:31 ubuntu2004 systemd[1]: Started Supervisor process control system for UNIX. Nov 25 10:22:31 ubuntu2004 supervisord[40927]: 2020-11-25 10:22:31,603 CRIT Supervisor is running as root. Privileges were not dropped becaus> Nov 25 10:22:31 ubuntu2004 supervisord[40927]: 2020-11-25 10:22:31,603 INFO Included extra file "/etc/supervisor/conf.d/do-clojure-web.conf" d> Nov 25 10:22:31 ubuntu2004 supervisord[40927]: 2020-11-25 10:22:31,608 INFO RPC interface 'supervisor' initialized Nov 25 10:22:31 ubuntu2004 supervisord[40927]: 2020-11-25 10:22:31,608 CRIT Server 'unix_http_server' running without any HTTP authentication > Nov 25 10:22:31 ubuntu2004 supervisord[40927]: 2020-11-25 10:22:31,609 INFO supervisord started with pid 40927 Nov 25 10:22:32 ubuntu2004 supervisord[40927]: 2020-11-25 10:22:32,612 INFO spawned: 'do-clojure-web' with pid 40946 Nov 25 10:22:33 ubuntu2004 supervisord[40927]: 2020-11-25 10:22:33,615 INFO success: do-clojure-web entered RUNNING state, process has stayed >
À ce stade, le service Superviseur est démarré et votre application écoute sur le port 5000. Vous pouvez le vérifier avec la commande suivante :
ss -antpl | grep 5000
Vous devriez obtenir le résultat suivant :
LISTEN 0 50 [::ffff:127.0.0.1]:5000 *:* users:(("java",pid=40946,fd=7))
Une fois que vous avez terminé, vous pouvez passer à l'étape suivante.
Configurer Nginx pour l'application Clojure
Ensuite, vous devrez configurer le Nginx en tant que proxy inverse pour servir l'application Clojure. Tout d'abord, créez un fichier de configuration d'hôte virtuel Nginx avec la commande suivante :
nano /etc/nginx/sites-available/clojure.conf
Ajoutez les lignes suivantes :
upstream http_backend { server 127.0.0.1:5000; keepalive 32; } server { listen 80; root /var/www/html; index index.html index.htm index.nginx-debian.html; server_name clojure.example.com; location / { proxy_pass http://http_backend; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; access_log /var/log/do-clojure-web.access.log; error_log /var/log/do-clojure-web.error.log; } }
Enregistrez et fermez le fichier lorsque vous avez terminé. Ensuite, activez l'hôte virtuel Nginx avec la commande suivante :
ln -s /etc/nginx/sites-available/clojure.conf /etc/nginx/sites-enabled/
Ensuite, vérifiez le Nginx pour toute erreur de syntaxe avec la commande suivante :
nginx -t
Vous devriez obtenir le résultat suivant :
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Enfin, redémarrez le service Nginx pour appliquer les modifications :
systemctl restart nginx
Une fois que vous avez terminé, vous pouvez accéder à l'application Clojure.
Accéder à l'application Clojure
Maintenant, ouvrez votre navigateur Web et accédez à l'application Clojure en utilisant l'URL http://clojure.example.com . Vous devriez voir le tableau de bord de l'application Clojure dans l'écran suivant :
Cliquez sur Ajouter un lieu bouton. Vous devriez voir l'écran suivant :
Indiquez les valeurs souhaitées et cliquez sur soumettre bouton de localisation. Vous devriez voir l'écran suivant :
Maintenant, cliquez sur Afficher tous les emplacements bouton. Vous devriez voir votre emplacement ajouté dans l'écran suivant :
Conclusion
Toutes nos félicitations! vous avez déployé avec succès l'application Clojure avec Nginx en tant que proxy inverse sur le serveur Ubuntu 20.04. Vous pouvez maintenant essayer de déployer votre application personnalisée avec Clojure.