Cách triển khai ứng dụng web Clojure trên Debian 9

theanh

Administrator
Nhân viên
Clojure là ngôn ngữ lập trình hiện đại, đa năng dành cho JVM, tập trung vào lập trình đồng thời có trong các hệ điều hành. Clojure cho phép bạn sử dụng cơ sở hạ tầng JVM hiện có, bao gồm các công cụ, thư viện và máy chủ ứng dụng.

Hướng dẫn này sẽ hướng dẫn quy trình triển khai một ứng dụng web đơn giản trong Clojure bằng cách sử dụng trình giám sát và Nginx.

Yêu cầu
  • Máy chủ chạy Ubuntu 16.04.
  • Thiết lập mật khẩu gốc trên máy chủ của bạn.

Bắt đầu​

Trước khi bắt đầu, bạn nên cập nhật gói của mình lên phiên bản mới nhất bằng lệnh sau:
Mã:
apt-get update -y
apt-get upgrade -y
Sau khi tất cả các gói được cập nhật, hãy khởi động lại máy chủ của bạn để áp dụng tất cả các thay đổi này.
Mã:
reboot
Tiếp theo, cài đặt một số gói cần thiết như git, curl, Java vào máy chủ của bạn bằng lệnh sau:
Mã:
apt-get install git curl openjdk-8-jre-headless -y
Sau khi tất cả các gói cần thiết được cài đặt, bạn có thể xác minh phiên bản JAVA bằng lệnh sau:
Mã:
java -version
Bạn sẽ thấy phiên bản JAVA trong đầu ra sau
Mã:
openjdk version "1.8.0_131"Môi trường chạy thời gian thực OpenJDK (bản dựng 1.8.0_131-8u131-b11-2-b11)Máy ảo máy chủ OpenJDK 64-Bit (bản dựng 25.131-b11, chế độ hỗn hợp)
Sau khi hoàn tất, bạn có thể tiến hành cài đặt Nginx và Supervisor.

Cài đặt Nginx và Supervisor​

Theo mặc định, Nginx và Supervisor có sẵn trong kho lưu trữ Ubuntu 16.04. Bạn có thể cài đặt chúng chỉ bằng cách chạy lệnh sau:
Mã:
apt-get install nginx supervisor -y
Sau khi cài đặt hoàn tất, hãy khởi động dịch vụ Nginx và Supervisor và cho phép chúng khởi động khi khởi động bằng lệnh sau:
Mã:
systemctl start nginx
systemctl start supervisor
systemctl enable nginx
systemctl enable Supervisor
Sau khi hoàn tất, bạn có thể tiến hành bước tiếp theo.

Tải xuống ứng dụng Clojure​

Trước tiên, bạn sẽ cần tải xuống dự án Clojure mẫu từ kho lưu trữ git. Bạn có thể dễ dàng tải xuống bằng tiện ích dòng lệnh git clone như được hiển thị bên dưới:
Mã:
git clone https://github.com/do-community/do-clojure-web.git
Bước tiếp theo là biên dịch và chạy dự án Clojure này bằng Leiningen. Leiningen là một công cụ quản lý phụ thuộc và tự động hóa xây dựng có thể được sử dụng để biên dịch ứng dụng Clojure. Bạn có thể tải xuống bằng lệnh curl như được hiển thị bên dưới:
Mã:
curl https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein -o /usr/bin/lein
Tiếp theo, cấp quyền thích hợp cho công cụ đã tải xuống bằng lệnh sau:
Mã:
chmod 755 /usr/bin/lein
Bây giờ, hãy chạy lệnh sau để biên dịch dự án Closure:
Mã:
cd do-clojure-web
lein uberjar
Bạn sẽ thấy đầu ra sau:
Mã:
CẢNH BÁO: Hiện tại bạn đang chạy với tư cách là root; có thể là do vô tình.Nhấn control-C để hủy hoặc Enter để tiếp tục với tư cách là root.Đặt LEIN_ROOT để tắt cảnh báo này.Đang tải Leiningen xuống /root/.lein/self-installs/leiningen-2.7.1-standalone.jar ngay bây giờ... % Tổng % Đã nhận % Xferd Tốc độ trung bình Thời gian Thời gian Thời gian Tải xuống hiện tại Tổng tải lên Đã sử dụng Tốc độ còn lại100 618 0 618 0 0 309 0 --:--:-- 0:00:02 --:--:-- 207100 14,6M 100 14,6M 0 0 326k 0 0:00:46 0:00:46 --:--:-- 279kĐang truy xuất lein-ring/lein-ring/0.8.13/lein-ring-0.8.13.pom từ clojarsĐang truy xuất org/clojure/clojure/1.2.1/clojure-1.2.1.pom từ trung tâmĐang lấy org/clojure/data.xml/0.0.6/data.xml-0.0.6.pom từ trung tâmĐang lấy org/clojure/pom.contrib/0.0.25/pom.contrib-0.0.25.pom từ trung tâmĐang lấy org/sonatype/oss/oss-parent/5/oss-parent-5.pom từ trung tâmĐang lấy org/clojure/clojure/1.3.0/clojure-1.3.0.pom từ trung tâmĐang lấy leinjacker/leinjacker/0.4.1/leinjacker-0.4.1.pom từ clojarsĐang lấy org/clojure/core.contracts/0.0.1/core.contracts-0.0.1.pom từ trung tâmĐang lấy org/clojure/pom.contrib/0.0.26/pom.contrib-0.0.26.pom từ trung tâmĐang lấy org/clojure/core.unify/0.5.3/core.unify-0.5.3.pom từ trung tâmĐang lấy org/clojure/clojure/1.4.0/clojure-1.4.0.pom từ trung tâmĐang lấy org/clojure/clojure/1.2.1/clojure-1.2.1.jar từ trung tâmĐang lấy org/clojure/core.contracts/0.0.1/core.contracts-0.0.1.jar từ trung tâmĐang lấy org/clojure/data.xml/0.0.6/data.xml-0.0.6.jar từ trung tâmĐang lấy org/clojure/core.unify/0.5.3/core.unify-0.5.3.jar từ trung tâmTruy xuất org/clojure/clojure/1.2.1/clojure-1.2.1.jar từ clojars
Sau khi dự án Clojure được biên dịch, bạn có thể tiến hành bước tiếp theo.

