GNU/Linux >> Belajar Linux >  >> Ubuntu

Cara Menyebarkan Aplikasi Web Clojure dengan Nginx di Ubuntu 20.04

Clojure adalah bahasa pemrograman modern, dinamis, dan kuat di platform Java. Ini didasarkan pada bahasa pemrograman LISP dan memiliki kompiler yang memungkinkan untuk dijalankan di lingkungan runtime Java dan .Net. Clojure membantu Anda membangun sistem dari awal tanpa menyentuh kode Java secara langsung. Saat ini, digunakan oleh banyak perusahaan besar termasuk, Walmart dan Lab Wayang.

Dalam tutorial ini, kami akan menjelaskan cara men-deploy Aplikasi Web Clojure di Ubuntu 20.04.

Prasyarat

  • Server yang menjalankan Ubuntu 20.04.
  • Nama domain valid yang ditunjukkan dengan IP server Anda.
  • Sandi root dikonfigurasi untuk server.

Memulai

Sebelum memulai, disarankan untuk memperbarui paket sistem Anda ke versi terbaru. Anda dapat memperbaruinya dengan perintah berikut:

apt-get update -y

Setelah semua paket diperbarui, instal Java dan paket lain yang diperlukan dengan menjalankan perintah berikut:

apt-get install git curl default-jdk -y

Setelah semua paket diinstal, verifikasi versi Java yang diinstal dengan perintah berikut:

java -version

Anda akan mendapatkan output berikut:

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)

Setelah selesai, Anda dapat melanjutkan ke langkah berikutnya.

Instal Nginx dan Supervisor

Selanjutnya, Anda perlu menginstal server web Nginx dan Supervisor ke sistem Anda. Nginx adalah server web yang digunakan untuk meng-host aplikasi di internet. Supervisor adalah sistem klien/server yang memungkinkan penggunanya untuk memantau dan mengontrol sejumlah proses pada sistem operasi berbasis Linux.

Anda dapat menginstal kedua paket dengan perintah berikut:

apt-get install nginx supervisor -y

Setelah kedua paket diinstal, Anda dapat melanjutkan ke langkah berikutnya.

Unduh Aplikasi Clojure

Pertama, Anda perlu mengunduh aplikasi Clojure dari repositori Git. Anda dapat mengunduhnya dengan menjalankan perintah berikut:

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

Setelah unduhan selesai, Anda akan mendapatkan output berikut:

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.

Selanjutnya, Anda perlu menginstal Leiningen di sistem Anda. Leiningen adalah alat manajemen otomasi dan ketergantungan build yang digunakan untuk membuat proyek yang ditulis dalam bahasa pemrograman Clojure. Anda dapat mengunduh paket biner Leiningen dengan perintah berikut:

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

Setelah unduhan selesai, atur izin eksekusi dengan perintah berikut:

chmod 755 /usr/bin/lein

Selanjutnya, ubah direktori menjadi Clojure dan kompilasi proyek dengan perintah berikut:

cd do-clojure-web
lein uberjar

Setelah proyek dikompilasi, Anda akan mendapatkan output berikut:

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

Setelah selesai, Anda dapat melanjutkan ke langkah berikutnya.

Buat Struktur Direktori untuk Aplikasi Clojure

Selanjutnya, Anda perlu membuat struktur direktori untuk aplikasi Clojure dan menempatkan file dan direktori yang diperlukan ke lokasi tertentu.

Pertama, buat struktur direktori dengan perintah berikut:

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

Selanjutnya, salin aplikasi dan database Clojure Anda ke direktori tertentu dengan perintah berikut:

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/

Selanjutnya, atur izin dan kepemilikan yang tepat dengan perintah berikut:

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

Selanjutnya, ubah direktori ke aplikasi Clojure dan buat tautan simbolis dari aplikasi clojure Anda:

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

Selanjutnya, verifikasi apakah aplikasi Anda berfungsi atau tidak dengan menjalankan perintah berikut:

