GNU/Linux >> Tutoriales Linux >  >> Ubuntu

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

Clojure es un lenguaje de programación moderno, dinámico y poderoso en la plataforma Java. Se basa en el lenguaje de programación LISP y tiene compiladores que hacen posible su ejecución en entornos de tiempo de ejecución Java y .Net. Clojure lo ayuda a construir sistemas desde cero sin tocar el código Java directamente. Actualmente, lo utilizan muchas grandes empresas, incluidas Walmart y Puppet Lab.

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

Requisitos

  • Un servidor con Ubuntu 20.04.
  • Un nombre de dominio válido apuntado con la IP de su servidor.
  • Se configura una contraseña de root en el servidor.

Cómo empezar

Antes de comenzar, se recomienda actualizar los paquetes de su 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ías 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 que haya terminado, puede continuar con el siguiente paso.

Instalar Nginx y Supervisor

A continuación, deberá instalar el servidor web Nginx y Supervisor en su 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 serie de procesos en sistemas operativos basados ​​en Linux.

Puede instalar ambos paquetes con el siguiente comando:

apt-get install nginx supervisor -y

Una vez que ambos paquetes estén instalados, puede continuar con el siguiente paso.

Descargar aplicación Clojure

Primero, deberá descargar la aplicación Clojure del 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 compilaciones 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 https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein -o /usr/bin/lein

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

chmod 755 /usr/bin/lein

A continuación, cambia el directorio a Clojure y compila el proyecto con el siguiente comando:

cd do-clojure-web
lein uberjar

Una vez que se haya 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 que haya terminado, puede continuar con el siguiente paso.

Crear estructura de directorio para la aplicación Clojure

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

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

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

A continuación, copie su aplicación y 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/

A continuación, establezca los permisos y la propiedad adecuados con el siguiente comando:

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 a 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

A continuación, verifique si su aplicación funciona o no ejecutando el siguiente comando:

java -jar do-clojure-web.jar

Si todo está bien, debería obtener el siguiente resultado:

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

Una vez que haya terminado, puede continuar con el siguiente paso.

Configurar supervisor para la aplicación Clojure

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

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

Agregue 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 de Supervisor para aplicar los cambios:

systemctl restart supervisor

A continuación, habilite el servicio de 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ías 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 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 >

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

ss -antpl | grep 5000

Deberías obtener el siguiente resultado:

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

Una vez que haya terminado, 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:

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

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

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

Luego, verifique el Nginx para cualquier error de sintaxis con el siguiente comando:

nginx -t

Deberías 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 que haya terminado, puede proceder a acceder a la aplicación Clojure.

Acceder a la aplicación Clojure

Ahora, abra su navegador web y acceda a la aplicación Clojure usando la URL http://clojure.example.com . Debería ver el panel de la aplicación Clojure en la siguiente pantalla:

Haga clic en Agregar una ubicación botón. Debería ver la siguiente pantalla:

Proporcione los valores deseados y haga clic en enviar botón de ubicación. Debería ver la siguiente pantalla:

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

Conclusión

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


Ubuntu
  1. Cómo implementar aplicaciones Node.js con pm2 y Nginx en Ubuntu

  2. Cómo implementar Modsecurity con Nginx en Ubuntu 20.04 LTS

  3. Implemente Modsecurity con Nginx en Ubuntu 20.04 LTS

  4. Cómo proteger Nginx con Letsencrypt en Ubuntu 20.04

  5. Cómo implementar la aplicación Flask con Nginx y Gunicorn en Ubuntu 20.04

Cómo instalar OSClass con Nginx en Ubuntu 20.04

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

Cómo implementar Ghost Blog con Nginx en Ubuntu 20.04

Cómo instalar Nginx con ModSecurity en Ubuntu 15.04

Cómo instalar Nextcloud 13 en Ubuntu 16.04 con Nginx

¿Cómo implementar la aplicación Laravel con Nginx en Ubuntu?