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
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.
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:
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:
Bạn sẽ thấy phiên bản JAVA trong đầu ra sau
Sau khi hoàn tất, bạn có thể tiến hành cài đặt Nginx và Supervisor.
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:
Sau khi hoàn tất, bạn có thể tiến hành bước tiếp theo.
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:
Tiếp theo, cấp quyền thích hợp cho công cụ đã tải xuống bằng lệnh sau:
Bây giờ, hãy chạy lệnh sau để biên dịch dự án Closure:
Bạn sẽ thấy đầu ra sau:
Sau khi dự án Clojure được biên dịch, bạn có thể tiến hành bước tiếp theo.
Tiếp theo, sao chép các tệp ứng dụng Clojure vào thư mục trên:
Tiếp theo, cấp quyền thích hợp cho thư mục ứng dụng Clojure bằng lệnh sau:
Tiếp theo, tạo một biểu tượng của ứng dụng web clojure bằng lệnh sau:
Ứ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:
Nếu mọi thứ ổn, bạn sẽ thấy kết quả sau:
Thêm các dòng sau:
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:
Thay đổi tệp như hiển thị bên dưới:
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:
Bạn có thể xác minh trạng thái của cả Nginx và Supervisor bằng lệnh sau:
Nếu mọi thứ đều ổn, bạn sẽ thấy đầu ra sau:
Đầu ra:
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:
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
Mã:
reboot
Mã:
apt-get install git curl openjdk-8-jre-headless -y
Mã:
java -version
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)
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
Mã:
systemctl start nginx
systemctl start supervisor
systemctl enable nginx
systemctl enable Supervisor
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
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ã:
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
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
Mã:
cp /root/do-clojure-web/target/do-clojure-web-0.1.0-standalone.jar /var/www/html/do-clojure-web/app/
Mã:
chown -R www-data:www-data /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ã:
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
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
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
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; }}
Mã:
systemctl restart nginx
systemctl restart supervisor
Mã:
systemctl status supervisor
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
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: