Cách chúng tôi làm là chúng tôi có 3 mảnh (hoặc tạo tác) cho mỗi ứng dụng đang chạy.
- Ứng dụng chúng tôi đang phát triển. Điều này là giống nhau bất kể môi trường. Để phù hợp với ví dụ của bạn, đó sẽ là ứng dụng Spring dưới dạng jar / war.
- Các container sẽ chạy ứng dụng. Điều này là giống nhau bất kể môi trường. Nếu sử dụng Spring Boot, bạn không cần Tomcat nữa và chỉ cần thời gian chạy Java. Vì vậy, sử dụng container Docker openjdk.
- Các cấu hình mà ứng dụng cần. Đây là điều duy nhất khác nhau giữa các môi trường. Trong ứng dụng Spring, bạn có thể sẽ sử dụng tệp thuộc tính.
Các tập tin cấu hình sống trong một điều khiển nguồn riêng biệt. Điều này từng là Git, nhưng chúng tôi hiện đang sử dụng SaaS mà chúng tôi đã xây dựng có tên là Config, tại http://www.configapp.com . Tính năng cốt lõi của cấu hình là xử lý dễ dàng cấu hình cụ thể của môi trường. Để chạy ứng dụng của chúng tôi trên một máy chủ mới, chúng tôi kéo bộ chứa Docker, tạo phẩm ứng dụng và tệp cấu hình cho môi trường đó. Trong vùng chứa, chúng tôi gắn thư mục nơi ứng dụng và tệp cấu hình được lưu trữ, như là một phần của vùng chứa. Ứng dụng của chúng tôi là như nhau. Container / hình ảnh của chúng tôi là như nhau. Chỉ có tập tin cấu hình là khác nhau.
Về tập tin cấu hình so với các biến môi trường. Trong thời gian dài nhất, chúng tôi đã sử dụng các tập tin cấu hình. Khi chúng tôi sử dụng PaaS / đám mây, chúng tôi đã sử dụng các biến môi trường. Đó là công việc bổ sung nếu bạn có nhiều cấu hình vì vậy chúng tôi đã kết thúc bằng cách sử dụng các biến môi trường để xác định tệp cấu hình chính xác. Chúng tôi có một ứng dụng biến các thuộc tính thành các biến môi trường, nhưng đó là không điển hình. Nếu chúng tôi có một công ty xử phạt máy chủ cấu hình tập trung, chúng tôi sẽ sử dụng nó, nếu không chúng tôi thích sự đơn giản của các tệp cấu hình.
Vì vậy, để tóm tắt, chúng tôi kéo app.jar, app.properies, openjdk Docker. Sau đó, chúng tôi chạy openjdk Docker gắn vị trí của app.jar và app.properies. Điều duy nhất môi trường cụ thể là app.properies. Để dễ dàng quản lý app.properies, bất kể có bao nhiêu khóa thuộc tính, môi trường, cụm / vùng, chúng tôi sử dụng Cấu hình.