2012-02-24 32 views
5

Dự án sẽ được triển khai và chạy như thế nào. Có rất nhiều công cụ trong không gian này. Nên sử dụng cái gì và tại sao?Cách tốt nhất để chạy một dự án django trên aws là gì?

  • Supervisor
  • Gunocorn
  • Ngnix
  • Vải
  • Boto
  • Pip
  • virtualenv
  • tải cân bằng
+0

Tắt chủ đề, nhưng bạn có thể cân nhắc sử dụng Heroku để triển khai dự án Django thành AWS và bỏ qua hầu hết cuộc tranh luận này. –

Trả lời

11

Nó phụ thuộc vào cấu hình của bạn. Chúng tôi đang sử dụng ngăn xếp sau đây cho môi trường của chúng tôi trên Rackspace, nhưng bạn có thể thiết lập cùng một điều trên AWS với các phiên bản EC2.

  • Ubuntu 11.04
  • Varnish (trong bộ nhớ cache) để tránh đĩa tìm
  • nginx đến máy chủ nội dung tĩnh
  • Apache để nội dung động máy chủ (MOD-WSGI)
  • Python 2.7.2 với Django
  • Jenkins cho các bản dựng liên tục của chúng tôi
  • GIT cho điều khiển phiên bản
  • Vải f hoặc triển khai.

Vậy cách hoạt động là GIT đẩy tới kho gốc đang được Jenkins thăm dò ý kiến. Jenkins sau đó kéo các thay đổi xuống từ gốc. Xây dựng một Python Egg, chạy các bài kiểm tra Đơn vị, sử dụng Fabric để triển khai trứng này đến các môi trường cần thiết và tải lại cấu hình Apache để đảm bảo các quy trình Apache được phân nhánh đang chọn trứng Python mới.

Hy vọng điều này sẽ hữu ích.

+0

Đẹp ngăn xếp Michael bạn có cấu hình Nginx của bạn trong mã nguồn dự án của bạn? Điều gì đang quản lý việc chạy dự án python của bạn và số luồng. Tôi tin rằng Giám sát và Gunocorn có thể giúp đỡ ở đây. –

+1

Không quan tâm, lý do sử dụng Apache + ModWSGI và Nginx thay vì chỉ là Nginx fronting uWSGI là gì? Ngoài ra, đối với nội dung tĩnh, tại sao đơn vị ec2 chuyển nó thay vì chỉ lưu trữ trên s3? Có tác động hiệu suất không? – jvc26

+2

Điểm tuyệt vời. Chúng tôi bắt đầu với Apache/ModWSGI, sau đó thêm NginXinto vào phần sau, vì lý do dự đoán chúng tôi muốn giữ Apache trong môi trường PROD của chúng tôi. S3 là tuyệt vời, hoàn toàn. Chúng tôi nhận được hầu hết các công cụ của chúng tôi trên Cloudfiles (tương đương S3). Nhưng có các tệp tĩnh thay đổi rất thường xuyên đối với chúng tôi và CloudFiles không cho phép bạn đặt TTL bộ nhớ đệm trên CDN trong <20 phút. – Michael

3

Như Michael Klockel đã tuyên bố phụ thuộc vào cấu hình của bạn, tôi có:

  • Ubuntu 10.04 LTS
  • Nginx
  • Uwsgi
  • điều khiển phiên bản git
  • python virtualenv và pip

Bạn có thể kiểm tra cài đặt triển khai của mình e: Django, Virtualenv, nginx + uwsgi import module wsgi error

và tại sao tôi sử dụng nginx và uwsgi đây: http://nichol.as/benchmark-of-python-web-servers

Ngoài ra tôi sử dụng vải cho việc triển khai các ứng dụng, và đầu bếp độc tấu http://ericholscher.com/blog/2010/nov/8/building-django-app-server-chef/

bộ nhớ cache johny cho các truy vấn sql và quạ và sentry để giữ một bản ghi những gì đang diễn ra trên ứng dụng.

2

Tôi muốn sử dụng uWSGI+Nginx từ góc độ hiệu suất (tôi nghĩ việc so sánh đã được liên kết trong câu trả lời khác), pip và virtualenv để triển khai vì điều này giữ mọi thứ độc lập và tạo điều kiện triển khai sạch bằng vải hoặc tương tự. Sử dụng git để kiểm soát phiên bản. Jenkins có thể xử lý tích hợp liên tục. Tôi muốn sử dụng AWS load balancer (ELB) trước các phiên bản EC2 của bạn để cân bằng - thực hiện công việc mà không cần phải băn khoăn quá nhiều về nó. django-storages để tải các tệp tĩnh của bạn lên s3, giúp bạn tiết kiệm công sức khi có một máy chủ khác phân phát các tệp tĩnh.

Tuy nhiên, điều này phụ thuộc rất ít vào chi phí quản trị của bạn. Nếu bạn đang tìm kiếm thứ gì đó sạch sẽ và đơn giản để triển khai và mở rộng quy mô, tôi sẽ xóa toàn bộ ngăn xếp AWS EC2, sử dụng Heroku làm giao diện người dùng và s3 cho các tệp tĩnh của bạn. Điều này tiết kiệm tất cả thời gian quản trị của việc duy trì các hộp, và cho phép bạn tập trung vào dev.

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