Clojure là ngôn ngữ lập trình hiện đại, năng động và mạnh mẽ trên nền tảng Java. Ngôn ngữ này dựa trên ngôn ngữ lập trình LISP và có trình biên dịch cho phép chạy trên cả môi trường chạy Java và .Net. Clojure giúp bạn xây dựng hệ thống từ đầu mà không cần chạm trực tiếp vào mã Java. Hiện tại, nó được nhiều công ty lớn sử dụng, bao gồm Walmart và Puppet Lab.
Trong hướng dẫn này, chúng tôi sẽ giải thích cách triển khai Ứng dụng web Clojure trên Ubuntu 20.04.
Sau khi tất cả các gói được cập nhật, hãy cài đặt Java và các gói cần thiết khác bằng cách chạy lệnh sau:
Sau khi tất cả các gói được cài đặt, hãy xác minh phiên bản Java đã cài đặt bằng lệnh sau:
Bạn sẽ nhận được kết quả sau:
Sau khi hoàn tất, bạn có thể tiến hành bước tiếp theo.
Bạn có thể cài đặt cả hai gói bằng lệnh sau:
Sau khi cài đặt cả hai gói, bạn có thể tiến hành bước tiếp theo.
Sau khi tải xuống hoàn tất, bạn sẽ nhận được kết quả sau:
Tiếp theo, bạn sẽ cần cài đặt Leiningen trong hệ thống của mình. Leiningen là một công cụ quản lý phụ thuộc và tự động hóa bản dựng được sử dụng để tạo các dự án được viết bằng ngôn ngữ lập trình Clojure. Bạn có thể tải xuống gói nhị phân Leiningen bằng lệnh sau:
Sau khi tải xuống hoàn tất, hãy đặt quyền thực thi bằng lệnh sau:
Tiếp theo, hãy thay đổi thư mục thành Clojure và biên dịch dự án bằng lệnh sau:
Sau khi dự án được biên dịch, bạn sẽ nhận được kết quả sau:
Sau khi hoàn tất, bạn có thể tiến hành bước tiếp theo.
Trước tiên, hãy tạo cấu trúc thư mục bằng lệnh sau:
Tiếp theo, hãy sao chép ứng dụng Clojure và cơ sở dữ liệu của bạn vào thư mục cụ thể bằng lệnh sau:
Tiếp theo, thiết lập quyền và quyền sở hữu phù hợp bằng lệnh sau:
Tiếp theo, thay đổi thư mục thành ứng dụng Clojure và tạo liên kết tượng trưng cho ứng dụng clojure của bạn:
Tiếp theo, hãy xác minh xem ứng dụng của bạn có hoạt động hay không bằng cách chạy lệnh sau:
Nếu mọi thứ đều ổn, bạn sẽ nhận được kết quả sau:
Sau khi hoàn tất, bạn có thể tiến hành bước tiếp theo.
Thêm các dòng sau:
Lưu và đóng tệp, sau đó khởi động lại dịch vụ Supervisor để áp dụng các thay đổi:
Tiếp theo, bật dịch vụ Supervisor để bắt đầu khi khởi động lại hệ thống:
Bạn bây giờ có thể xác minh trạng thái của Giám sát viên bằng lệnh sau:
Bạn sẽ nhận được kết quả đầu ra sau:
Lúc này, dịch vụ Supervisor đã được bắt đầu và ứng dụng của bạn đang lắng nghe trên cổng 5000. Bạn có thể kiểm tra bằng lệnh sau:
Bạn sẽ nhận được kết quả sau:
Sau khi hoàn tất, bạn có thể tiến hành bước tiếp theo.
Thêm các dòng sau:
Lưu và đóng tệp khi bạn hoàn tất. Sau đó, bật máy chủ ảo Nginx bằng lệnh sau:
Tiếp theo, kiểm tra Nginx xem có lỗi cú pháp nào không bằng lệnh sau:
Bạn sẽ nhận được kết quả sau:
Cuối cùng, khởi động lại dịch vụ Nginx để áp dụng các thay đổi:
Sau khi hoàn tất, bạn có thể tiếp tục truy cập ứng dụng Clojure.
Nhấp vào nút Thêm vị trí. Bạn sẽ thấy màn hình sau:
Cung cấp các giá trị mong muốn của bạn và nhấp vào nút gửi vị trí. Bạn sẽ thấy màn hình sau:
Bây giờ, hãy nhấp vào nút Xem tất cả vị trí. Bạn sẽ thấy vị trí đã thêm của mình trong màn hình sau:
Trong hướng dẫn này, chúng tôi sẽ giải thích cách triển khai Ứng dụng web Clojure trên Ubuntu 20.04.
Điều kiện tiên quyết
- Máy chủ chạy Ubuntu 20.04.
- Tên miền hợp lệ được trỏ bằng IP máy chủ của bạn.
- Mật khẩu gốc được định cấu hình cho máy chủ.
Bắt đầu
Trước khi bắt đầu, bạn nên cập nhật các gói hệ thống lên phiên bản mới nhất. Bạn có thể cập nhật chúng bằng lệnh sau:
Mã:
apt-get update -y
Mã:
apt-get install git curl default-jdk -y
Mã:
java -version
Mã:
openjdk version "11.0.9.1" 2020-11-04Môi trường chạy thời gian OpenJDK (bản dựng 11.0.9.1+1-Ubuntu-0ubuntu1.20.04)Máy ảo máy chủ OpenJDK 64-Bit (bản dựng 11.0.9.1+1-Ubuntu-0ubuntu1.20.04, chế độ hỗn hợp, chia sẻ)
Cài đặt Nginx và Supervisor
Tiếp theo, bạn sẽ cần cài đặt máy chủ web Nginx và Supervisor vào hệ thống của mình. Nginx là máy chủ web được sử dụng để lưu trữ ứng dụng trên internet. Supervisor là hệ thống máy khách/máy chủ cho phép người dùng theo dõi và kiểm soát một số quy trình trên hệ điều hành dựa trên Linux.Bạn có thể cài đặt cả hai gói bằng lệnh sau:
Mã:
apt-get install nginx supervisor -y
Tải xuống ứng dụng Clojure
Trước tiên, bạn sẽ cần tải xuống ứng dụng Clojure từ kho lưu trữ Git. Bạn có thể tải xuống bằng cách chạy lệnh sau:
Mã:
git clone https://github.com/do-community/do-clojure-web.git
Mã:
Đang sao chép vào 'do-clojure-web'...remote: Đang liệt kê các đối tượng: 37, xong.remote: Tổng cộng 37 (delta 0), tái sử dụng 0 (delta 0), pack-reused 37Đang giải nén các đối tượng: 100% (37/37), 6,25 KiB | 399,00 KiB/giây, xong.
Mã:
curl https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein -o /usr/bin/lein
Mã:
chmod 755 /usr/bin/lein
Mã:
cd do-clojure-web
lein uberjar
Mã:
Đang lấy commons-codec/commons-codec/1.6/commons-codec-1.6.jar từ trung tâmĐang lấy javax/servlet/servlet-api/2.5/servlet-api-2.5.jar từ trung tâmĐang lấy org/clojure/java.jdbc/0.2.3/java.jdbc-0.2.3.jar từ trung tâmĐang lấy com/h2database/h2/1.3.170/h2-1.3.170.jar từ trung tâmĐang lấy org/eclipse/jetty/jetty-server/7.6.13.v20130916/jetty-server-7.6.13.v20130916.jar từ trung tâmĐang lấy org/eclipse/jetty/orbit/javax.servlet/2.5.0.v201103041518/javax.servlet-2.5.0.v201103041518.jar từ trung tâmĐang lấy org/eclipse/jetty/jetty-continuation/7.6.13.v20130916/jetty-continuation-7.6.13.v20130916.jar từ trung tâmĐang lấy org/eclipse/jetty/jetty-http/7.6.13.v20130916/jetty-http-7.6.13.v20130916.jar từ trung tâmĐang lấy org/eclipse/jetty/jetty-io/7.6.13.v20130916/jetty-io-7.6.13.v20130916.jar từ trung tâmĐang lấy org/eclipse/jetty/jetty-util/7.6.13.v20130916/jetty-util-7.6.13.v20130916.jar từ trung tâmĐang lấy medley/medley/0.5.3/medley-0.5.3.jar từ clojarsĐang lấy clout/clout/2.1.0/clout-2.1.0.jar từ clojarsĐang lấy compojure/compojure/1.3.1/compojure-1.3.1.jar từ clojarsĐang lấy ring/ring-core/1.3.2/ring-core-1.3.2.jar từ clojarsĐang lấy instaparse/instaparse/1.3.4/instaparse-1.3.4.jar từ clojarsĐang lấy crypto-random/crypto-random/1.2.0/crypto-random-1.2.0.jar từ clojarsĐang lấy crypto-equality/crypto-equality/1.0.0/crypto-equality-1.0.0.jar từ clojarsĐang lấy clj-time/clj-time/0.6.0/clj-time-0.6.0.jar từ clojarsĐang lấy ring/ring-codec/1.0.0/ring-codec-1.0.0.jar từ clojarsĐang lấy ring/ring-defaults/0.1.2/ring-defaults-0.1.2.jar từ clojarsĐang lấy ring/ring-ssl/0.2.1/ring-ssl-0.2.1.jar từ clojarsĐang lấy ring/ring-headers/0.1.1/ring-headers-0.1.1.jar từ clojarsĐang lấy ring/ring-anti-forgery/1.0.0/ring-anti-forgery-1.0.0.jar từ clojarsĐang lấy hiccup/hiccup/1.0.2/hiccup-1.0.2.jar từ clojarsĐang lấy ring/ring-jetty-adapter/1.3.2/ring-jetty-adapter-1.3.2.jar từ clojarsĐang lấy ring/ring-servlet/1.3.2/ring-servlet-1.3.2.jar từ clojarsĐang biên dịch do-clojure-web.handlerĐã tạo /root/do-clojure-web/target/do-clojure-web-0.1.0.jarĐã tạo /root/do-clojure-web/target/do-clojure-web-0.1.0-standalone.jar
Tạo cấu trúc thư mục cho ứng dụng Clojure
Tiếp theo, bạn sẽ cần tạo cấu trúc thư mục cho ứng dụng Clojure và đặt các tệp và thư mục cần thiết vào một vị trí cụ thể.Trước tiên, hãy tạo cấu trúc thư mục bằng lệnh sau:
Mã:
mkdir -p /var/www/html/do-clojure-web/app/db
Mã:
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/
Mã:
chown -R www-data:www-data /var/www/html/do-clojure-web/
chmod -R 775 /var/www/html/do-clojure-web/
Mã:
cd /var/www/html/do-clojure-web/app/
ln -s do-clojure-web-0.1.0-standalone.jar do-clojure-web.jar
Mã:
java -jar do-clojure-web.jar
Mã:
2020-11-25 10:19:51.456:INFO:oejs.Server:jetty-7.x.y-SNAPSHOT2020-11-25 10:19:51.497:INFO:oejs.AbstractConnector:Started [emailprotected]:5000
Cấu hình Supervisor cho Ứng dụng Clojure
Có một số cách để quản lý ứng dụng Clojure dưới dạng dịch vụ. Trong hướng dẫn này, chúng ta sẽ sử dụng Supervisor để quản lý ứng dụng Clojure. Bạn có thể cấu hình nó bằng cách tạo một tệp bên trong thư mục cấu hình Supervisor:
Mã:
nano /etc/supervisor/conf.d/do-clojure-web.conf
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/do-clojure-web.app.log
Mã:
systemctl restart supervisor
Mã:
systemctl enable Supervisor
Mã:
systemctl status Supervisor
Mã:
? supervisor.service - Hệ thống kiểm soát quy trình giám sát cho UNIX Đã tải: đã tải (/lib/systemd/system/supervisor.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) kể từ Thứ 4, 2020-11-25 10:22:31 UTC; 1 phút 12 giây trước Tài liệu: http://supervisord.org PID chính: 40927 (supervisord) Nhiệm vụ: 28 (giới hạn: 2353) Bộ nhớ: 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.jar25 tháng 11 10:22:31 ubuntu2004 systemd[1]: Đã khởi động hệ thống kiểm soát quy trình Supervisor cho UNIX.25 tháng 11 10:22:31 ubuntu2004 supervisord[40927]: 25-11-2020 10:22:31,603 CRIT Supervisor đang chạy dưới dạng root. Quyền không bị hủy bỏ vì>25 tháng 11 10:22:31 ubuntu2004 supervisord[40927]: 2020-11-25 10:22:31,603 THÔNG TIN Đã bao gồm tệp bổ sung "/etc/supervisor/conf.d/do-clojure-web.conf" d>25 tháng 11 10:22:31 ubuntu2004 supervisord[40927]: 2020-11-25 10:22:31,608 THÔNG TIN Giao diện RPC 'supervisor' đã được khởi tạo25 tháng 11 10:22:31 ubuntu2004 supervisord[40927]: 2020-11-25 10:22:31,608 Máy chủ CRIT 'unix_http_server' đang chạy mà không có bất kỳ xác thực HTTP nào >25/11 10:22:31 ubuntu2004 supervisord[40927]: 2020-11-25 10:22:31,609 THÔNG TIN supervisord đã bắt đầu với pid 4092725/11 10:22:32 ubuntu2004 supervisord[40927]: 2020-11-25 10:22:32,612 THÔNG TIN đã tạo: 'do-clojure-web' với pid 4094625/11 10:22:33 ubuntu2004 supervisord[40927]: 2020-11-25 10:22:33,615 THÔNG TIN thành công: do-clojure-web đã vào trạng thái CHẠY, tiến trình vẫn ở trạng thái >
Mã:
ss -antpl | grep 5000
Mã:
LISTEN 0 50 [::ffff:127.0.0.1]:5000 *:* users:(("java",pid=40946,fd=7))
Cấu hình Nginx cho Ứng dụng Clojure
Tiếp theo, bạn sẽ cần cấu hình Nginx làm proxy ngược để phục vụ ứng dụng Clojure. Trước tiên, hãy tạo tệp cấu hình máy chủ ảo Nginx bằng lệnh sau:
Mã:
nano /etc/nginx/sites-available/clojure.conf
Mã:
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; }}
Mã:
ln -s /etc/nginx/sites-available/clojure.conf /etc/nginx/sites-enabled/
Mã:
nginx -t
Mã:
nginx: cú pháp tệp cấu hình /etc/nginx/nginx.conf là oknginx: kiểm tra tệp cấu hình /etc/nginx/nginx.conf thành công
Mã:
systemctl restart nginx
Truy cập ứng dụng Clojure
Bây giờ, hãy mở trình duyệt web của bạn và truy cập ứng dụng Clojure bằng URL . Bạn sẽ thấy bảng điều khiển ứng dụng Clojure trong màn hình sau:Nhấp vào nút Thêm vị trí. Bạn sẽ thấy màn hình sau:
Cung cấp các giá trị mong muốn của bạn và nhấp vào nút gửi vị trí. Bạn sẽ thấy màn hình sau:
Bây giờ, hãy nhấp vào nút Xem tất cả vị trí. Bạn sẽ thấy vị trí đã thêm của mình trong màn hình sau: