2010-07-12 35 views
8

Tôi đang tìm cách tốt để cài đặt nhiều dự án Django hoàn toàn khác nhau trên cùng một máy chủ chỉ sử dụng một tên miền duy nhất. Vấn đề là tôi muốn duyệt đến một cái gì đó như:nhiều phiên bản django trên một tên miền

http://192.168.0.1/gallery/ # một bộ sưu tập ảnh Django dự án dự án
http://192.168.0.1/blog/ # một blog

Bằng cách này, tôi có thể phát triển và thử nghiệm nhiều dự án django trên cùng một máy chủ bằng cách chỉ đề cập đến các URL khác nhau. (lưu ý: Tôi không nghĩ rằng mô-đun trang web Django này là những gì tôi đang tìm kiếm vì các dự án cần phải được phân biệt). Ví dụ, loại PHP hoạt động theo cách này vì tôi có thể cài đặt một cái gì đó như php-gallery và phpmyadmin trên cùng một máy chủ, chỉ với các đường dẫn URL khác nhau.

Có ai biết về bất kỳ nguồn lực tốt nào về cách thiết lập nhiều dự án Django dưới nhiều URL trên một máy chủ đơn lẻ bằng Apache (với mod_python hoặc mod_wsgi) không? Những điều tôi muốn được quan tâm trong việc biết là làm thế nào để thiết lập apache.conf, thiết lập virtualenv có thể, và thay đổi để urls.py để thích ứng này. Hầu hết các ví dụ triển khai Django mà tôi thấy là cho một ứng dụng cho mỗi tên miền hoặc tên miền phụ.
Bất kỳ lời khuyên nào được đánh giá cao.

Cảm ơn,
Joe

Trả lời

15

Tôi đã ở trong các tình huống mà tôi không thể sử dụng tên miền phụ và cách xử lý điều này với Django khá đơn giản.

Khá nhiều tất cả mọi thứ trong tập tin cài đặt của bạn sẽ giống như một ứng dụng Django thường xuyên, với ngoại lệ của việc bảo đảm các thiết lập này bao gồm con đường dự án của bạn:

MEDIA_URL = 'http://192.168.0.1/gallery/media/' 
ADMIN_MEDIA_PREFIX = '/gallery/admin_media/' 
SESSION_COOKIE_PATH = '/gallery' 
LOGIN_REDIRECT_URL = '/gallery/' 
LOGIN_URL = '/gallery/accounts/login/' 
LOGOUT_URL = '/gallery/accounts/logout/' 

Các SESSION_COOKIE_PATH là rất quan trọng để ngăn chặn tất cả các ứng dụng của bạn trên cùng một tên miền để viết lại các cookie khác.

Các hướng dẫn ở trên phải bao gồm bên Django, nhưng vẫn còn nhiều việc phải làm hơn ở phía máy chủ web. Ví dụ, nếu bạn sử dụng apache + mod_wsgi bạn sẽ cần phải chắc chắn mỗi dự án đều có kịch bản wsgi riêng của họ mà được nạp như thế này:

WSGIScriptAlias /gallery /path/to/gallery/apache/gallery.wsgi 
Alias /gallery/media /path/to/gallery/media 
Alias /gallery/admin_media /path/to/gallery/venv/lib/python2.6/site-packages/django/contrib/admin/media 

, vv

+0

Cảm ơn ví dụ tuyệt vời này. Tốt để lưu ý về đường dẫn cookie cũng! –

+0

Tôi đã có thể nhận được một dự án đang chạy bằng cách tiếp cận này. –

+0

Làm thế nào để bạn đi về i18n_patterns mà prepends mã ngôn ngữ để các mẫu và do đó circumvents url gốc của bạn/gallery / –

1

Tạo nhiều dự án django, mỗi một ứng dụng duy nhất (frontend ví dụ) và sử dụng bản đồ url django để làm một cái gì đó như thế này:

from django.conf.urls.defaults import patterns, include 

