2011-10-08 30 views
10

Tôi đang làm việc với một khách hàng yêu cầu thiết lập máy chủ nhiều giai đoạn: máy chủ phát triển, máy chủ giai đoạn và máy chủ sản xuất/trực tiếp.Máy chủ Django và nhiều tầng

Giai đoạn phải ổn định vì có thể kiểm tra tất cả các tính năng mới mà chúng tôi phát triển tại máy chủ phát triển và mang nó đến máy chủ trực tiếp.

Chúng tôi sử dụng git và github để kiểm soát phiên bản. Tôi sử dụng phiên bản máy chủ Ubuntu làm hệ điều hành.

Vấn đề là, tôi chưa bao giờ làm việc trong kế hoạch máy chủ nhiều giai đoạn như vậy. Bạn nên giới thiệu phần mềm/dự án nào để thực hiện một cách thích hợp để xử lý các thiết lập đó, đặc biệt là triển khai và di chuyển một tính năng mới được phát triển lên sân khấu và sau đó đến máy chủ trực tiếp?

+0

Đối với những người đã bỏ phiếu để đóng, các công cụ và quy trình liên quan đến triển khai không liên quan đến phát triển phần mềm như thế nào? –

+0

Tôi cũng tò mò muốn biết rằng, triển khai và các công cụ liên quan là một phần thiết yếu của vòng đời phần mềm. – Hellnar

+0

Josh: không may câu hỏi này không có câu trả lời hay nào (là mở). Đây là lý do tại sao mọi người bỏ phiếu để đóng nó. Loại câu hỏi này sẽ tốt hơn cho một số loại diễn đàn, nhưng không tốt hơn cho stackoverflow. –

Trả lời

7

Chúng tôi sử dụng hai phương pháp di chuyển mã khác nhau từ môi trường đến môi trường. Đầu tiên là sử dụng các nhánh và bộ kích hoạt với hệ thống kiểm soát nguồn của chúng ta (trong trường hợp của chúng ta, mặc dù bạn có thể làm điều tương tự với git). Thứ hai, là sử dụng vải, một thư viện python để thực thi mã shell trên một số máy chủ.

Sử dụng điều khiển nguồn, bạn có thể có một số nhánh chính, như productiondevelopmentstaging. Giả sử bạn muốn di chuyển một đối tượng địa lý mới vào dàn dựng. Tôi sẽ giải thích về mặt thủy ngân, nhưng bạn có thể chuyển các lệnh qua git và nó sẽ ổn thôi.

hg update staging 
hg merge my-new-feature 
hg commit -m 'my-new-feature > staging' 
hg push 

Sau đó, bạn có máy chủ điều khiển nguồn từ xa đẩy tới tất cả các máy chủ web bằng trình kích hoạt. Trình kích hoạt trên mỗi máy chủ web sau đó sẽ thực hiện cập nhật và tải lại máy chủ web.

Để chuyển từ dàn dựng sang sản xuất, nó cũng dễ dàng.

hg update production 
hg merge staging 
hg commit -m 'staging > production' 
hg push 

Đây không phải là phương pháp triển khai tuyệt vời nhất và khiến việc quay trở lại khá khó khăn. Nhưng nó nhanh chóng và dễ dàng để thiết lập, và vẫn còn tốt hơn rất nhiều so với việc triển khai từng thay đổi cho mỗi máy chủ theo cách thủ công.

Tôi sẽ không trải qua vải vì có thể tham gia khá nhiều. Bạn nên đọc their documentation để bạn hiểu những gì nó có khả năng. Có rất nhiều hướng dẫn xung quanh cho vải và django. Tôi rất khuyên bạn nên các tuyến đường vải vì nó mang lại cho bạn nhiều kiểm soát hơn, và chỉ liên quan đến việc viết một số python.

2

Hãy thử Gondor.io hoặc Ep.io, cả hai đều làm cho nó khá dễ dàng (gondor đặc biệt trội trong lĩnh vực này) để có hai + trường hợp với mã rất giống nhau, từ VCS của bạn - và để di chuyển dữ liệu qua lại. (nếu bạn cần một lời mời, hãy hỏi trong IRC, nhưng nếu tôi nhớ lại, cả hai đều đang mở)

4

Có một nice branching model for git (vì nó cũng được sử dụng bởi chính github chẳng hạn). Bạn có thể dễ dàng áp dụng mô hình phân nhánh này bằng cách sử dụng git-flow, là phần mở rộng git cho phép bạn áp dụng một số hoạt động lưu trữ cấp cao phù hợp với mô hình này. Ngoài ra còn có một số nice blogpost về điều này.

Tôi không biết chính xác bạn muốn tự động hóa trong quy trình triển khai của mình, nhưng nếu bạn áp dụng mô hình được đề cập ở trên, hầu hết việc xử lý phiên bản chính xác được thực hiện bởi git.

Để thêm một số xử lý tự động nữa, fabric là công cụ đơn giản nhưng tuyệt vời và bạn sẽ tìm thấy many tutorials about its usage (cũng kết hợp với git).

Để xử lý các phụ thuộc python sử dụng virtualenv and pip là chắc chắn là một cách rất tốt để thực hiện.

Nếu bạn cần thứ phức tạp hơn, ví dụ: để xử lý nhiều hơn một cá thể django trên một máy và để xử lý phụ thuộc hệ thống rộng, vv, kiểm tra puppet hoặc chef.

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