Thiết lập môi trường ứng dụng web Clojure​

Tiếp theo, bạn sẽ cần tạo cấu trúc thư mục cho ứng dụng web Clojure. Bạn có thể thực hiện việc này bằng lệnh sau:
Mã:
mkdir -p /var/www/html/do-clojure-web/app/db
Tiếp theo, sao chép các tệp ứng dụng Clojure vào thư mục trên:
Mã:
cp /root/do-clojure-web/target/do-clojure-web-0.1.0-standalone.jar /var/www/html/do-clojure-web/app/
Tiếp theo, cấp quyền thích hợp cho thư mục ứng dụng Clojure bằng lệnh sau:
Mã:
chown -R www-data:www-data /var/www/html/do-clojure-web/
Tiếp theo, tạo một biểu tượng của ứng dụng web clojure bằng lệnh sau:
Mã:
cd /var/www/html/do-clojure-web/app/
ln -s do-clojure-web-0.1.0-standalone.jar do-clojure-web.jar
Ứng dụng web Clojure hiện đã sẵn sàng để sử dụng. Bạn có thể kiểm tra xem nó có đang chạy hay không bằng lệnh sau:
Mã:
java -jar do-clojure-web.jar
Nếu mọi thứ ổn, bạn sẽ thấy kết quả sau:
Mã:
2017-10-01 10:30:48.349:INFO:oejs.Server:jetty-7.x.y-SNAPSHOT2017-10-01 10:30:48.590:INFO:oejs.AbstractConnector:Started [emailprotected]:5000

Cấu hình Nginx và Supervisor​

Tiếp theo, bạn sẽ cần cấu hình Supervisor để quản lý các ứng dụng Clojure dưới dạng dịch vụ. Bạn có thể thực hiện việc này bằng cách tạo tệp do-clojure-web.conf trong thư mục cấu hình Supervisor như được hiển thị bên dưới:
Mã:
nano /etc/supervisor/conf.d/do-clojure-web.conf
Thêm các dòng sau:
Mã:
[program:do-clojure-web]command=/usr/bin/java -jar do-clojure-web.jardirectory=/var/www/html/do-clojure-web/appuser=www-dataautostart=trueautorestart=truestartretries=3redirect_stderr=truestdout_logfile=/var/log/log/do-clojure-web.app.log
Lưu và đóng tệp khi bạn hoàn tất.

