Bạn thấy "thiết lập" nào hoạt động tốt nhất? Tôi đã sử dụng virtualenv và di chuyển dự án django của mình bên trong môi trường này, tuy nhiên tôi đã thấy một thiết lập khác trong đó có một thư mục dành cho môi trường ảo và các thư mục khác dành cho các dự án.
virtualenv là một cách để cô lập môi trường Python; do đó, nó không có một phần lớn để chơi khi triển khai - tuy nhiên trong quá trình phát triển và thử nghiệm, đó là một yêu cầu nếu không được khuyến khích.
Giá trị bạn sẽ nhận được từ virtualenv là nó cho phép bạn đảm bảo rằng các phiên bản thư viện chính xác được cài đặt cho ứng dụng. Vì vậy, không quan trọng bạn gắn chính môi trường ảo ở đâu. Chỉ cần đảm bảo rằng bạn không bao gồm nó như một phần của hệ thống lập phiên bản mã nguồn.
Bố cục hệ thống tệp không quan trọng. Bạn sẽ thấy rất nhiều bài báo ca ngợi những ưu điểm của bố cục thư mục và thậm chí cả các dự án khung mà bạn có thể sao chép như một điểm khởi đầu. Tôi cảm thấy đây là một sở thích cá nhân hơn là một yêu cầu khó. Chắc chắn nó rất tốt khi có; nhưng trừ khi bạn biết lý do tại sao , nó không thêm bất kỳ giá trị nào cho quá trình triển khai của bạn - vì vậy đừng làm điều đó vì một số blog đề xuất nó trừ khi nó phù hợp với kịch bản của bạn. Ví dụ: không cần tạo setup.py
tệp nếu bạn không có máy chủ PyPi riêng nằm trong quy trình triển khai của bạn.
Làm cách nào để thiết lập mọi thứ theo cách cho phép một số trang web được lưu trữ trong một máy chủ?
Có hai điều bạn cần thực hiện nhiều thiết lập trang web:
- Máy chủ đang lắng nghe IP công cộng trên cổng 80 và / hoặc cổng 443 nếu bạn có SSL.
- Một loạt các "quy trình" đang chạy mã nguồn django thực tế.
Mọi người sử dụng nginx cho vị trí số 1 vì nó là proxy rất nhanh và nó không đi kèm với chi phí của một máy chủ toàn diện như Apache. Bạn có thể tự do sử dụng Apache nếu bạn cảm thấy thoải mái với nó. Không có yêu cầu rằng "đối với nhiều trang web, hãy sử dụng nginx"; bạn chỉ cần một dịch vụ đang lắng nghe trên cổng đó, biết cách chuyển hướng (proxy) đến các quy trình của bạn đang chạy mã django thực tế.
Đối với # 2, có một số cách để bắt đầu các quy trình này. gevent / uwsgi là những cái phổ biến nhất. Điều duy nhất cần nhớ ở đây là không sử dụng máy chủ chạy trong sản xuất .
Đó là những yêu cầu tối thiểu tuyệt đối. Thông thường, mọi người thêm một số loại trình quản lý quy trình để kiểm soát tất cả các "máy chủ django" (# 2) đang chạy. Ở đây bạn sẽ thấy upstart
và supervisor
đề cập. Tôi thích người giám sát hơn vì nó không cần phải tiếp quản toàn bộ hệ thống (không giống như người mới bắt đầu). Tuy nhiên, một lần nữa - đây không phải là một yêu cầu khó . Bạn hoàn toàn có thể chạy một loạt các screen
phiên và phát hiện chúng. Nhược điểm là, nếu máy chủ của bạn khởi động lại, bạn sẽ phải khởi chạy lại các phiên màn hình.
Cá nhân tôi muốn giới thiệu:
- Nginx cho # 1
- Hãy lựa chọn giữa uwsgi và gunicorn - Tôi sử dụng uwsgi.
- người giám sát để quản lý các quy trình phụ trợ.
- Tài khoản hệ thống cá nhân (người dùng) cho từng ứng dụng bạn đang lưu trữ.
Lý do tôi đề xuất # 4 là cô lập các quyền; một lần nữa, không phải là một yêu cầu.
Tại sao một số người đề xuất sử dụng gunicorn_django -b 0.0.0.0:8000 và những người khác đề xuất gunicorn_django -b 127.0.0.1:8000? Tôi đã thử nghiệm cái sau trong một phiên bản Amazon EC2 nhưng nó không hoạt động trong khi cái trước đó hoạt động mà không có vấn đề gì.
0.0.0.0
có nghĩa là "tất cả địa chỉ IP" - địa chỉ meta của nó (nghĩa là địa chỉ giữ chỗ). 127.0.0.1
là một địa chỉ dành riêng luôn trỏ đến máy cục bộ. Đó là lý do tại sao nó được gọi là "localhost". Nó chỉ có thể truy cập được đối với các quy trình chạy trên cùng một hệ thống.
Thông thường, bạn có máy chủ giao diện người dùng (# 1 trong danh sách ở trên) lắng nghe địa chỉ IP công cộng. Bạn nên liên kết rõ ràng máy chủ với một địa chỉ IP .
Tuy nhiên, nếu vì lý do nào đó bạn đang sử dụng DHCP hoặc bạn không biết địa chỉ IP sẽ là gì (ví dụ: hệ thống mới được cấp phép của nó), bạn có thể yêu cầu nginx / apache / bất kỳ quy trình nào khác liên kết với 0.0.0.0
. Đây nên là một biện pháp dừng khoảng cách tạm thời .
Đối với máy chủ sản xuất, bạn sẽ có một IP tĩnh. Nếu bạn có một IP động (DHCP), thì bạn có thể đăng nhập 0.0.0.0
. Tuy nhiên, rất hiếm khi bạn có DHCP cho các máy sản xuất của mình.
Việc ràng buộc gunicorn / uwsgi với địa chỉ này không được khuyến khích trong quá trình sản xuất. Nếu bạn ràng buộc quy trình phụ trợ của mình (gunicorn / uwsgi) 0.0.0.0
, nó có thể có thể truy cập "trực tiếp", bỏ qua proxy giao diện người dùng của bạn (nginx / apache / etc); ai đó có thể yêu cầu http://your.public.ip.address:9000/
và truy cập trực tiếp vào ứng dụng của bạn, đặc biệt nếu máy chủ front-end (nginx) và back end process của bạn (django / uwsgi / gevent) đang chạy trên cùng một máy .
Tuy nhiên, bạn có thể tự do làm điều đó nếu bạn không muốn gặp rắc rối khi chạy một máy chủ proxy phía trước.
Logic đằng sau tệp cấu hình của nginx là gì? Có rất nhiều hướng dẫn sử dụng các tệp cấu hình khác nhau đến mức tôi bối rối không biết cái nào tốt hơn. Ví dụ: một số người sử dụng "bí danh / đường dẫn / đến / static / thư mục" và những người khác "root / path / to / static / folder". Có thể bạn có thể chia sẻ tệp cấu hình ưa thích của mình.
Điều đầu tiên bạn nên biết về nginx là nó không phải là một máy chủ web như Apache hoặc IIS. Nó là một proxy. Vì vậy, bạn sẽ thấy các thuật ngữ khác nhau như "ngược dòng" / "hạ lưu" và nhiều "máy chủ" đang được định nghĩa. Hãy dành chút thời gian và xem qua hướng dẫn sử dụng nginx trước.
Có rất nhiều cách khác nhau để thiết lập nginx; nhưng đây là một trong những câu trả lời cho câu hỏi của bạn về alias
vs root
. root
là một chỉ thị rõ ràng liên kết gốc tài liệu ("thư mục chính") của nginx. Đây là thư mục mà nó sẽ xem xét khi bạn đưa ra yêu cầu mà không có đường dẫn nhưhttp://www.example.com/
alias
có nghĩa là "ánh xạ tên vào một thư mục". Thư mục bí danh có thể không phải là thư mục con của gốc tài liệu.
Tại sao chúng tôi tạo liên kết tượng trưng giữa trang web có sẵn và trang web được kích hoạt trong / etc / nginx?
Đây là một cái gì đó độc đáo đối với debian (và các hệ thống giống debian như ubuntu). sites-available
liệt kê các tệp cấu hình cho tất cả các máy chủ / trang web ảo trên hệ thống. Liên kết biểu tượng từ sites-enabled
để sites-available
"kích hoạt" trang web hoặc máy chủ ảo đó. Đây là một cách để tách các tệp cấu hình và dễ dàng bật / tắt máy chủ.