Cách triển khai ứng dụng web Clojure trên Ubuntu 14.04
Tiếp tục có một sự quan tâm tăng lên đối với lập trình chức năng và đặc biệt hơn là lập trình cho web trong Clojure. Nhiều hướng dẫn về cách xây dựng các ứng dụng cơ bản thường bỏ qua các chi tiết triển khai. Bài viết này sẽ hướng dẫn bạn cách triển khai ứng dụng web Clojure cho Ubuntu 14.04 Server.Cụ thể, ta sẽ tạo một ứng dụng Clojure mẫu và đóng gói nó để sử dụng trong production , đồng thời cài đặt môi trường ứng dụng Clojure trên server bằng cách sử dụng Supervisor để chạy ứng dụng và Nginx để cung cấp các yêu cầu đến nó.
Yêu cầu
Trước khi bắt đầu hướng dẫn này, bạn cần những thứ sau:
- Một server Ubuntu 14.04
- Tài khoản user không phải root có quyền truy cập sudo trên server của bạn, bạn có thể cài đặt account này theo các hướng dẫn sau
Bước 1 - Tạo và đóng gói một ứng dụng Clojure mẫu
Bước đầu tiên là sử dụng git
để lấy ví dụ về dự án Clojure để triển khai.
Đầu tiên, cập nhật các gói của bạn và cài đặt git
trên server .
- sudo apt-get update
- sudo apt-get install git
Tiếp theo, sao chép kho dự án mẫu.
- git clone https://github.com/do-community/do-clojure-web.git
Kho lưu trữ này là kết quả cuối cùng của việc làm theo hướng dẫn Phát triển Web Cơ bản bằng Clojure . Nếu bạn thích, thay vì sao chép kho này, bạn có thể tự mình làm theo hướng dẫn đó.
Clojure tận dụng JVM để chạy mã của nó, vì vậy bạn cần phải biên dịch dự án của bạn để chạy nó. Leiningen, một công cụ tự động hóa xây dựng và quản lý phụ thuộc cho các ứng dụng Clojure, giúp việc này trở nên dễ dàng. Có một vài bước để cài đặt Leiningen.
Đầu tiên, hãy cài đặt Java.
- sudo apt-get install openjdk-7-jre-headless
Tiếp theo download lệnh cài đặt Leiningen. Có một gói Ubuntu cho Leiningen, nhưng nó rất lỗi thời.
sudo curl https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein -o /usr/local/bin/lein
Cài đặt cho phép vì vậy bất kỳ người sử dụng có thể sử dụng lein
tiện ích Leiningen cung cấp.
- sudo chmod a+x /usr/local/bin/lein
Đến đây bạn có thể biên dịch dự án của bạn để chạy trên server với lein
.
- cd ~/do-clojure-web
- lein uberjar
Bước 2 - Cài đặt Môi trường Ứng dụng Clojure
Ta cần ba phần chính để ứng dụng này hoạt động chính xác: Java, Supervisor và Nginx. Ta đã cài đặt Java ở bước cuối cùng, vì vậy tiếp theo, ta sẽ cài đặt Supervisor và Nginx.
- sudo apt-get install nginx supervisor
Bạn cũng cần một nơi để giữ ứng dụng web Clojure của bạn và các file log của nó. Tạo cấu trúc folder tiếp theo.
- sudo mkdir -p /var/www/do-clojure-web/app/db /var/www/logs
Đến đây bạn có thể di chuyển file ứng dụng Clojure và file database của bạn vào các folder bạn đã tạo.
- sudo cp ~/do-clojure-web/target/do-clojure-web-0.1.0-standalone.jar /var/www/do-clojure-web/app/
- sudo cp ~/do-clojure-web/db/do-clojure-web.h2.db /var/www/do-clojure-web/app/db/
Ứng dụng sẽ chạy dưới dạng dữ liệu www của user trên hệ thống để nó có thể ghi vào database tích hợp của ta . Đặt chủ sở hữu của đường dẫn ứng dụng thành www-data .
- sudo chown -R www-data /var/www/do-clojure-web/
Thay đổi folder ứng dụng Clojure.
- cd /var/www/do-clojure-web/app/
Trong môi trường production , số version của ứng dụng sẽ thay đổi theo từng bản cập nhật. Bạn không muốn phải cập nhật cấu hình hệ thống của bạn mỗi lần điều đó xảy ra. Để tránh điều đó, hãy tạo một softlink cho version ứng dụng đang chạy hiện tại. Bạn sẽ tham chiếu đến softlink trong các bước tiếp theo.
- sudo ln -s do-clojure-web-0.1.0-standalone.jar do-clojure-web.jar
Ứng dụng hiện được cấu hình để chỉ có thể truy cập thông qua localhost, nhưng bạn vẫn có thể đảm bảo nó khởi động mà không gặp lỗi. Làm điều đó trước khi tiếp tục.
- sudo java -jar do-clojure-web.jar
Nếu mọi thứ hoạt động bình thường, bạn sẽ nhận được kết quả tương tự như sau:
. . . 2015-06-12 04:30:17.882:INFO:oejs.Server:jetty-7.x.y-SNAPSHOT 2015-06-12 04:30:17.995:INFO:oejs.AbstractConnector:Started SelectChannelConnector@127.0.0.1:5000
Tiếp tục và dừng ứng dụng ngay bây giờ bằng cách nhấn tổ hợp CTRL+C
Bước 3 - Cấu hình người giám sát để chạy ứng dụng Clojure
Có một số tùy chọn để quản lý ứng dụng của bạn như một dịch vụ. Tùy chọn bạn sẽ sử dụng ở đây được gọi là Người giám sát ; nó dễ quản lý và linh hoạt hơn một tập lệnh đơn giản. Tuy nhiên, đối với một dịch vụ thực sự cần mở rộng quy mô, hãy xem tài liệu uWSGI về cách chạy ứng dụng Clojure.
Tạo và chỉnh sửa file /etc/supervisor/conf.d/do-clojure-web.conf
.
- sudo nano /etc/supervisor/conf.d/do-clojure-web.conf
Thêm cấu hình này vào file và lưu nó.
[program:do-clojure-web] command=/usr/bin/java -jar do-clojure-web.jar directory=/var/www/do-clojure-web/app user=www-data autostart=true autorestart=true startretries=3 redirect_stderr=true stdout_logfile=/var/www/logs/do-clojure-web.app.log
Cấu hình này khá đơn giản. Trình Giám sát (dịch vụ) sẽ chạy ứng dụng của ta từ trong folder /var/www/do-clojure-web/app
. Nó cũng sẽ đảm bảo đăng nhập vào /var/www/logs/do-clojure-web.app.log
và sẽ cố gắng khởi động lại ứng dụng nếu nó bị lỗi.
Bước 4 - Cấu hình Nginx làm server proxy
Vì ứng dụng web Clojure chỉ chấp nhận các kết nối từ localhost trên cổng 5000, ta cần đặt một web server như Nginx trước nó để cung cấp quyền truy cập bên ngoài. Điều này cũng sẽ rất thuận tiện cho việc cung cấp các tài sản tĩnh khi bạn mở rộng ứng dụng của bạn .
Chỉnh sửa file /etc/nginx/sites-available/default
.
- sudo nano /etc/nginx/sites-available/default
Thêm phần được đánh dấu màu đỏ vào file . Điều này xác định backend của ta để dễ dàng tham khảo trong phần cấu hình tiếp theo.
. . . # Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples. ## upstream http_backend { server 127.0.0.1:5000; keepalive 32; } server { listen 80 default_server; . . .
Bây giờ hãy tìm khối bắt đầu bằng location /
. Comment tất cả các dòng trong đó bằng cách thêm dấu #
ở đầu mỗi dòng.
. . . # Make site accessible from http://localhost/ server_name localhost; # location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. # try_files $uri $uri/ =404; # Uncomment to enable naxsi on this location # include /etc/nginx/naxsi.rules # } # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests . . .
Sau đó, ngay bên dưới phần này, thêm vào phần sau, phần này sẽ cho Nginx lắng nghe như một web server bình thường trên cổng 80 và ủy quyền các yêu cầu của bạn tới ứng dụng Clojure.
. . . # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests 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/www/logs/do-clojure-web.access.log; error_log /var/www/logs/do-clojure-web.error.log; } #location /RequestDenied { # proxy_pass http://127.0.0.1:8080; #}
Bước 5 - Khởi động dịch vụ và kiểm tra quyền truy cập
Đã đến lúc đốt cháy tất cả các phần và đảm bảo mọi thứ hoạt động bình thường. Hãy tiếp tục và khởi động trình Supervisor để ứng dụng Clojure của bạn được khởi động.
- sudo service supervisor start
Chờ khoảng 30 giây để nó khởi động, sau đó khởi động proxy phía trước web server Nginx.
- sudo service nginx start
Truy cập http:// your_server_ip
trong trình duyệt của bạn. Bạn sẽ thấy ví dụ về tải trang web ứng dụng Clojure.
Nếu bạn chỉ nhận được một trang Nginx mặc định, hãy thử khởi động lại Trình giám sát bằng sudo service supervisor restart
, đợi 30 giây và khởi động lại Nginx với sudo service nginx restart
.
Khi trang web đã tải, hãy nhấp vào liên kết Thêm vị trí ở đầu màn hình và thử thêm một vài tọa độ số đảm bảo quyền truy cập database của bạn là chính xác. Ví dụ: bạn có thể thêm 1 cho giá trị x và 2 cho giá trị y . Điều này sẽ đưa bạn đến một trang có nội dung:
Added [1, 2] (id: 1) to the db. See for yourself.
Nếu bạn nhấp vào liên kết Xem Tất cả Vị trí ở đầu màn hình, bạn sẽ thấy một bảng có mục nhập mới của bạn .
Kết luận
Bạn vừa triển khai ứng dụng Clojure bằng Leiningen, Supervisor và Nginx! Có rất nhiều điều để tìm hiểu xung quanh chủ đề triển khai ngay cả những trang web và ứng dụng đơn giản nhất. Bước tiếp theo là triển khai ứng dụng tùy chỉnh của bạn, thay vì ứng dụng demo được sử dụng trong hướng dẫn này.
Các tin liên quan
Cách thiết lập web server khả dụng cao với IP giữ và nổi trên Ubuntu 14.042015-10-20
Xây dựng cho Sản xuất: Ứng dụng Web - Tổng quan
2015-06-01
Xây dựng cho Sản xuất: Ứng dụng Web - Giám sát
2015-06-01
Xây dựng cho Sản xuất: Ứng dụng Web - backup
2015-06-01
Xây dựng cho Sản xuất: Ứng dụng Web - Triển khai
2015-06-01
Xây dựng cho sản xuất: Ứng dụng web - Ghi log tập trung
2015-06-01
Xây dựng cho Sản xuất: Ứng dụng Web - Lập kế hoạch khôi phục
2015-06-01
Cách cài đặt control panel lưu trữ web Sentora trên Ubuntu 14.04
2015-04-27
Cách cài đặt web server OpenLiteSpeed trên CentOS 7
2015-04-16
Cách cài đặt web server OpenLiteSpeed trên Ubuntu 14.04
2015-04-15