java -jar do-clojure-web.jar

Jika semuanya baik-baik saja, Anda akan mendapatkan output berikut:

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

Setelah selesai, Anda dapat melanjutkan ke langkah berikutnya.

Konfigurasi Supervisor untuk Aplikasi Clojure

Ada beberapa cara untuk mengelola aplikasi Clojure sebagai layanan. Dalam tutorial ini, kita akan menggunakan Supervisor untuk mengelola aplikasi Clojure. Anda dapat mengonfigurasinya dengan membuat file di dalam direktori konfigurasi Supervisor:

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

Tambahkan baris berikut:

[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

Simpan dan tutup file kemudian restart layanan Supervisor untuk menerapkan perubahan:

systemctl restart supervisor

Selanjutnya, aktifkan layanan Supervisor untuk memulai saat reboot sistem:

systemctl enable supervisor

Anda sekarang dapat memverifikasi status Supervisor dengan perintah berikut:

systemctl status supervisor

Anda akan mendapatkan output berikut:

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

Pada titik ini, layanan Supervisor dimulai dan aplikasi Anda mendengarkan pada port 5000. Anda dapat memeriksanya dengan perintah berikut:

ss -antpl | grep 5000

Anda akan mendapatkan output berikut:

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

Setelah selesai, Anda dapat melanjutkan ke langkah berikutnya.

Konfigurasi Nginx untuk Aplikasi Clojure

Selanjutnya, Anda perlu mengonfigurasi Nginx sebagai proxy terbalik untuk melayani aplikasi Clojure. Pertama, buat file konfigurasi virtual host Nginx dengan perintah berikut:

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

Tambahkan baris berikut:

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

Simpan dan tutup file setelah Anda selesai. Kemudian, aktifkan virtual host Nginx dengan perintah berikut:

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

Selanjutnya, verifikasi Nginx untuk kesalahan sintaks dengan perintah berikut:

nginx -t

Anda akan mendapatkan output berikut:

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

Terakhir, restart layanan Nginx untuk menerapkan perubahan:

systemctl restart nginx

Setelah selesai, Anda dapat melanjutkan untuk mengakses aplikasi Clojure.

Akses Aplikasi Clojure

Sekarang, buka browser web Anda dan akses aplikasi Clojure menggunakan URL http://clojure.example.com . Anda akan melihat dasbor aplikasi Clojure di layar berikut:

Klik Tambahkan Lokasi tombol. Anda akan melihat layar berikut:

Berikan nilai yang Anda inginkan dan klik kirim tombol lokasi. Anda akan melihat layar berikut:

Sekarang, klik pada Lihat Semua Lokasi tombol. Anda akan melihat lokasi Anda yang ditambahkan di layar berikut:

Kesimpulan

Selamat! Anda telah berhasil menggunakan aplikasi Clojure dengan Nginx sebagai proxy terbalik di server Ubuntu 20.04. Sekarang Anda dapat mencoba menerapkan aplikasi khusus Anda dengan Clojure.


Ubuntu
  1. Cara menyebarkan Aplikasi Node.js dengan pm2 dan Nginx di Ubuntu

  2. Terapkan Modsecurity dengan Nginx di Ubuntu 20.04 LTS

  3. Cara Mengamankan Nginx dengan Letsencrypt di Ubuntu 20.04

  1. Cara Menginstal MediaWiki dengan Nginx di Ubuntu 16.04

  2. Cara Menyebarkan Modsecurity dengan Nginx di Ubuntu 20.04 LTS

  3. Cara Deploy Aplikasi Flask dengan Nginx dan Gunicorn di Ubuntu 20.04

  1. Cara Menginstal Magento dengan Nginx di Ubuntu 15.10

  2. Cara Menginstal Mailpile dengan Nginx di Ubuntu 15.10

  3. Cara Instal Redmine 3 dengan Nginx di Ubuntu 15.10