2011-02-01 42 views
8

Tôi sẽ thiết lập một ứng dụng Django đơn giản chạy trong môi trường sản xuất trên một hộp Linux. Ứng dụng sẽ có rất ít lưu lượng truy cập - ít hơn 100 trang tải mỗi ngày. Có ổn không khi sử dụng máy chủ web Django được xây dựng cho điều này hay tôi nên cài đặt Apache và mod_wsgi? Nếu vậy, lý do cho việc này là gì? An ninh có lẽ?Sử dụng máy chủ web tích hợp của Django trong môi trường sản xuất

CẬP NHẬT

OK thì rõ ràng tôi không nên sử dụng máy chủ được xây dựng trong. Một số lựa chọn thay thế cho Apache trông thú vị. Có một trong đó là phổ biến hơn/thường xuyên hơn được sử dụng với Django có lẽ?

Trả lời

13

KHÔNG SỬ DỤNG NÀY (máy chủ web Django được cài sẵn) MÁY CHỦ TRONG THIẾT LẬP SẢN XUẤT. Nó đã không trải qua kiểm tra bảo mật hoặc kiểm tra hiệu suất.

http://docs.djangoproject.com/en/dev/ref/django-admin/#runserver-port-or-address-port

Nhưng bạn không cần phải sử dụng Apache nếu bạn không muốn. Bạn có thể sử dụng trực tiếp Spawning, Gunigorn v.v.

Cherokee cũng dễ thiết lập.

+0

OK cảm ơn rất rõ ràng? – paperplane

+0

@paperplane Yes :) – Epeli

+1

Bạn chắc chắn không muốn sử dụng máy chủ web tích hợp. Nếu bạn không muốn gây rối với cài đặt Apache "nặng", bạn có thể xem lighttpd (http://docs.djangoproject.com/en/dev/howto/deployment/fastcgi/?from=olddocs#lighttpd-setup) hoặc nginx (http://code.djangoproject.com/wiki/DjangoAndNginx) – bhamby

16

Is it okay để sử dụng Django webserver BUILTIN cho điều này

số

Tôi có nên cài đặt Apache và mod_wsgi?

Có.

Nếu có, lý do cho điều này là gì? An ninh có lẽ?

Một phần.

Quan trọng hơn, máy chủ đồ chơi nhỏ Django là đơn luồng và bất kỳ lỗi nào trong mã của bạn bị treo máy chủ. Điều này có nghĩa là khi hai người dùng nhấp gần như cùng một lúc, truy vấn của người dùng phải đi qua tất cả các cách thông qua Django trước khi truy vấn của người dùng có thể bắt đầu.

Và điều này sẽ phải bao gồm tốc độ tải xuống cực nhanh đến màn hình nền.

Apache (giống như tất cả các lựa chọn thay thế, lighttpd hoặc nginx) là đa luồng. Phần chậm nhất của giao dịch là tải xuống từ Apache tới máy tính để bàn. Bạn không muốn mã Python (và Django) xử lý điều này theo cách đơn luồng. Ngay cả đối với chỉ một vài người dùng.

Ngoài ra, bạn không những gì Django phục vụ phương tiện truyền thông tĩnh (ví dụ, CSS và các tập tin thư viện JS.)

Một chỗ chậm duy nhất trong ứng dụng của bạn sẽ không thực hiện việc thông hệ thống tổng thể nếu Apache và mod_wsgi là trong địa điểm. Trang đầu ra của một yêu cầu có thể được tải xuống từ từ đến máy tính để bàn PC song song với đầu ra của người dùng khác.

+0

Cảm ơn rất hữu ích. – paperplane

+0

"Ngoài ra, bạn không phải là những gì Django phục vụ phương tiện truyền thông tĩnh (tức là, tập tin thư viện CSS và JS.)" - Tại sao? –

2

Máy chủ Django tích hợp không được xây dựng để sản xuất. Có nhiều lý do tại sao, chủ yếu là an ninh và hiệu quả. Cách được khuyến nghị là sử dụng mod_wsgi được đề cập trong tài liệu here

9

Sử dụng nginx + gunicorn.

Nginx: năm dòng cấu hình. Gunicorn: hai dòng cấu hình. Thật dễ dàng và hiệu quả. Để kiểm soát tốt hơn bạn có thể sinh ra quá trình gunicorn bằng cách sử dụng supervisord.

Cả gunicorn và supervisord đều có sẵn để cài đặt bằng pip, và nginx có sẵn trong hầu như mọi bản phân phối trong nhóm gói mặc định.

+0

bạn có biết thay đổi không, nếu thiết lập Gunicorn nhanh hơn thiết lập nhanh cgi? – Nick

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