Cách triển khai ứng dụng web Clojure trên FreeBSD 10.2
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 FreeBSD 10.2 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 các thành phần sau :
- Một server FreeBSD 10.2, bạn có thể tùy chọn tùy chỉnh bằng các hướng dẫn này
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 pkg update
- sudo pkg 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.
Hãy cài đặt Leiningen ngay bây giờ.
- sudo pkg install leiningen
Bạn sẽ nhận thấy một số kết quả khai báo rằng Java yêu cầu một vài điểm mount hệ thống file đặc biệt. Ta sẽ giải quyết vấn đề này trong bước tiếp theo.
Đế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 như một phần của quá trình cài đặt Leiningen ở bước cuối cùng, vì vậy, tiếp theo, ta sẽ cài đặt Supervisor và Nginx.
- sudo pkg install nginx py27-supervisor
Java yêu cầu một vài điểm mount hệ thống file đặc biệt, như đã đề cập ở bước 1. Chạy hai lệnh này đảm bảo chúng được mount .
- sudo mount -t fdescfs fdesc /dev/fd
- sudo mount -t procfs proc /proc
Thay vì chạy các lệnh đó mỗi khi hệ thống khởi động, ta sẽ làm cho nó diễn ra tự động. Chỉnh sửa file /etc/fstab
bằng ee
hoặc editor yêu thích của bạn.
- sudo ee /etc/fstab
Đảm bảo rằng phần cuối của file /etc/fstab
có hai mục sau.
fdesc /dev/fd fdescfs rw 0 0 proc /proc procfs rw 0 0
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 /www/data/do-clojure-web/app/db/ /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 /www/data/do-clojure-web/app/
- sudo cp ~/do-clojure-web/db/do-clojure-web.h2.db /www/data/do-clojure-web/app/db/
Ứng dụng sẽ chạy với quyền user www 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 .
- sudo chown -R www /www/data/do-clojure-web/
Thay đổi folder ứng dụng Clojure.
- cd /www/data/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ụ. Đối với một dịch vụ thực sự cần mở rộng quy mô, tôi khuyên bạn nên xem tài liệu uWSGI về cách chạy ứng dụng Clojure.
Tạo và chỉnh sửa file /usr/local/etc/supervisord.conf
.
- sudo ee /usr/local/etc/supervisord.conf
Thêm cấu hình này vào cuối file và lưu nó.
[program:do-clojure-web] command=/usr/local/bin/java -jar do-clojure-web.jar directory=/www/data/do-clojure-web/app user=www autostart=true autorestart=true startretries=3 redirect_stderr=true stdout_logfile=/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 /www/data/do-clojure-web/app/
. Nó cũng sẽ đảm bảo đăng nhập vào /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 /usr/local/etc/nginx/nginx.conf
.
- sudo ee /usr/local/etc/nginx/nginx.conf
Đầu tiên, thêm khối upstream
, được đánh dấu màu đỏ bên dưới, phía trên khối server
đã có trong file .
. . . #gzip on; upstream http_backend { server 127.0.0.1:5000; keepalive 32; } server { listen 80; server_name localhost; . . .
Bây giờ hãy tìm khối bắt đầu bằng location /
(bên trong khối server
). Comment tất cả các dòng trong đó bằng cách thêm dấu #
ở đầu mỗi dòng và thêm vào location /
phần mới được đánh dấu màu đỏ. Điều này cho phép 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.
. . . server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; #location / { # root /usr/local/www/nginx; # index index.html index.htm; #} 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 /www/logs/do-clojure-web.access.log; error_log /www/logs/do-clojure-web.error.log; } #error_page 404 /404.html; . . .
Lưu và thoát khỏi file .
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. Bước đầu tiên là đảm bảo các dịch vụ của bạn được cấu hình để khởi động khi server khởi động .
Chỉnh sửa file /etc/rc.conf
.
- sudo ee /etc/rc.conf
Thêm hai dòng này vào cuối file /etc/rc.conf
.
nginx_enable="YES" supervisord_enable="YES"
Lưu và thoát khỏi file .
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 supervisord 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 supervisord 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 triển khai ứng dụng web Clojure trên Ubuntu 14.042015-11-20
Cách thiết lập web server khả dụng cao với IP giữ và nổi trên Ubuntu 14.04
2015-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