Clojure est un langage de programmation moderne à usage général pour la JVM qui se concentre sur la programmation simultanée trouvée dans les systèmes d'exploitation. Clojure vous permet d'utiliser l'infrastructure JVM existante, y compris les outils, les bibliothèques et les serveurs d'applications.
Ce guide vous guidera tout au long du processus de déploiement d'une application Web simple dans Clojure à l'aide d'un superviseur et de Nginx.
Exigences
- Un serveur exécutant Ubuntu 16.04.
- Une configuration de mot de passe root sur votre serveur.
Mise en route
Avant de commencer, il est recommandé de mettre à jour votre package vers la dernière version avec la commande suivante :
apt-get update -y
apt-get upgrade -y
Une fois tous les packages mis à jour, redémarrez votre serveur pour appliquer toutes ces modifications.
reboot
Ensuite, installez certains packages requis tels que git, curl, Java sur votre serveur avec la commande suivante :
apt-get install git curl openjdk-8-jre-headless -y
Une fois tous les packages requis installés, vous pouvez vérifier la version de JAVA avec la commande suivante :
java -version
Vous devriez voir la version JAVA dans la sortie suivante
openjdk version "1.8.0_131" OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-2-b11) OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)
Une fois que vous avez terminé, vous pouvez procéder à l'installation de Nginx et de Supervisor.
Installer Nginx et Supervisor
Par défaut, Nginx et Supervisor sont disponibles dans le référentiel Ubuntu 16.04. Vous pouvez les installer en exécutant simplement la commande suivante :
apt-get install nginx supervisor -y
Une fois l'installation terminée, démarrez les services Nginx et Supervisor et autorisez-les à démarrer au démarrage avec la commande suivante :
systemctl start nginx
systemctl start supervisor
systemctl enable nginx
systemctl enable supervisor
Une fois que vous avez terminé, vous pouvez passer à l'étape suivante.
Télécharger l'application Clojure
Tout d'abord, vous devrez télécharger l'exemple de projet Clojure à partir du référentiel git. Vous pouvez facilement le télécharger avec l'utilitaire de ligne de commande git clone comme indiqué ci-dessous :
git clone https://github.com/do-community/do-clojure-web.git
La prochaine étape consiste à compiler et à exécuter ce projet Clojure à l'aide de Leiningen. Leiningen est un outil de gestion des dépendances et d'automatisation de la construction qui peut être utilisé pour compiler l'application Clojure. Vous pouvez le télécharger avec la commande curl comme indiqué ci-dessous :
curl https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein -o /usr/bin/lein
Ensuite, donnez les autorisations appropriées à l'outil téléchargé avec la commande suivante :
chmod 755 /usr/bin/lein
Maintenant, exécutez la commande suivante pour compiler le projet Closure :
cd do-clojure-web
lein uberjar
Vous devriez voir le résultat suivant :
WARNING: You're currently running as root; probably by accident. Press control-C to abort or Enter to continue as root. Set LEIN_ROOT to disable this warning. Downloading Leiningen to /root/.lein/self-installs/leiningen-2.7.1-standalone.jar now... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 618 0 618 0 0 309 0 --:--:-- 0:00:02 --:--:-- 207 100 14.6M 100 14.6M 0 0 326k 0 0:00:46 0:00:46 --:--:-- 279k Retrieving lein-ring/lein-ring/0.8.13/lein-ring-0.8.13.pom from clojars Retrieving org/clojure/clojure/1.2.1/clojure-1.2.1.pom from central Retrieving org/clojure/data.xml/0.0.6/data.xml-0.0.6.pom from central Retrieving org/clojure/pom.contrib/0.0.25/pom.contrib-0.0.25.pom from central Retrieving org/sonatype/oss/oss-parent/5/oss-parent-5.pom from central Retrieving org/clojure/clojure/1.3.0/clojure-1.3.0.pom from central Retrieving leinjacker/leinjacker/0.4.1/leinjacker-0.4.1.pom from clojars Retrieving org/clojure/core.contracts/0.0.1/core.contracts-0.0.1.pom from central Retrieving org/clojure/pom.contrib/0.0.26/pom.contrib-0.0.26.pom from central Retrieving org/clojure/core.unify/0.5.3/core.unify-0.5.3.pom from central Retrieving org/clojure/clojure/1.4.0/clojure-1.4.0.pom from central Retrieving org/clojure/clojure/1.2.1/clojure-1.2.1.jar from central Retrieving org/clojure/core.contracts/0.0.1/core.contracts-0.0.1.jar from central Retrieving org/clojure/data.xml/0.0.6/data.xml-0.0.6.jar from central Retrieving org/clojure/core.unify/0.5.3/core.unify-0.5.3.jar from central Retrieving org/clojure/clojure/1.2.1/clojure-1.2.1.jar from clojars
Une fois le projet Clojure compilé, vous pouvez passer à l'étape suivante.
Configurer l'environnement de l'application Web Clojure
Ensuite, vous devrez créer une structure de répertoires pour l'application Web Clojure. Vous pouvez le faire avec la commande suivante :
mkdir -p /var/www/html/do-clojure-web/app/db
Ensuite, copiez les fichiers de l'application Clojure dans le répertoire ci-dessus :
cp /root/do-clojure-web/target/do-clojure-web-0.1.0-standalone.jar /var/www/html/do-clojure-web/app/
Ensuite, donnez les autorisations appropriées au répertoire de l'application Clojure avec la commande suivante :
chown -R www-data:www-data /var/www/html/do-clojure-web/
Ensuite, créez un symbole de l'application Web clojure avec la commande suivante :
cd /var/www/html/do-clojure-web/app/
ln -s do-clojure-web-0.1.0-standalone.jar do-clojure-web.jar
L'application Web Clojure est maintenant prête à être utilisée. Vous pouvez vérifier s'il est en cours d'exécution ou non avec la commande suivante :
java -jar do-clojure-web.jar
Si tout va bien, vous devriez voir le résultat suivant :
2017-10-01 10:30:48.349:INFO:oejs.Server:jetty-7.x.y-SNAPSHOT 2017-10-01 10:30:48.590:INFO:oejs.AbstractConnector:Started [email protected]:5000
Configurer Nginx et le superviseur
Ensuite, vous devrez configurer Supervisor pour gérer les applications Clojure en tant que service. Vous pouvez le faire en créant le fichier do-clojure-web.conf sous le répertoire de configuration du superviseur, comme indiqué ci-dessous :
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/log/do-clojure-web.app.log
Enregistrez et fermez le fichier lorsque vous avez terminé.
Ensuite, vous devrez également configurer Nginx pour l'utiliser comme proxy inverse. Parce que l'application Web Clojure accepte uniquement les connexions de l'hôte local. Vous pouvez y accéder à distance à l'aide de Nginx. Pour ce faire, vous devrez configurer le fichier de configuration par défaut de Nginx :
nano /etc/nginx/sites-available/default
Modifiez le fichier comme indiqué ci-dessous :
upstream http_backend { server 127.0.0.1:5000; keepalive 32; } server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.html index.htm index.nginx-debian.html; server_name _; 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é, puis redémarrez Nginx et le service Supervisor pour appliquer toutes les modifications :
systemctl restart nginx
systemctl restart supervisor
Vous pouvez vérifier l'état de Nginx et de Supervisor avec la commande suivante :
systemctl status supervisor
Si tout va bien, vous devriez voir 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 Mon 2017-10-02 10:19:32 EDT; 22min ago Docs: http://supervisord.org Main PID: 397 (supervisord) Tasks: 19 (limit: 4915) CGroup: /system.slice/supervisor.service ??397 /usr/bin/python /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf ??446 /usr/bin/java -jar do-clojure-web.jar Oct 02 10:19:32 debian systemd[1]: Started Supervisor process control system for UNIX. Oct 02 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,656 CRIT Supervisor running as root (no user in config file) Oct 02 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,665 INFO Included extra file "/etc/supervisor/conf.d/do-clojure-web.conf" during p Oct 02 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,821 INFO RPC interface 'supervisor' initialized Oct 02 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,823 CRIT Server 'unix_http_server' running without any HTTP authentication checkin Oct 02 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,825 INFO supervisord started with pid 397 Oct 02 10:19:40 debian supervisord[397]: 2017-10-02 10:19:40,890 INFO spawned: 'do-clojure-web' with pid 446 Oct 02 10:19:41 debian supervisord[397]: 2017-10-02 10:19:41,893 INFO success: do-clojure-web entered RUNNING state, process has stayed up for
systemctl status nginx
Sortie :
? nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2017-10-02 10:19:35 EDT; 26min ago Docs: man:nginx(8) Process: 425 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 401 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 427 (nginx) Tasks: 2 (limit: 4915) CGroup: /system.slice/nginx.service ??427 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; ??429 nginx: worker process Oct 02 10:19:32 debian systemd[1]: Starting A high performance web server and a reverse proxy server... Oct 02 10:19:35 debian systemd[1]: nginx.service: Failed to read PID from file /run/nginx.pid: Invalid argument Oct 02 10:19:35 debian systemd[1]: Started A high performance web server and a reverse proxy server.
Accéder à l'application Web Clojure
Une fois que tout est correctement configuré, il est temps d'accéder à l'application Web Clojure via un navigateur Web.
Ouvrez votre navigateur Web et tapez l'URL http://votre-adresse-ip, vous serez redirigé vers la page d'accueil de l'application Web Clojure comme indiqué ci-dessous :
Maintenant, cliquez sur Ajouter un emplacement bouton, vous devriez voir l'image suivante :
Ici, fournissez les valeurs dans la valeur x et le champ de valeur y, puis cliquez sur soumettre l'emplacement bouton. Vous pouvez maintenant afficher vos emplacements soumis en cliquant sur Afficher tous les emplacements bouton. Vous devriez voir l'image suivante :
Conclusion
Dans l'article ci-dessus, nous avons appris à déployer l'application Web Clojure à l'aide de Supervisor et de lein. Nous avons également appris à accéder à une application Web Clojure à distance en configurant Nginx en tant que serveur proxy inverse. J'espère que vous pourrez désormais déployer facilement votre application personnalisée à l'aide de Clojure, Supervisor et lein. N'hésitez pas à demander quoi que ce soit si vous avez des questions.