Clojure adalah bahasa pemrograman tujuan umum modern untuk JVM yang berfokus pada pemrograman bersamaan yang ditemukan di sistem operasi. Clojure memungkinkan Anda memanfaatkan infrastruktur JVM yang ada, termasuk alat, pustaka, dan server aplikasi.
Panduan ini akan memandu proses penerapan aplikasi web sederhana di Clojure menggunakan supervisor dan Nginx.
Persyaratan
- Server yang menjalankan Ubuntu 16.04.
- Pengaturan kata sandi root di server Anda.
Memulai
Sebelum memulai, disarankan untuk memperbarui paket Anda ke versi terbaru dengan perintah berikut:
apt-get update -y
apt-get upgrade -y
Setelah semua paket diperbarui, mulai ulang server Anda untuk menerapkan semua perubahan ini.
reboot
Selanjutnya, instal beberapa paket yang diperlukan seperti, git, curl, Java ke server Anda dengan perintah berikut:
apt-get install git curl openjdk-8-jre-headless -y
Setelah semua paket yang diperlukan diinstal, Anda dapat memverifikasi versi JAVA dengan perintah berikut:
java -version
Anda akan melihat versi JAVA di output berikut
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)
Setelah selesai, Anda dapat melanjutkan untuk menginstal Nginx dan Supervisor.
Instal Nginx dan Supervisor
Secara default, Nginx dan Supervisor tersedia di repositori Ubuntu 16.04. Anda dapat menginstalnya hanya dengan menjalankan perintah berikut:
apt-get install nginx supervisor -y
Setelah instalasi selesai, mulai layanan Nginx dan Supervisor dan aktifkan mereka untuk memulai saat boot dengan perintah berikut:
systemctl start nginx
systemctl start supervisor
systemctl enable nginx
systemctl enable supervisor
Setelah selesai, Anda dapat melanjutkan ke langkah berikutnya.
Unduh Aplikasi Clojure
Pertama, Anda perlu mengunduh contoh proyek Clojure dari repositori git. Anda dapat dengan mudah mengunduhnya dengan utilitas baris perintah git clone seperti yang ditunjukkan di bawah ini:
git clone https://github.com/do-community/do-clojure-web.git
Langkah selanjutnya adalah mengkompilasi dan menjalankan proyek Clojure ini menggunakan Leiningen. Leiningen adalah manajemen ketergantungan dan membangun alat otomatisasi yang dapat digunakan untuk mengkompilasi aplikasi Clojure. Anda dapat mengunduhnya dengan perintah curl seperti yang ditunjukkan di bawah ini:
curl https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein -o /usr/bin/lein
Selanjutnya, berikan izin yang tepat untuk alat yang diunduh dengan perintah berikut:
chmod 755 /usr/bin/lein
Sekarang, jalankan perintah berikut untuk mengkompilasi proyek Penutupan:
cd do-clojure-web
lein uberjar
Anda akan melihat output berikut:
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
Setelah proyek Clojure dikompilasi, Anda dapat melanjutkan ke langkah berikutnya.
Menyiapkan Lingkungan Aplikasi Web Clojure
Selanjutnya, Anda perlu membuat struktur direktori untuk aplikasi web Clojure. Anda dapat melakukannya dengan perintah berikut:
mkdir -p /var/www/html/do-clojure-web/app/db
Selanjutnya, salin file aplikasi Clojure ke direktori di atas:
cp /root/do-clojure-web/target/do-clojure-web-0.1.0-standalone.jar /var/www/html/do-clojure-web/app/
Selanjutnya, berikan izin yang tepat ke direktori aplikasi Clojure dengan perintah berikut:
chown -R www-data:www-data /var/www/html/do-clojure-web/
Selanjutnya, buatlah simbolink aplikasi web clojure dengan perintah berikut:
cd /var/www/html/do-clojure-web/app/
ln -s do-clojure-web-0.1.0-standalone.jar do-clojure-web.jar
Aplikasi web Clojure sekarang siap digunakan. Anda dapat memeriksa apakah itu berjalan atau tidak dengan perintah berikut:
java -jar do-clojure-web.jar
Jika semuanya baik-baik saja, Anda akan melihat output berikut:
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
Konfigurasi Nginx dan Supervisor
Selanjutnya, Anda perlu mengonfigurasi Supervisor untuk mengelola aplikasi Clojure sebagai layanan. Anda dapat melakukannya dengan membuat file do-clojure-web.conf di bawah direktori konfigurasi Supervisor seperti yang ditunjukkan di bawah ini:
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/log/do-clojure-web.app.log
Simpan dan tutup file setelah Anda selesai.
Selanjutnya, Anda juga perlu mengonfigurasi Nginx untuk digunakan sebagai proxy terbalik. Karena aplikasi web Clojure hanya menerima koneksi dari localhost. Anda dapat mengaksesnya dari lokasi yang jauh menggunakan Nginx. Untuk melakukannya, Anda perlu mengonfigurasi file konfigurasi default Nginx:
nano /etc/nginx/sites-available/default
Ubah file seperti gambar di bawah ini:
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; } }
Simpan dan tutup file setelah Anda selesai, lalu mulai ulang layanan Nginx dan Supervisor untuk menerapkan semua perubahan:
systemctl restart nginx
systemctl restart supervisor
Anda dapat memverifikasi status Nginx dan Supervisor dengan perintah berikut:
systemctl status supervisor
Jika semuanya baik-baik saja, Anda akan melihat 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 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
Keluaran:
? 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.
Akses Aplikasi Web Clojure
Setelah semuanya dikonfigurasi dengan benar, saatnya mengakses aplikasi web Clojure melalui browser web.
Buka browser web Anda dan ketik URL http://your-ip-address, Anda akan diarahkan ke halaman beranda aplikasi web Clojure seperti yang ditunjukkan di bawah ini:
Sekarang, klik Tambahkan Lokasi tombol, Anda akan melihat gambar berikut:
Di sini, berikan nilai dalam nilai x dan bidang nilai y lalu klik kirim lokasi tombol. Sekarang Anda dapat melihat lokasi yang Anda kirimkan dengan mengeklik Lihat Semua Lokasi tombol. Anda akan melihat gambar berikut:
Kesimpulan
Pada artikel di atas, kita mempelajari cara men-deploy aplikasi web Clojure menggunakan Supervisor dan lein. Kami juga mempelajari cara mengakses aplikasi web Clojure dari lokasi yang jauh dengan mengatur Nginx sebagai server proxy terbalik. Saya harap Anda sekarang dapat dengan mudah menerapkan aplikasi kustom Anda menggunakan Clojure, Supervisor, dan lein. Jangan ragu untuk bertanya apa pun jika Anda memiliki pertanyaan.