Tiếp theo, bạn cũng sẽ cần cấu hình Nginx để sử dụng làm proxy ngược. Vì ứng dụng web Clojure chỉ chấp nhận kết nối từ máy chủ cục bộ. Bạn có thể truy cập ứng dụng từ xa bằng Nginx. Để thực hiện như vậy, bạn sẽ cần cấu hình tệp cấu hình mặc định của Nginx:
Mã:
nano /etc/nginx/sites-available/default
Thay đổi tệp như hiển thị bên dưới:
Mã:
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; }}
Lưu và đóng tệp khi bạn hoàn tất, sau đó khởi động lại Nginx và dịch vụ Supervisor để áp dụng tất cả các thay đổi:
Mã:
systemctl restart nginx
systemctl restart supervisor
Bạn có thể xác minh trạng thái của cả Nginx và Supervisor bằng lệnh sau:
Mã:
systemctl status supervisor
Nếu mọi thứ đều ổn, bạn sẽ thấy đầu ra sau:
Mã:
? supervisor.service - Hệ thống kiểm soát quy trình Supervisor cho UNIX Đã tải: đã tải (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled) Đang hoạt động: đang hoạt động (đang chạy) kể từ Thứ Hai 2017-10-02 10:19:32 EDT; 22 phút trước Tài liệu: http://supervisord.org PID chính: 397 (supervisord) Nhiệm vụ: 19 (giới hạn: 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.jar02 tháng 10 10:19:32 debian systemd[1]: Đã khởi động hệ thống kiểm soát quy trình Supervisor cho UNIX.Oct 02 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,656 CRIT Supervisor chạy dưới dạng root (không có người dùng trong tệp cấu hình)Oct 02 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,665 INFO Đã bao gồm tệp bổ sung "/etc/supervisor/conf.d/do-clojure-web.conf" trong pOct 02 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,821 INFO Giao diện RPC 'supervisor' đã được khởi tạoOct 02 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,823 Máy chủ CRIT 'unix_http_server' đang chạy mà không có bất kỳ kiểm tra xác thực HTTP nào02/10 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,825 INFO supervisord đã bắt đầu với pid 39702/10 10:19:40 debian supervisord[397]: 2017-10-02 10:19:40,890 INFO đã tạo: 'do-clojure-web' với pid 44602/10 10:19:41 debian supervisord[397]: 2017-10-02 10:19:41,893 INFO thành công: do-clojure-web đã vào trạng thái CHẠY, tiến trình đã duy trì trong
Mã:
systemctl status nginx
Đầu ra:
Mã:
? nginx.service - Một máy chủ web hiệu suất cao và một máy chủ proxy ngược Đã tải: đã tải (/lib/systemd/system/nginx.service; đã bật; cài đặt trước của nhà cung cấp: đã bật) Đang hoạt động: đang hoạt động (đang chạy) từ Thứ Hai 2017-10-02 10:19:35 EDT; 26 phút trước Tài liệu: man:nginx(8) Tiến trình: 425 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Tiến trình: 401 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) PID chính: 427 (nginx) Nhiệm vụ: 2 (giới hạn: 4915) CGroup: /system.slice/nginx.service ??427 nginx: tiến trình chính /usr/sbin/nginx -g daemon on; master_process on; ??429 nginx: tiến trình công nhân02/10 10:19:32 debian systemd[1]: Đang khởi động Một máy chủ web hiệu suất cao và một máy chủ proxy ngược...02/10 10:19:35 debian systemd[1]: nginx.service: Không đọc được PID từ tệp /run/nginx.pid: Đối số không hợp lệ02/10 10:19:35 debian systemd[1]: Đang khởi động Một máy chủ web hiệu suất cao và một máy chủ proxy ngược.

Truy cập ứng dụng web Clojure​

Sau khi mọi thứ được cấu hình đúng, đã đến lúc truy cập ứng dụng web Clojure thông qua trình duyệt web.

Mở trình duyệt web của bạn và nhập URL http://your-ip-address, bạn sẽ được chuyển hướng đến trang chủ ứng dụng web Clojure như hiển thị bên dưới:



Bây giờ, hãy nhấp vào nút Thêm vị trí, bạn sẽ thấy hình ảnh sau:



Tại đây, hãy cung cấp các giá trị trong trường giá trị x và giá trị y, sau đó nhấp vào nút gửi vị trí. Bây giờ, bạn có thể xem các vị trí đã gửi của mình bằng cách nhấp vào nút Xem tất cả vị trí. Bạn sẽ thấy hình ảnh sau:


Kết luận​

Trong bài viết trên, chúng ta đã tìm hiểu cách triển khai ứng dụng web Clojure bằng Supervisor và lein. Chúng ta cũng đã tìm hiểu cách truy cập ứng dụng web Clojure từ vị trí từ xa bằng cách thiết lập Nginx làm máy chủ proxy ngược. Tôi hy vọng giờ đây bạn có thể dễ dàng triển khai ứng dụng tùy chỉnh của mình bằng Clojure, Supervisor và lein. Hãy thoải mái hỏi bất kỳ câu hỏi nào nếu bạn có bất kỳ câu hỏi nào.
 
Back
Bên trên