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.