Clojure è un moderno linguaggio di programmazione generico per JVM che si concentra sulla programmazione simultanea che si trova nei sistemi operativi. Clojure consente di utilizzare l'infrastruttura JVM esistente, inclusi strumenti, librerie e server delle applicazioni.
Questa guida illustrerà il processo di distribuzione di una semplice applicazione Web in Clojure utilizzando supervisor e Nginx.
Requisiti
- Un server che esegue Ubuntu 16.04.
- Una configurazione della password di root sul tuo server.
Per iniziare
Prima di iniziare, si consiglia di aggiornare il pacchetto all'ultima versione con il seguente comando:
apt-get update -y
apt-get upgrade -y
Una volta aggiornati tutti i pacchetti, riavvia il server per applicare tutte queste modifiche.
reboot
Quindi, installa alcuni pacchetti richiesti come, git, curl, Java sul tuo server con il seguente comando:
apt-get install git curl openjdk-8-jre-headless -y
Una volta installati tutti i pacchetti richiesti, puoi verificare la versione di JAVA con il seguente comando:
java -version
Dovresti vedere la versione JAVA nel seguente output
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 volta terminato, puoi procedere con l'installazione di Nginx e Supervisor.
Installa Nginx e Supervisor
Per impostazione predefinita, Nginx e Supervisor sono disponibili nel repository di Ubuntu 16.04. Puoi installarli semplicemente eseguendo il seguente comando:
apt-get install nginx supervisor -y
Una volta completata l'installazione, avvia il servizio Nginx e Supervisor e abilita l'avvio all'avvio con il seguente comando:
systemctl start nginx
systemctl start supervisor
systemctl enable nginx
systemctl enable supervisor
Una volta terminato, puoi procedere al passaggio successivo.
Scarica l'app Clojure
Innanzitutto, dovrai scaricare il progetto Clojure di esempio dal repository git. Puoi scaricarlo facilmente con l'utilità della riga di comando git clone come mostrato di seguito:
git clone https://github.com/do-community/do-clojure-web.git
Il prossimo passo è compilare ed eseguire questo progetto Clojure usando Leiningen. Leiningen è uno strumento di gestione delle dipendenze e automazione della compilazione che può essere utilizzato per compilare l'app Clojure. Puoi scaricarlo con il comando curl come mostrato di seguito:
curl https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein -o /usr/bin/lein
Quindi, dai le autorizzazioni appropriate allo strumento scaricato con il seguente comando:
chmod 755 /usr/bin/lein
Ora, esegui il seguente comando per compilare il progetto di chiusura:
cd do-clojure-web
lein uberjar
Dovresti vedere il seguente output:
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 volta compilato il progetto Clojure, puoi procedere al passaggio successivo.
Configurazione dell'ambiente dell'app Web Clojure
Successivamente, dovrai creare una struttura di directory per l'applicazione Web Clojure. Puoi farlo con il seguente comando:
mkdir -p /var/www/html/do-clojure-web/app/db
Quindi, copia i file dell'applicazione Clojure nella directory sopra:
cp /root/do-clojure-web/target/do-clojure-web-0.1.0-standalone.jar /var/www/html/do-clojure-web/app/
Quindi, dai le autorizzazioni appropriate alla directory dell'app Clojure con il seguente comando:
chown -R www-data:www-data /var/www/html/do-clojure-web/
Quindi, crea un simbolo dell'applicazione web clojure con il seguente comando:
cd /var/www/html/do-clojure-web/app/
ln -s do-clojure-web-0.1.0-standalone.jar do-clojure-web.jar
L'app Web Clojure è ora pronta per l'uso. Puoi verificare se è in esecuzione o meno con il seguente comando:
java -jar do-clojure-web.jar
Se tutto va bene, dovresti vedere il seguente output:
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
Configura Nginx e Supervisor
Successivamente, dovrai configurare Supervisor per gestire le applicazioni Clojure come servizio. Puoi farlo creando il file do-clojure-web.conf nella directory di configurazione del supervisore come mostrato di seguito:
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/log/do-clojure-web.app.log
Salva e chiudi il file quando hai finito.
Successivamente, dovrai anche configurare Nginx da utilizzare come proxy inverso. Perché l'applicazione Web Clojure accetta connessioni solo da localhost. Puoi accedervi da una posizione remota usando Nginx. Per fare ciò, dovrai configurare il file di configurazione predefinito di Nginx:
nano /etc/nginx/sites-available/default
Modifica il file come mostrato di seguito:
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; } }
Salva e chiudi il file al termine, quindi riavvia il servizio Nginx e Supervisor per applicare tutte le modifiche:
systemctl restart nginx
systemctl restart supervisor
Puoi verificare lo stato di Nginx e Supervisor con il seguente comando:
systemctl status supervisor
Se tutto va bene, dovresti vedere 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 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
Uscita:
? 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.
Accedi all'app Web Clojure
Una volta che tutto è configurato correttamente, è il momento di accedere all'applicazione web Clojure tramite un browser web.
Apri il tuo browser web e digita l'URL http://your-ip-address, verrai reindirizzato alla home page dell'app web Clojure come mostrato di seguito:
Ora, fai clic su Aggiungi posizione pulsante, dovresti vedere la seguente immagine:
Qui, fornisci i valori nel valore x e nel campo del valore y, quindi fai clic su invia posizione pulsante. Ora puoi visualizzare le sedi inviate facendo clic su Visualizza tutte le sedi pulsante. Dovresti vedere la seguente immagine:
Conclusione
Nell'articolo precedente, abbiamo appreso come distribuire l'applicazione Web Clojure utilizzando Supervisor e lein. Abbiamo anche imparato come accedere a un'applicazione Web Clojure da una posizione remota configurando Nginx come server proxy inverso. Spero che ora tu possa distribuire facilmente la tua applicazione personalizzata usando Clojure, Supervisor e lein. Sentiti libero di chiedere qualsiasi cosa in caso di domande.