GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come distribuire un'applicazione Web Clojure con Nginx su Ubuntu 20.04

Clojure è un linguaggio di programmazione moderno, dinamico e potente sulla piattaforma Java. Si basa sul linguaggio di programmazione LISP e dispone di compilatori che rendono possibile l'esecuzione in ambiente runtime Java e .Net. Clojure ti aiuta a costruire sistemi da zero senza toccare direttamente il codice Java. Attualmente è utilizzato da molte grandi aziende, tra cui Walmart e Puppet Lab.

In questo tutorial, spiegheremo come distribuire un'applicazione Web Clojure su Ubuntu 20.04.

Prerequisiti

  • Un server che esegue Ubuntu 20.04.
  • Un nome di dominio valido puntato all'IP del tuo server.
  • Una password di root è configurata sul server.

Per iniziare

Prima di iniziare, si consiglia di aggiornare i pacchetti di sistema all'ultima versione. Puoi aggiornarli con il seguente comando:

apt-get update -y

Una volta aggiornati tutti i pacchetti, installa Java e altri pacchetti richiesti eseguendo il comando seguente:

apt-get install git curl default-jdk -y

Una volta installati tutti i pacchetti, verifica la versione installata di Java con il seguente comando:

java -version

Dovresti ottenere il seguente output:

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 volta terminato, puoi procedere al passaggio successivo.

Installa Nginx e Supervisor

Successivamente, dovrai installare il server Web Nginx e Supervisor sul tuo sistema. Nginx è un server Web utilizzato per ospitare applicazioni su Internet. Supervisor è un sistema client/server che consente ai suoi utenti di monitorare e controllare una serie di processi su sistemi operativi basati su Linux.

Puoi installare entrambi i pacchetti con il seguente comando:

apt-get install nginx supervisor -y

Una volta installati entrambi i pacchetti, puoi procedere al passaggio successivo.

Scarica l'app Clojure

Innanzitutto, dovrai scaricare l'app Clojure dal repository Git. Puoi scaricarlo eseguendo il seguente comando:

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

Una volta completato il download, dovresti ottenere il seguente output:

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.

Successivamente, dovrai installare Leiningen nel tuo sistema. Leiningen è uno strumento di automazione della compilazione e gestione delle dipendenze utilizzato per la creazione di progetti scritti nel linguaggio di programmazione Clojure. Puoi scaricare il pacchetto binario Leiningen con il seguente comando:

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

Una volta completato il download, imposta il permesso di esecuzione con il seguente comando:

chmod 755 /usr/bin/lein

Quindi, cambia la directory in Clojure e compila il progetto con il seguente comando:

cd do-clojure-web
lein uberjar

Una volta che il progetto è stato compilato, dovresti ottenere il seguente output:

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 volta terminato, puoi procedere al passaggio successivo.

Crea una struttura di directory per l'applicazione Clojure

Successivamente, dovrai creare una struttura di directory per l'app Clojure e posizionare i file e le directory richiesti in una posizione specifica.

Innanzitutto, crea una struttura di directory con il seguente comando:

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

Quindi, copia l'app e il database Clojure nella directory specifica con il seguente 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/

Quindi, imposta le autorizzazioni e la proprietà appropriate con il seguente comando:

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

Quindi, cambia la directory nell'app Clojure e crea un collegamento simbolico della tua applicazione clojure:

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

Quindi, verifica se la tua applicazione funziona o meno eseguendo il comando seguente:

java -jar do-clojure-web.jar

Se tutto va bene, dovresti ottenere il seguente output:

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 volta terminato, puoi procedere al passaggio successivo.

Configura supervisore per applicazione Clojure

Esistono diversi modi per gestire l'applicazione Clojure come servizio. In questo tutorial utilizzeremo Supervisor per la gestione dell'app Clojure. Puoi configurarlo creando un file all'interno della directory di configurazione del supervisore:

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

Aggiungi le seguenti righe:

[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

Salva e chiudi il file, quindi riavvia il servizio Supervisore per applicare le modifiche:

systemctl restart supervisor

Quindi, abilita l'avvio del servizio Supervisore al riavvio del sistema:

systemctl enable supervisor

È ora possibile verificare lo stato del Supervisore con il seguente comando:

systemctl status supervisor

Dovresti ottenere il seguente output:

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

A questo punto il servizio Supervisor è avviato e la tua applicazione è in ascolto sulla porta 5000. Puoi verificarlo con il seguente comando:

ss -antpl | grep 5000

Dovresti ottenere il seguente output:

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

Una volta terminato, puoi procedere al passaggio successivo.

Configura Nginx per l'applicazione Clojure

Successivamente, dovrai configurare Nginx come proxy inverso per servire l'app Clojure. Innanzitutto, crea un file di configurazione dell'host virtuale Nginx con il seguente comando:

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

Aggiungi le seguenti righe:

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

Salva e chiudi il file quando hai finito. Quindi, abilita l'host virtuale Nginx con il seguente comando:

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

Quindi, verifica Nginx per eventuali errori di sintassi con il seguente comando:

nginx -t

Dovresti ottenere il seguente output:

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

Infine, riavvia il servizio Nginx per applicare le modifiche:

systemctl restart nginx

Una volta terminato, puoi procedere con l'accesso all'app Clojure.

Accedi all'applicazione Clojure

Ora apri il tuo browser web e accedi all'applicazione Clojure utilizzando l'URL http://clojure.example.com . Dovresti vedere la dashboard dell'applicazione Clojure nella schermata seguente:

Fai clic su Aggiungi una posizione pulsante. Dovresti vedere la seguente schermata:

Fornisci i valori desiderati e fai clic su invia pulsante posizione. Dovresti vedere la seguente schermata:

Ora, fai clic su Visualizza tutte le posizioni pulsante. Dovresti vedere la tua posizione aggiunta nella schermata seguente:

Conclusione

Congratulazioni! hai distribuito con successo l'app Clojure con Nginx come proxy inverso sul server Ubuntu 20.04. Ora puoi provare a distribuire la tua applicazione personalizzata con Clojure.


Ubuntu
  1. Come distribuire le applicazioni Node.js con pm2 e Nginx su Ubuntu

  2. Come distribuire Modsecurity con Nginx su Ubuntu 20.04 LTS

  3. Distribuisci Modsecurity con Nginx su Ubuntu 20.04 LTS

  4. Come proteggere Nginx con Letsencrypt su Ubuntu 20.04

  5. Come distribuire l'applicazione Flask con Nginx e Gunicorn su Ubuntu 20.04

Come installare OSClass con Nginx su Ubuntu 20.04

Come distribuire un'applicazione Web Clojure con Nginx su Ubuntu 20.04

Come distribuire Ghost Blog con Nginx su Ubuntu 20.04

Come installare Nginx con ModSecurity su Ubuntu 15.04

Come installare Nextcloud 13 su Ubuntu 16.04 con Nginx

Come distribuire l'applicazione Laravel con Nginx su Ubuntu?