Làm cách nào để triển khai Triển khai liên tục trong các dự án Angular, PHP API và Ansible?


7

Tôi đang làm việc trên một dự án Angular2 với Yii2 (PHP / MySQL) làm điểm API của nó. Chúng tôi sẽ cần triển khai ứng dụng Angular bằng các ngôn ngữ khác nhau cho các khách hàng khác nhau (sử dụng trình biên dịch AOT từ angular-cli).

cách tốt nhất để đạt được điều này là gì? Tôi đang xem Docker hoặc Ansible (-container) để thực hiện công việc này. Nhưng các ví dụ chủ yếu dành cho thiết lập 1: 1. Nhưng tôi sẽ cần 1: n, đại loại như:

deploy app-de new_costomer prod_server

Thêm vào đó, khi có sẵn phiên bản mới của ứng dụng, tôi muốn cập nhật toàn bộ mạng với ứng dụng mới (yêu cầu tải lên src / thư mục AOT được biên dịch và tập lệnh di chuyển db ở phía Yii2).

Lý tưởng nhất là nó sẽ làm một cái gì đó như:

deploy update network-all prod_server

Có ý kiến ​​gì không?

Để làm rõ: Tôi có một số khách hàng, mỗi khách hàng nên có container riêng (docker, thông qua ansible-container). Có các công cụ Angular được biên dịch AOT (chỉ là JS) và phụ trợ PHP với MySQL.

Mỗi khách hàng có được thiết lập này trên một máy chủ (vì vậy 3 khách hàng = 3 container docker với Angular + PHP + MySQL).

Chúng tôi đẩy các bản cập nhật lên cả Angular và PHP khá thường xuyên (tức là toàn bộ thư mục DIST cần được tải lên hoặc ít nhất là một tập lệnh di chuyển khác nhau cho phần phụ trợ PHP / MySQL cần chạy, v.v.).

Và điều này từ một lệnh (vì rõ ràng tôi không muốn có SSH vào mỗi vùng chứa để thực hiện tất cả điều đó một cách thủ công).

Vì tôi chưa bao giờ thực hiện loại thiết lập này trước đây, tôi muốn có một số ý tưởng về cách điều này có thể đạt được với những thứ như Ansible (hoặc tương tự).


Nó không rõ ràng những gì bạn đang yêu cầu. Có vẻ như vấn đề chung của bạn là quốc tế hóa. Đó thường là một vấn đề thiết kế ứng dụng, không phải là vấn đề triển khai. Bạn có thể triển khai các ngôn ngữ khác nhau dưới dạng các thùng chứa riêng biệt, nhưng tôi không chắc đó sẽ là giải pháp đơn giản hay hiệu quả nhất.
Dave Swersky

2
Trông giống như một câu hỏi được sao chép từ một trang web khác, bao gồm các liên kết và biểu tượng SE xung quanh câu hỏi. Sửa định dạng và vui lòng làm rõ câu hỏi này để hiểu và trả lời.
Evgeny

1
Xin chào @Evgeny, vâng, nó đã được sao chép từ bài đăng của tôi trên Stackexchange, nơi có ai đó đã bình luận về điều này và bảo tôi hãy đưa nó qua đây. Do đó sự trùng lặp. Tôi đã cập nhật vấn đề ở trên.
axtho

@axtho Việc đăng chéo thường không được khuyến khích bởi bạn nên có bài đăng trên trang này hoặc trên Stack Overflow chứ không phải cả hai. Đó có lẽ là lý do tại sao câu hỏi của bạn đã không được nhận rất tốt.
Aurora0001 ngày

Tốt hơn với chỉnh sửa, không chỉ định "chỉnh sửa" khi xem xét sửa đổi, chúng ta có thể biết những gì đã được thêm vào và trong hàng đánh giá, các thay đổi được tô sáng. bỏ phiếu để mở lại
Tensibai

Câu trả lời:


7

Giả sử bạn có kịch bản sau: Bạn có nhiều khách hàng, nhưng hầu hết sử dụng cùng một ứng dụng, ngoại trừ một số thay đổi về cấu hình. Bạn muốn mỗi khách hàng của bạn nhận được ứng dụng mới nhất càng sớm càng tốt.

Nếu đây là kịch bản của bạn thì hãy thử làm cho mọi thứ cần phân biệt giữa các ứng dụng thay đổi cấu hình. Bạn xây dựng một (hoặc một bộ) container chứa có thể xử lý bất kỳ khách hàng nào của bạn dựa trên cấu hình được cung cấp. Sau đó, về thời gian triển khai, bạn chỉ cần cung cấp các cấu hình phù hợp cho container này cho mỗi khách hàng của bạn.

Lợi ích của phương pháp này là bạn không thực sự phải chịu chi phí lớn khi có khách hàng mới đến. Bạn tạo cấu hình của chúng, tạo các máy chủ mới, thêm một số mục vào tệp kiểm kê và lần tiếp theo bạn triển khai, nó cũng sẽ đến đó. Đường ống CD của bạn càng được thiết lập tốt, bạn càng có thể tự động hóa bất kỳ quy trình này.

Vì vậy, dòng chảy thường trông như thế nào:

  1. Bạn có codebase ứng dụng của bạn, có thể phục vụ cho tất cả các khách hàng của bạn
  2. Bạn xây dựng bộ chứa docker cho ứng dụng của bạn (một cho giao diện, một cho phụ trợ, có thể thêm một vài hỗ trợ)
  3. Bạn có một kịch bản triển khai sử dụng tệp cấu hình để xác định nơi triển khai và những gì.
  4. Bạn chạy tập lệnh triển khai này. Nó sẽ đi qua tất cả các khách hàng của bạn và chỉ cần triển khai phiên bản mới nhất của ứng dụng của bạn với cấu hình phù hợp.

Nếu bạn có một khách hàng mới, nơi duy nhất bạn phải thay đổi là tệp cấu hình triển khai. Nếu bạn đang sử dụng ansible rất có thể bạn phải thay đổi hàng tồn kho và tệp vars của bạn. Giả sử bạn có một khách hàng mới, những người muốn ứng dụng chạy theo ngôn ngữ Tây Ban Nha và có quyền truy cập vào các tính năng beta. Cấu hình của khách hàng này có thể sẽ trông như thế này:

config.js:

SETTINGS = { locale: 'es', beta: true };

config.php:

define('CUSTOMER_LOCALE','es');
define('CUSTOMER_BETA','true');

Sau đó, bạn đảm bảo rằng trong quá trình triển khai, thùng chứa của bạn sẽ được gắn các tệp này khi khởi động.


Cảm ơn. Đó là, chủ yếu, những gì tôi cần và một điểm khởi đầu tốt. Vì tò mò: tại sao bạn lại đề xuất nhiều hình ảnh docker cho một khách hàng?
axtho

@axtho không bắt buộc, mặc dù thông thường nên tách từng mối quan tâm (frontend, backend, cơ sở dữ liệu, v.v.) thành một container riêng, để chúng có thể được triển khai và thu nhỏ độc lập
SztupY
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.