Deploy Play Application trên Production
play
2
Java
77
deployment
9
White

Quăng viết ngày 31/05/2016

Tài liệu này được lược dịch theo chương 9 của quyển Play for Scala. Mô tả về cách deploy một ứng dụng viết bằng Play lên môi trường production. Mục đích là để ghi nhớ khỏi quên.

Phiên bản sử dụng là Play 2.1.1, các phiên bản mới hơn có thể sẽ khác đôi chút

1. Production mode

Khi chúng ta chạy lệnh play run thì ứng dụng của chúng ta sẽ được start ở development mode. Tất nhiên nó không ổn định để chạy ứng dụng của chúng ta trên production. Bởi vì mỗi khi có request, Play sẽ kiểm tra xem có tập tin nào được thay đổi hay không. Điều này là cho ứng dụng chậm đi.

Một cách tốt hơn là sử dụng lệnh play start. Lệnh này sẽ start ứng dụng Play với production mode. Trong mode này, một môi trường JVM mới sẽ được fork ra cho ứng dụng và chạy độc lập với lệnh play. Chúng ta có thể xem log của ứng dụng xem nó có được start đúng cách hay không. Khi thấy đủ ta có thể Ctrl + D để ngắt lệnh play nhưng ứng dụng vẫn sẽ tiếp tục chạy. PID của ứng dụng sẽ chứa trong file RUNNING_PID.

Để stop ứng dụng ta có thể dùng lệnh play stop. Nó sẽ gửi một SIGTERM sign tới ứng dụng, tất nhiên ta cũng có thể lệnh kill process từ pid của ứng dụng.

Mặc dù play start sẽ khởi động ứng dụng trong production mode nhưng nó không phải là một cách tốt để bắt đầu. Bởi vì nó đòi hỏi sự tương tác để detach và kết thúc lệnh play. Nói chung ta cần một cách để khởi động ứng dụng mà không cần thêm sự tương tác gì từ con người. Vì không phải lúc nào chúng ta cũng có play command trên server mà chúng ta deploy.

Để giải quyết vấn đề này, Play cung cấp 2 tác vụ stagedist. Khi chạy lệnh play stage, Play sẽ biên dịch ứng dụng thành một JAR file và đồng thời tất cả các gói phụ thuộc, đặt nó trong thư mục target/staged. Nó cũng sẽ tạo một start-script đặt tại target/start. Với script này ta có thể khởi động ứng dụng mà không cần lệnh play

play dist thực hiện tác vụ tương tự play stage, nhưng nó sẽ zip start-script và các gói phụ thuộc vào một file. Sau khi chạy play dist, ta sẽ có một thư mục dist chứa một tập tin zip. Ta có thể sync file này lên server, xả nén và khởi động ứng dụng.

2. Tạo native packages cho các trình qủan lý gói

Có một plugin là sbt-native-packager giúp đóng gói ứng dụng để cài đặt trên các hệ thống Debian hoặc Red Hat. Nó sẽ đóng gói ứng dụng thành tập tin .deb hoặc .rpm và ta có thể dùng các trình quản lý gói để cài đặt. Tuy nhiên đây là plugin của sbt chứ không phải Play nên ta sẽ cần điều chỉnh một vài thứ để có thể đóng gói ứng dụng.

Ngoài ra còn có plugin sbt-assembly, theo mô tả thì gói này sẽ biên dịch và đóng gói ứng dụng Play thành duy nhất 1 fat-JAR, có nghĩa là toàn bộ các class file và dependencies sẽ được đóng gói vào 1 file JAR duy nhất

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Quăng

24 bài viết.
232 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
134 13
Gần đây mình có present về chủ đề __Một số thao tác và lệnh đơn giản nhưng hữu ích khi sử dụng Linux__ cho một vài bạn bè. Mặc dù nó khá là đơn giả...
Quăng viết 2 năm trước
134 13
White
83 14
1. Giới thiệu Right tool for right job. Trước tiên phải hiểu là MySQL Replication không phải là giải pháp giải quyết mọi bài toán về quá tải hệ th...
Quăng viết gần 3 năm trước
83 14
White
66 5
Sau khi đọc bài viết (Link) của anh thaidn, mình nhớ lại lúc mình mới ra trường, cũng đã từng nghĩ về vấn đề này (lúc đó mình khá thích môn Bảo Mật...
Quăng viết 1 tháng trước
66 5
Bài viết liên quan
White
0 0
Lỗi Inferred type containing Product khi sử dụng Submitting multipart/form data ở play 2.5.x Bên dưới là hướng dẫn upload đồng thời filePart và da...
khoinv viết hơn 1 năm trước
0 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
24 bài viết.
232 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!