2009-02-24 43 views
9

Tôi muốn thu thập một số thực tiễn tốt nhất về triển khai ứng dụng web cho Tomcat đang chạy. Cách đây không lâu, tôi đã phải mô tả quá trình triển khai ứng dụng web của chúng tôi và quá trình này xuất hiện khá khó hiểu.Triển khai ứng dụng web vào Tomcat đang chạy

Giả sử, chúng tôi có một ứng dụng trong tệp WAR (foo.war) được định cấu hình chính xác và không yêu cầu cấu hình bổ sung. Trong trường hợp này, quy trình triển khai khá dễ dàng:

  • Sao chép tệp foo.war vào thư mục $ CATALINA_HOME/webapps. Nếu ứng dụng bắt đầu chính xác, ứng dụng sẽ tự động triển khai vào thư mục $ CATALINA_HOME/webapps/foo.

Để undeploy ứng dụng:

  • Hủy bỏ các tập tin foo.war từ $ CATALINA_HOME/webapps. Nếu ứng dụng tải xuống chính xác, ứng dụng sẽ được tải xuống và $ CATALINA_HOME/webapps/foo sẽ bị xóa.

Bây giờ tôi muốn ghi đè một số thông số ngữ cảnh trong ứng dụng đang chạy của mình. Sau khi đọc các docs, tất cả tôi cần phải làm:

  1. Tạo một tập tin context.xml gọi foo.xml
  2. Sao chép tập tin đến $ CATALINA_BASE/conf/[enginename]/[hostname]/thư mục.

Thật không may, điều đó không hoạt động: ứng dụng sẽ không khởi động lại. Theo kinh nghiệm, chúng tôi phát hiện ra rằng giải pháp làm việc duy nhất là khi tệp chiến tranh được triển khai đến một vị trí bên ngoài ứng dụng web $ CATALINA_HOME /. Bên cạnh đó, các giá trị mặc định của các tham số ngữ cảnh có thể định cấu hình trong tệp WAR sẽ được chỉ định trong tệp web.xml, vì tệp context.xml trong tệp WAR không được đọc khi có tệp ngữ cảnh bên ngoài.

Dưới đây là một ví dụ đơn giản của foo.xml:

<?xml version='1.0' encoding='utf-8'?>       
<Context docBase="/path-to-deployment-directory/foo.war"> 
    <Parameter name="myparam" value="newvalue" override="false"/> 
</Context> 

Hãy chắc chắn để xác định ghi đè = false cho tham số nếu bạn muốn 'newvalue' để ghi đè lên giá trị quy định trong web.xml của WAR . Điều này không rõ ràng đối với chúng tôi.

Vì vậy, để triển khai một aplication để một Tomcat chạy:

  1. Tạo một tập tin context.xml gọi foo.xml
  2. Sao chép tập tin đến $ CATALINA_BASE/conf/[enginename]/[hostname ]/ danh mục.
  3. Sao chép foo.war vào vị trí được chỉ định trong docBase của foo.xml; ứng dụng sẽ tự động triển khai.

Để áp dụng các thông số bối cảnh mới:

  • Thêm các giá trị tham số để các foo.xml và lưu các tập tin; ứng dụng sẽ tự động triển khai lại.

Để undeploy ứng dụng:

  • Tháo foo.xml từ $ CATALINA_BASE/conf/[enginename]/[hostname]/thư mục

Lưu ý rằng loại bỏ các foo. chiến tranh cũng sẽ hoạt động, nhưng cũng sẽ xóa foo.xml.


Bởi bây giờ, tôi có các câu hỏi sau:

  1. Có một thực hành tốt nhất tại tất cả để triển khai một ứng dụng web mà không dừng lại tomcat? Tôi nghe một ý kiến ​​rằng triển khai một tomcat đang chạy là không bao giờ cần thiết kể từ khi mọi người chạy mỗi ứng dụng trong một tomcat riêng biệt.
  2. Bạn nên sao chép tệp WAR vào $ CATALINA_HOME/webapps hoặc tốt hơn nên được lưu giữ ở một vị trí riêng biệt?
  3. Tôi làm cách nào để định cấu hình ứng dụng được triển khai thành $ CATALINA_HOME/webapps
  4. Tại sao không có dòng INFO trong catalina.out để triển khai ứng dụng và có một ứng dụng cho việc không triển khai? Nó có thể cấu hình được không?

Trả lời

0

Một giải pháp sẽ là sử dụng ứng dụng trình quản lý. Nếu bạn quyết định đó là an toàn để sử dụng nó, sau đó bạn có thể dễ dàng triển khai, bắt đầu, dừng lại và undeploy ứng dụng:

http://localhost:8080/manager/deploy?path=[context_path] http://localhost:8080/manager/start?path=[context_path] http://localhost:8080/manager/stop?path=[context_path] http://localhost:8080/manager/undeploy?path=[context_path]

Có nhiệm vụ kiến ​​có thể giúp bạn với những.

Tôi đoán, nhưng không biết chắc chắn, việc dừng và bắt đầu một ứng dụng sẽ làm cho nó đọc lại tệp context.xml.

Về câu hỏi thứ hai của bạn, tôi tin rằng tốt hơn cho các lý do bảo trì để giữ các tệp chiến tranh trong thư mục webapps.

1

Khi được hỏi (1), Tomcat hoạt động rất tốt để triển khai servlet vào máy chủ đang chạy. Có thể có những lo ngại về w.r.t. bảo mật hoặc có thể là D.O.S. hoặc lý do cung cấp tại sao bạn sẽ có các phiên bản máy chủ riêng biệt.

Bạn có thể linh hoạt thực hiện theo cách này, nhưng thường thuận tiện hơn khi triển khai đến một máy chủ đang chạy. Đây là tính năng BUILT-IN trong kiến ​​trúc servlet. :)

Đối với (2), một lần nữa, tùy theo quyết định của bạn nơi bạn muốn đặt WAR. Có vẻ như bạn đã cấu hình nó theo cách không chuẩn (không phải mặc định tôi nên nói). Kiểm tra tệp server.xml của bạn để biết các cài đặt trong (các) phiên bản máy chủ của bạn. Kiểm tra các thuộc tính như unpackWARsautoDeploy.

Đối với (3) và (4), cùng với (1,2) câu hỏi của bạn, bạn nên tham khảo tài liệu Tomcat cho phiên bản Tomcat của bạn trên mô hình triển khai. Bạn sẽ có thể sử dụng cùng một tài liệu để tìm ra cách máy chủ của bạn đã được cấu hình.

Xem Tomcat Web Application Deployment trong hướng dẫn Tomcat, điều chỉnh cho phiên bản Tomcat của bạn.

Các vấn đề liên quan