mehrere Instanzen von Django in einer einzigen Domäne

8

Ich suche nach einer guten Möglichkeit, mehrere komplett unterschiedliche Django-Projekte auf demselben Server mit nur einem einzigen Domainnamen zu installieren. Der Punkt ist, dass ich zu etwas wie suchen möchte:

Ссылка # ein Django-Fotogalerie-Projekt
Ссылка # ein Blogging-Projekt

Auf diese Weise kann ich mehrere Django-Projekte auf demselben Server entwickeln und testen, indem ich nur auf verschiedene URLs referenziere. (Hinweis: Ich denke nicht, dass dieses Modul von Django Sites das ist, wonach ich suche, weil die Projekte unterschiedlich sein müssen). Als ein Beispiel verhält sich PHP auf diese Weise, da ich etwas wie php-gallery und phpmyadmin auf demselben Server installieren kann, nur mit verschiedenen URL-Pfaden.

Kennt jemand gute Ressourcen dafür, wie man mehrere Django-Projekte unter mehreren URLs auf einem einzigen Server unter Verwendung von Apache (mit entweder mod_python oder mod_wsgi) einrichten kann? Dinge, die ich wissen möchte, ist, wie man die apache.conf, mögliche virtualenv Setup und Änderungen an der urls.py um dies anzupassen. Die meisten Django-Bereitstellungsbeispiele, die ich sehe, sind für eine Anwendung pro Domäne oder Subdomain.
Jeder Rat wird sehr geschätzt.

Danke,
Joe

    
Joe J 12.07.2010, 21:17
quelle

6 Antworten

15

Ich war in Situationen, in denen ich keine Subdomains verwenden konnte, und die Art und Weise, dies mit Django zu tun, ist eigentlich ziemlich einfach.

So ziemlich alles in Ihrer Einstellungsdatei ist wie eine normale Django-App, mit der Ausnahme, dass diese Einstellungen Ihren Projektpfad enthalten:

%Vor%

Der SESSION_COOKIE_PATH ist entscheidend, um zu verhindern, dass alle Ihre Apps in derselben Domain die Cookies anderer Cookies erneut schreiben.

Die obigen Anweisungen sollten die Django-Seite abdecken, aber es gibt noch mehr Arbeit auf der Webserver-Seite. Wenn Sie beispielsweise apache + mod_wsgi verwenden, müssen Sie sicherstellen, dass jedes Projekt sein eigenes wsgi-Skript hat, das wie folgt geladen wird:

%Vor%

usw.

    
Van Gale 13.07.2010, 18:23
quelle
6

In Ihrer Frage scheinen Sie projects und apps synonym zu verwenden. Sie meinen getrennte Dinge in Django. A project enthält die Setup-Datei, die Datenbankkonfiguration und die allgemeine urlconf und ist das, was Sie im Stammverzeichnis Ihrer Domain haben möchten. Ein app ist ein einzelnes funktionales Stück Code, das (allgemein) eine Aufgabe erledigt.

Wenn Sie mehrere Apps bereitstellen möchten, möchten Sie ein einzelnes Projekt erstellen und jede App in das Projektverzeichnis kopieren. Wenn Sie sich das Tutorial ansehen, sehen Sie, wie Sie eine App in die URL-Konsole einbinden. Wiederholen Sie das für jeden einzelnen, und stellen Sie sicher, dass die Regexes korrekt sind.

Der entscheidende Punkt hier ist, dass Sie Apache für Ihr gesamtes Django-Projekt verwenden, und dann verwenden Sie Djangos interne URL-Konfiguration, um einzurichten, wo auf jede App zugegriffen werden kann. Versuche nicht, mehrere Projekte unter der Wurzel der gleichen URL auszuführen - das ist mit ziemlicher Sicherheit ein Zeichen dafür, dass du es falsch machst.

Wenn Sie mehrere Projekte in einer einzigen Domäne ausführen, lösen wir dieses Problem mit Subdomänen.

Da die Django-Projekte, die wir erstellen, in der Regel so konzipiert sind, dass sie bei der tatsächlichen Bereitstellung im Wurzelverzeichnis der Domäne liegen, können Sie, wenn Sie app1.example.com und app2 usw. verwenden, testen Bereitstellung im Stamm jeder Domäne. Sie können Sub-Domains genau so konfigurieren, wie Sie Top-Level-Domains konfigurieren würden. Dann ist es einfach, zu Ihrer endgültigen Bereitstellung zu wechseln.

Wenn Sie solche Anwendungen tatsächlich bereitstellen möchten, erstellen Sie ein einzelnes übergreifendes Django-Projekt und verwenden Sie die URL-Konventionen, um jede Django-Anwendung in eine andere Unter-URL aufzunehmen.

    
Paul McMillan 12.07.2010 21:31
quelle
3

Andere haben die Verwendung mehrerer Anwendungen in einem Django-Projekt abgedeckt. Wenn Sie jedoch Projekte und / oder nur eine Anwendung in jedem Projekt gemeint haben, dann besteht die einfache Antwort darin, für jedes Projekt eine separate WSGIScriptAlias-Direktive zu verwenden, wenn Sie mod_wsgi verwenden. Jedes dieser Projekte kann optional an eine mod_wsgi-Daemon-Prozessgruppe delegiert werden, so dass jeder separat neu gestartet werden kann, ohne den gesamten Apache neu zu starten, aber der Daemon-Modus ist eine zusätzliche Sache und nicht die Lösung selbst.

    
Graham Dumpleton 13.07.2010 03:33
quelle
2

Kommen wir gleich zur Terminologie.

Die meisten Beispiele, die Sie im Internet sehen, sind für ein Django Projekt pro Domain. Jedes Projekt kann mehrere Anwendungen enthalten.

Ab hier nehme ich an, dass Sie sich auf die Bereitstellung mehrerer Projekte in einer einzigen Domäne beziehen. (Ansonsten - Ihre Frage ist ungültig).

Dies kann leicht mit der richtigen Bereitstellung pro Verzeichnis gelöst werden (dies hängt davon ab, welche Bereitstellungsmethode Sie verwenden) und sicherstellen, dass Ihre URLs nicht davon ausgehen, dass sie im Domänenstamm vorhanden sind.

    
Yuval Adam 12.07.2010 21:35
quelle
1

Erstelle mehrere Django-Projekte, jede mit einer einzigen App (zB frontend ) und benutze djangos URL-Mapping, um so etwas zu tun:

%Vor%

Ich benutze das und es kommt ohne Probleme aus.

Wenn Sie nach einem vollständigen Tutorial / Walkthrough gefragt haben, um so etwas einzurichten, tut es mir leid, dass ich das nicht habe. Ich folgte nur der Dokumentation von Django und kam auf diese Idee.

    
rossipedia 12.07.2010 21:23
quelle
1

Ein Ansatz besteht darin, die Anwendungen für Apache bereitzustellen, die im Daemon-Modus unter mod_wsgi ausgeführt werden. Dokumentation finden Sie hier: Ссылка

    
Jason Jenkins 12.07.2010 21:30
quelle

Tags und Links