2011-02-03 41 views

Trả lời

4

Sử dụng Nginx/Apache/mod-wgigi và bạn không thể đi sai.

Nếu bạn thích một giải pháp thay thế đơn giản, chỉ cần sử dụng Apache.

Có một tài liệu triển khai rất tốt: http://lethain.com/entry/2009/feb/13/the-django-and-ubuntu-intrepid-almanac/

+0

Cảm ơn Lakshman. Điều này có vẻ khá toàn diện. Nó chỉ có rất nhiều phương pháp triển khai cho django mà nó có thể gây nhầm lẫn cho bất cứ ai mới với nó. – Sushi

6

Các tài liệu Django liệt kê Apache/mod_wsgi, Apache/mod_python và FastCGI, vv

mod_python bị phản đối bây giờ, ta nên sử dụng mod_wsgi thay thế.

Django với mod_wsgi rất dễ dàng để cài đặt, nhưng:

  • bạn chỉ có thể sử dụng một phiên bản python tại một thời điểm [sửa: bạn thậm chí chỉ có thể sử dụng phiên bản python mod_wsgi đã được biên soạn cho]
  • [sửa: dường như nếu tôi sai về mod_wsgi không hỗ trợ virtualenv: nó]

vì vậy, cho nhiều trang web (nhắm mục tiêu các phiên bản django/python khác nhau) trên một máy chủ mod_wsgi là không BES t giải pháp.

FastCGI có thể được sử dụng với virtualenv, cũng với các phiên bản python khác nhau, như bạn chạy nó với

 
./manage.py runfcgi … 

và sau đó cấu hình máy chủ web của bạn sử dụng giao diện fcgi này.

Nội dung mới, nóng về triển khai django dường như là gunicorn. Đó là một máy chủ web thực hiện wsgi và thường được sử dụng làm phụ trợ với máy chủ web "lớn" làm proxy.

Triển khai với gunicorn cảm thấy giống như fcgi: bạn chạy quy trình thực hiện công cụ xử lý django với manage.py và máy chủ web làm lối vào thế giới.

Nhưng gunicorn triển khai có một số ưu điểm so với fcgi:

  • tốc độ - Tôi không tìm thấy các nguồn khác nhau, nhưng các tiêu chuẩn nói fcgi không phải là nhanh như e thấy
  • file config, cho fcgi bạn phải thực hiện tất cả cấu hình trên dòng lệnh khi thực hiện lệnh manage.py. Điều này đến unhandy khi chạy nhiều trường hợp django thông qua một init.d (khởi động dịch vụ hệ điều hành giống như Unix). Nó luôn luôn là cùng một cmdline, chỉ với các tập tin cấu hình khác nhau
  • gunicorn có thể thả đặc quyền: không cần phải làm điều này trong init.d script của bạn, và nó dễ dàng chuyển sang một người dùng cho mỗi django dụ
  • gunicorn hoạt động giống như một daemon: viết pidfile và logfile, forking vào nền vv làm cho một lần nữa bằng cách sử dụng nó trong một init.d script dễ dàng hơn.

Vì vậy, tôi khuyên bạn nên sử dụng giải pháp gunicorn, trừ khi bạn có một trang web trên một máy chủ duy nhất có lưu lượng truy cập thấp, bạn có thể sử dụng giải pháp wsgi. Nhưng tôi nghĩ về lâu dài bạn sẽ hài lòng hơn với gunicorn.

Nếu bạn có một máy chủ web chỉ django, tôi sẽ đề nghị sử dụng nginx như frontendproxy, vì nó là hoạt động tốt nhất (một lần nữa điều này dựa trên điểm chuẩn tôi đọc trong một số blogposts - không có url nữa). Cá nhân tôi sử dụng apache như frontendproxy, vì tôi cần nó cho các trang web khác được lưu trữ trên máy chủ.

Một hướng dẫn thiết lập đơn giản cho việc triển khai django có thể được tìm thấy ở đây: http://ericholscher.com/blog/2010/aug/16/lessons-learned-dash-easy-django-deployment/

kịch bản init.d của tôi cho gunicorn tọa lạc tại github: https://gist.github.com/753053

Đáng tiếc là tôi vẫn chưa viết blog về nó, nhưng một sysadmin có kinh nghiệm sẽ có thể thực hiện các thiết lập cần thiết.

+0

Tôi xa một sysadmin có kinh nghiệm nhưng cảm ơn rất nhiều cho việc tổng hợp các phương pháp triển khai khác nhau. – Sushi

+0

OK, điều đó thúc đẩy tôi một chút để ghi lại nó càng sớm càng tốt trong blog của tôi… Tôi sẽ cập nhật câu trả lời với liên kết ngay sau khi nó được viết. – oxy

+0

Bạn * có thể * sử dụng virtualenv với mod_wsgi! –

1

Bản thân tôi đã phải đối mặt với rất nhiều vấn đề trong việc triển khai Dự án Django và tự động hóa quá trình triển khai. Apache và mod_wsgi giống như lời nguyền cho Triển khai Django. Có một số công cụ như Nginx, Gunicorn, SupervisorD và Vải có xu hướng triển khai Django. Lúc đầu, tôi đã sử dụng/cấu hình chúng một cách riêng lẻ mà không cần triển khai tự động hóa mất nhiều thời gian (tôi phải duy trì thử nghiệm cũng như máy chủ sản xuất cho khách hàng của mình và phải cập nhật chúng ngay khi tính năng mới được kiểm tra và phê duyệt). Tôi tình cờ gặp django-fagungis, hoàn toàn tự động hóa việc triển khai Django của tôi từ việc nhân bản dự án của tôi từ bitbucket để triển khai trên máy chủ từ xa của tôi (nó sử dụng Nginx, Gunicorn, SupervisorD, Fabtic và virtualenv và cũng cài đặt tất cả các phụ thuộc khi đang bay), chỉ ba lệnh :) Bạn có thể tìm thêm về nó trong bài đăng blog của tôi here. Bây giờ tôi thậm chí không cần phải tham gia vào quá trình này (mà thường mất nhiều thời gian của tôi) và một trong những nhà phát triển cơ sở của tôi chạy ba lệnh của django-fagungis mentioned here trên máy cục bộ của mình và chúng tôi nhận được một bản sao mới sắc nét dự án của chúng tôi được triển khai trong vài phút mà không gặp bất kỳ rắc rối nào :)

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