Cómo implementar una aplicación web Clojure con Nginx en Ubuntu 20.04

1 mar 2021 7 min di lettura
Cómo implementar una aplicación web Clojure con Nginx en Ubuntu 20.04
Indice dei contenuti

Introducción

Clojure es un lenguaje de programación moderno, dinámico y poderoso en la plataforma Java. Está basado en el lenguaje de programación LISP y tiene compiladores que le permiten ejecutarse en entornos de ejecución Java y.Net. Clojure te ayuda a construir sistemas desde cero sin tocar directamente el código Java. Actualmente lo utilizan muchas grandes empresas, como Walmart y Puppet Lab.

En este tutorial, explicaremos cómo implementar una aplicación web Clojure en Ubuntu 20.04 LTS.

Prerrequisitos

  • Un servidor que ejecuta Ubuntu 20.04 LTS.
  • Un nombre de dominio válido apunta a la IP del servidor.

Si desea implementar una aplicación web Clojure en un servidor remoto, continúe leyendo; de lo contrario, omita el primer párrafo "Conexión al servidor" y lea el siguiente.

Conexión al servidor

Para acceder al servidor, necesita conocer la dirección IP. También necesitará su nombre de usuario y contraseña para la autenticación. Para conectarse al servidor como root, escriba el siguiente comando:

ssh root@IP_DEL_SERVER

A continuación, deberá ingresar la contraseña del usuario root.

Si no usa el usuario root, puede iniciar sesión con otro nombre de usuario usando el mismo comando, luego cambie root a su nombre de usuario:

ssh nome_utente@IP_DEL_SERVER

Luego se le pedirá que ingrese su contraseña de usuario.

El puerto estándar para conectarse a través de ssh es 22, si su servidor usa un puerto diferente, deberá especificarlo usando el parámetro -p, luego escriba el siguiente comando:

ssh nome_utente@IP_DEL_SERVER -p PORTA

Instalar dependencias

Antes de comenzar, se recomienda que actualice los paquetes del sistema a la última versión. Puede actualizarlos con el siguiente comando:

apt-get update -y

Una vez que todos los paquetes estén actualizados, instale Java y otros paquetes necesarios ejecutando el siguiente comando:

apt-get install git curl default-jdk -y

Una vez que todos los paquetes estén instalados, verifique la versión instalada de Java con el siguiente comando:

java -version

Debería obtener el siguiente resultado:

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)

Una vez hecho esto, puede continuar con el siguiente paso.

Instalar Nginx y Supervisor

A continuación, deberá instalar el servidor web Nginx y el supervisor en el sistema. Nginx es un servidor web que se utiliza para alojar aplicaciones en Internet. Supervisor es un sistema cliente /servidor que permite a sus usuarios monitorear y controlar una variedad de procesos en sistemas operativos basados en Linux.

Puede instalar ambos paquetes con el siguiente comando:

apt-get install nginx supervisor -y

Una vez instalados ambos paquetes, puede continuar con el siguiente paso.

Descarga la aplicación Clojure

Primero, deberá descargar la aplicación Clojure desde el repositorio de Git. Puede descargarlo ejecutando el siguiente comando:

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

Una vez que se complete la descarga, debería obtener el siguiente resultado:

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.

A continuación, deberá instalar Leiningen en su sistema. Leiningen es una herramienta de gestión de dependencias y automatización de compilación que se utiliza para crear proyectos escritos en el lenguaje de programación Clojure. Puede descargar el paquete binario de Leiningen con el siguiente comando curl:

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

Una vez que se complete la descarga, configure el permiso de ejecución con el siguiente comando:

chmod 755 /usr/bin/lein

A continuación, cambie el directorio a Clojure y compile el proyecto con el siguiente comando cd:

cd do-clojure-weblein uberjar
lein uberjar

Una vez que se ha compilado el proyecto, debería obtener el siguiente resultado:

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

Una vez hecho esto, puede continuar con el siguiente paso.

Crea una estructura de directorio para la aplicación Clojure

A continuación, deberá crear una estructura de directorio para la aplicación Clojure y colocar los archivos y el directorio requeridos en una ubicación específica.

Primero, cree una estructura de directorio con el siguiente comando mkdir:

mkdir -p /var/www/html/do-clojure-web/app/db

