Clojure es un lenguaje de programación moderno de propósito general para JVM que se enfoca en la programación concurrente que se encuentra en los sistemas operativos. Clojure le permite hacer uso de la infraestructura JVM existente, incluidas herramientas, bibliotecas y servidores de aplicaciones.
Esta guía lo guiará a través del proceso de implementación de una aplicación web simple en Clojure usando supervisor y Nginx.
Requisitos
- Un servidor con Ubuntu 16.04.
- Una configuración de contraseña raíz en su servidor.
Cómo empezar
Antes de comenzar, se recomienda actualizar su paquete a la última versión con el siguiente comando:
apt-get update -y
apt-get upgrade -y
Una vez que todos los paquetes estén actualizados, reinicie su servidor para aplicar todos estos cambios.
reboot
A continuación, instale algunos paquetes necesarios como git, curl, Java en su servidor con el siguiente comando:
apt-get install git curl openjdk-8-jre-headless -y
Una vez que todos los paquetes requeridos estén instalados, puede verificar la versión de JAVA con el siguiente comando:
java -version
Debería ver la versión de JAVA en el siguiente resultado
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)
Una vez que haya terminado, puede proceder a instalar Nginx y Supervisor.
Instalar Nginx y Supervisor
De forma predeterminada, Nginx y Supervisor están disponibles en el repositorio de Ubuntu 16.04. Puede instalarlos simplemente ejecutando el siguiente comando:
apt-get install nginx supervisor -y
Una vez que se complete la instalación, inicie el servicio Nginx y Supervisor y habilítelos para que se inicien en el momento del arranque con el siguiente comando:
systemctl start nginx
systemctl start supervisor
systemctl enable nginx
systemctl enable supervisor
Una vez que haya terminado, puede continuar con el siguiente paso.
Descargar aplicación Clojure
Primero, deberá descargar el proyecto Clojure de muestra del repositorio de git. Puede descargarlo fácilmente con la utilidad de línea de comando git clone como se muestra a continuación:
git clone https://github.com/do-community/do-clojure-web.git
El siguiente paso es compilar y ejecutar este proyecto Clojure utilizando Leiningen. Leiningen es una herramienta de automatización de compilación y administración de dependencias que se puede usar para compilar la aplicación Clojure. Puede descargarlo con el comando curl como se muestra a continuación:
curl https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein -o /usr/bin/lein
A continuación, otorgue los permisos adecuados a la herramienta descargada con el siguiente comando:
chmod 755 /usr/bin/lein
Ahora, ejecute el siguiente comando para compilar el proyecto Closure:
cd do-clojure-web
lein uberjar
Debería ver el siguiente resultado:
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
Una vez compilado el proyecto Clojure, puede continuar con el siguiente paso.
Configurar el entorno de la aplicación web Clojure
A continuación, deberá crear una estructura de directorios para la aplicación web Clojure. Puedes hacer esto con el siguiente comando:
mkdir -p /var/www/html/do-clojure-web/app/db
A continuación, copie los archivos de la aplicación Clojure en el directorio anterior:
cp /root/do-clojure-web/target/do-clojure-web-0.1.0-standalone.jar /var/www/html/do-clojure-web/app/
A continuación, otorgue los permisos adecuados al directorio de la aplicación Clojure con el siguiente comando:
chown -R www-data:www-data /var/www/html/do-clojure-web/
A continuación, cree un enlace simbólico de la aplicación web clojure con el siguiente comando:
cd /var/www/html/do-clojure-web/app/
ln -s do-clojure-web-0.1.0-standalone.jar do-clojure-web.jar
La aplicación web Clojure ahora está lista para usar. Puede verificar si se está ejecutando o no con el siguiente comando:
java -jar do-clojure-web.jar
Si todo está bien, debería ver el siguiente resultado:
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
Configurar Nginx y Supervisor
A continuación, deberá configurar Supervisor para administrar las aplicaciones de Clojure como un servicio. Puede hacer esto creando el archivo do-clojure-web.conf en el directorio de configuración de Supervisor como se muestra a continuación:
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/log/do-clojure-web.app.log
Guarde y cierre el archivo cuando haya terminado.
A continuación, también deberá configurar Nginx para usarlo como proxy inverso. Porque la aplicación web Clojure acepta conexiones solo desde el host local. Puede acceder desde una ubicación remota usando Nginx. Para hacerlo, deberá configurar el archivo de configuración predeterminado de Nginx:
nano /etc/nginx/sites-available/default
Cambie el archivo como se muestra a continuación:
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; } }
Guarde y cierre el archivo cuando haya terminado, luego reinicie el servicio Nginx y Supervisor para aplicar todos los cambios:
systemctl restart nginx
systemctl restart supervisor
Puede verificar el estado de Nginx y Supervisor con el siguiente comando:
systemctl status supervisor
Si todo está bien, debería ver 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 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
Salida:
? 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.
Acceder a la aplicación web Clojure
Una vez que todo esté configurado correctamente, es hora de acceder a la aplicación web Clojure a través de un navegador web.
Abra su navegador web y escriba la URL http://su-dirección-ip, será redirigido a la página de inicio de la aplicación web Clojure como se muestra a continuación:
Ahora, haga clic en Agregar ubicación botón, debería ver la siguiente imagen:
Aquí, proporcione los valores en el campo valor x y valor y, luego haga clic en enviar ubicación botón. Ahora puede ver las ubicaciones enviadas haciendo clic en Ver todas las ubicaciones. botón. Deberías ver la siguiente imagen:
Conclusión
En el artículo anterior, aprendimos cómo implementar la aplicación web Clojure usando Supervisor y lein. También aprendimos cómo acceder a una aplicación web de Clojure desde una ubicación remota configurando Nginx como un servidor proxy inverso. Espero que ahora pueda implementar fácilmente su aplicación personalizada utilizando Clojure, Supervisor y lein. Siéntase libre de preguntar cualquier cosa si tiene alguna pregunta.