urlpatterns = patterns('', 
    url(r'^/', include('myproj.frontend.urls') 
) 

tôi sử dụng này, và nó đi ra mà không có một xô.

Nếu bạn đang yêu cầu hướng dẫn đầy đủ/hướng dẫn về cách thiết lập một cái gì đó như thế này, tôi xin lỗi tôi không có điều đó. Tôi chỉ cần làm theo các tài liệu Django và đã đưa ra điều này.

1

Một cách tiếp cận là triển khai các ứng dụng chạy Apache dưới mod_wsgi ở chế độ daemon. Tài liệu có thể được tìm thấy ở đây: http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango

+0

Daemon chế độ của bản thân nó không phải là giải pháp nếu họ đang nói về các dự án khác nhau. –

6

Trong câu hỏi của bạn, bạn đang sử dụng projectsapps thay thế cho nhau. Họ có nghĩa là những thứ riêng biệt trong Django. Một project bao gồm tệp thiết lập, cấu hình cơ sở dữ liệu và urlconf tổng thể và là những gì bạn muốn ở thư mục gốc của miền của bạn. An app là một đoạn mã chức năng riêng (thường) thực hiện một tác vụ.

Nếu bạn muốn triển khai nhiều ứng dụng, bạn muốn tạo một dự án và sao chép từng ứng dụng vào thư mục dự án. Nếu bạn nhìn vào hướng dẫn, bạn sẽ thấy cách bao gồm một ứng dụng trong urlconf. Chỉ cần lặp lại điều đó cho mỗi người, đảm bảo rằng các regex là chính xác.

Điểm mấu chốt ở đây là bạn nhận được apache làm việc cho dự án django tổng thể của bạn, và sau đó bạn sử dụng url nội bộ của Django để thiết lập nơi mỗi ứng dụng có thể được truy cập. Đừng cố gắng chạy nhiều dự án dưới gốc của cùng một url - đó gần như chắc chắn là một dấu hiệu cho thấy bạn đang làm sai.

Nếu bạn đang đề cập đến việc chạy nhiều dự án trong một tên miền, chúng tôi giải quyết vấn đề này là với tên miền phụ.

Vì dự án Django mà chúng tôi đang xây dựng (thường) được thiết kế để sống ở gốc của miền khi chúng được triển khai thực sự, nếu bạn sử dụng app1.example.comapp2 v.v., bạn có thể kiểm tra như bạn sẽ triển khai, trong thư mục gốc của mỗi miền. Bạn có thể cấu hình các tên miền phụ chính xác như bạn sẽ cấu hình tên miền cấp cao nhất, và sau đó chuyển sang triển khai cuối cùng của bạn là dễ dàng.

Nếu bạn đang cố triển khai các ứng dụng như vậy, hãy tạo một dự án Django bao quát duy nhất và sử dụng urlconfs để bao gồm mỗi ứng dụng Django tại một url phụ khác.

+0

Cảm ơn Paul. Bạn nói đúng, tôi đã gây nhầm lẫn giữa các dự án và ứng dụng. Tôi có nghĩa là tôi muốn triển khai một số dự án Django trên máy chủ. Xin lỗi vì sự nhầm lẫn. Là loại hy vọng rằng có một cách để triển khai nhiều dự án Django trên cùng một máy chủ tương tự như cách người ta có thể làm điều đó với PHP ... về cơ bản tạo một đường dẫn URL mới trong cùng một miền. Tôi hiểu rằng các cơ chế của một thiết lập PHP và một thiết lập Django là hoàn toàn khác nhau, nhưng là loại hy vọng cho cùng một kết quả cuối cùng: http://mydomain.com/project1/ http://mydomain.com/project2/. ...hơn... –

+0

Tôi đã hy vọng tránh các tên miền phụ, vì tôi muốn loại bỏ sự cần thiết phải phụ thuộc vào một dịch vụ tên bên ngoài (DNS, tệp lưu trữ). Thiết lập này sẽ hữu ích cho tôi như một môi trường thử nghiệm trên mạng gia đình của tôi chỉ với các địa chỉ IP (không có dịch vụ tên), nơi mà tôi có thể cài đặt một hoặc nhiều dự án Django khác nhau trong các giai đoạn phát triển khác nhau cho mục đích thử nghiệm. –

+2

Đối với hồ sơ, nó * là * có thể chạy các dự án Django cạnh nhau tại các đường dẫn url cụ thể trên cùng một tên miền, nhưng nó không đẹp để thiết lập. –

2

Hãy bắt đầu với thuật ngữ.

Hầu hết các ví dụ bạn thấy trên web là dành cho một dự án Django cho mỗi miền. Mỗi dự án có thể chứa một số ứng dụng .

Từ đây tôi sẽ giả sử bạn đang đề cập đến việc triển khai một số dự án trên một tên miền. (Nếu không - câu hỏi của bạn bị vô hiệu hóa).

Điều này có thể dễ dàng được giải quyết với việc triển khai phù hợp cho mỗi thư mục (điều này phụ thuộc vào phương pháp triển khai bạn đang sử dụng) và đảm bảo URL của bạn không giả định rằng chúng tồn tại trên miền gốc.

+0

Có, tôi đang đề cập đến việc triển khai nhiều dự án cho mỗi miền. Xin lỗi vì sự nhầm lẫn. Cảm ơn phản hồi của bạn –

3

Những người khác đã sử dụng nhiều ứng dụng trong một dự án Django. Tuy nhiên, nếu bạn có nghĩa là các dự án và/hoặc chỉ có một ứng dụng trong mỗi dự án, thì câu trả lời đơn giản là sử dụng một chỉ thị WSGIScriptAlias ​​riêng biệt cho mỗi dự án nếu sử dụng mod_wsgi. Mỗi dự án như vậy có thể được ủy quyền cho nhóm xử lý daemon mod_wsgi để cho phép từng được khởi động lại riêng mà không cần khởi động lại toàn bộ Apache, nhưng chế độ daemon là một điều bổ sung có thể được thực hiện và không phải là giải pháp.

+0

Tuyệt vời, tôi sẽ thực hiện một số nghiên cứu về chỉ thị WSGIScriptAlias. Cảm ơn con trỏ. –

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