A continuación, copie la aplicación y la base de datos de Clojure en el directorio específico con el siguiente comando:

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/

Luego, configure los permisos y la propiedad apropiados con el siguiente comando chown:

chown -R www-data:www-data /var/www/html/do-clojure-web/
chmod -R 775 /var/www/html/do-clojure-web/

A continuación, cambie el directorio en la aplicación Clojure y cree un enlace simbólico de su aplicación clojure:

cd /var/www/html/do-clojure-web/app/
ln -s do-clojure-web-0.1.0-standalone.jar do-clojure-web.jar

Luego, verifique si su aplicación está funcionando o no ejecutando el siguiente comando:

java -jar do-clojure-web.jar

Con suerte, debería obtener el siguiente resultado:

2020-12-05 16:11:09.603:INFO:oejs.Server:jetty-7.xy-SNAPSHOT
 2020-12-05 16:11:09.730:INFO:oejs.AbstractConnector:Started [email protected]:5000

Una vez hecho esto, puede continuar con el siguiente paso.

Configurar el supervisor para la aplicación Clojure

Hay varias formas de administrar la aplicación Clojure como servicio. En este tutorial, usaremos Supervisor para administrar la aplicación Clojure. Puede configurarlo creando un archivo dentro del directorio de configuración de Supervisor.

Creemos el siguiente archivo con tu editor favorito, aquí usamos nano:

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

Agrega las siguientes líneas:

[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

Guarde y cierre el archivo, luego reinicie el servicio Supervisor para aplicar los cambios:

systemctl restart supervisor

A continuación, habilite el servicio Supervisor para que se inicie al reiniciar el sistema:

systemctl enable supervisor

Ahora puede verificar el estado del Supervisor con el siguiente comando:

systemctl status supervisor

Debería obtener el siguiente resultado:

● supervisor.service - Supervisor process control system for UNIX
 Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled)
 Active: active (running) since Sat 2020-12-05 16:12:48 CET; 6s ago
 Docs: http://supervisord.org
 Main PID: 6341 (supervisord)
 Tasks: 21 (limit: 2286)
 Memory: 101.1M
 CGroup: /system.slice/supervisor.service

En este punto, se inicia el servicio Supervisor y su aplicación está escuchando en el puerto 5000. Puede verificar esto con el siguiente comando:

ss -antpl | grep 5000

Debería obtener el siguiente resultado:

LISTEN 0 50 [::ffff:127.0.0.1]:5000 *:* users:(("java",pid=6359,fd=5))

Una vez hecho esto, puede continuar con el siguiente paso.

Configurar Nginx para la aplicación Clojure

A continuación, deberá configurar Nginx como un proxy inverso para servir la aplicación Clojure. Primero, cree un archivo de configuración de host virtual Nginx con el siguiente comando:

nano /etc/nginx/sites-available/clojure.conf

Agregue las siguientes líneas, modifique el parámetro server_name agregando su dominio:

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 tuo_dominio.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;
 }
 }

Guarde y cierre el archivo cuando termine. Luego, habilite el host virtual Nginx con el siguiente comando:

ln -s /etc/nginx/sites-available/clojure.conf /etc/nginx/sites-enabled/

Por lo tanto, verifique Nginx en busca de errores de sintaxis con el siguiente comando:

nginx -t

Debería obtener el siguiente resultado:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
 nginx: configuration file /etc/nginx/nginx.conf test is successful

Finalmente, reinicie el servicio Nginx para aplicar los cambios:

systemctl restart nginx

Una vez hecho esto, puede continuar con el inicio de sesión en la aplicación Clojure.

Inicie sesión en la aplicación Clojure

Ahora abra su navegador web e inicie sesión en la aplicación Clojure usando la URL http: // your_domain .com. Debería ver el panel de la aplicación Clojure.

Haga clic en el botón A DD una ubicación.

Proporcione los valores deseados y haga clic en el botón enviar ubicación.

Ahora, haga clic en el botón Ver todas las ubicaciones. Debería ver su ubicación agregada.

Conclusión

¡Felicidades! Ha implementado con éxito la aplicación Clojure con Nginx como proxy inverso en el servidor Ubuntu 20.04 LTS Focal Fossa. Ahora puede intentar distribuir su aplicación personalizada con Clojure.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.