2010-07-12 6 views
8

Je cherche un bon moyen d'installer plusieurs projets Django complètement différents sur le même serveur en utilisant un seul nom de domaine. Le point est que je veux parcourir quelque chose comme:plusieurs instances de django sur un seul domaine

http://192.168.0.1/gallery/ # projet galerie photo Django
http://192.168.0.1/blog/ # un projet blogging

Cette façon, je peux développer et tester plusieurs projets de django sur le même serveur en se référant simplement à différentes URL. (note: je ne pense pas que ce module de Django Sites soit ce que je recherche car les projets doivent être distincts). A titre d'exemple, PHP se comporte de la sorte comme je peux installer quelque chose comme php-gallery et phpmyadmin sur le même serveur, juste avec des chemins d'URL différents.

Est-ce que quelqu'un sait de bonnes ressources pour configurer plusieurs projets Django sous plusieurs URL sur un seul serveur en utilisant Apache (avec mod_python ou mod_wsgi)? Les choses que je serais intéressé à savoir est de savoir comment configurer le fichier apache.conf, la configuration possible de virtualenv et les modifications apportées à l'urls.py pour y remédier. La plupart des exemples de déploiement Django que je vois sont pour une application par domaine ou sous-domaine.
Tout conseil est très apprécié.

Merci,
Joe

Répondre

15

J'ai été dans des situations où je ne pouvais pas utiliser de sous-domaines, et la façon de gérer cela avec Django est assez simple en fait.

À peu près tout dans votre fichier de paramètres sera comme une application régulière de Django, à l'exception de faire en sorte que ces paramètres comprennent votre chemin du projet:

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/' 

Le SESSION_COOKIE_PATH est essentiel pour prévenir toutes vos applications sur le même domaine de réécrire les cookies les uns des autres.

Les instructions ci-dessus doivent couvrir le côté Django, mais il y a encore beaucoup de travail à faire sur le serveur web. Par exemple, si vous utilisez apache + mod_wsgi vous devez vous assurer que chaque projet a son propre script wsgi qui est chargé comme ceci:

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 

etc.

+0

Merci pour ce bel exemple. Bon à noter sur le chemin des biscuits également! –

+0

J'ai été en mesure d'exécuter un projet en utilisant cette approche. –

+0

Comment allez-vous sur i18n_patterns qui ajoute le code de langue aux modèles et contourne ainsi votre URL racine/galerie / –

1

Faire plusieurs projets de django, chacun avec une seule application (frontend par exemple) et utiliser la cartographie url de django faire quelque chose comme ceci:

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

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

J'utilise ce, et il se détache sans accroc.

Si vous demandez un tutoriel complet/une procédure pas à pas pour régler ce problème, je suis désolé de ne pas l'avoir. J'ai juste suivi la documentation de Django et suis arrivé avec ça.

1

Une approche consiste à déployer les applications sur Apache fonctionnant sous mod_wsgi en mode démon. Documentation peut être trouvé ici: http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango

+0

mode Daemon par lui-même ce pas la solution si ils parlent de différents projets. –

6

Dans votre question, vous semblez utiliser projects et apps de façon interchangeable. Ils signifient des choses séparées dans Django. Un project inclut le fichier d'installation, la configuration de la base de données et l'URL globale urlconf, et correspond à ce que vous voulez à la racine de votre domaine. Un app est un morceau de code fonctionnel individuel qui (généralement) fait une tâche.

Si vous souhaitez déployer plusieurs applications, vous souhaitez créer un projet unique et copier chaque application dans le répertoire du projet. Si vous regardez le tutoriel, vous verrez comment inclure une application dans l'urlconf. Répétez simplement cela pour chacun, en vous assurant que les expressions rationnelles sont correctes. Le point clé ici est que vous obtenez apache travaillant pour votre projet django global, et ensuite vous utilisez l'urlconf interne de Django pour configurer où chaque application peut être accédée. N'essayez pas d'exécuter plusieurs projets sous la même racine - c'est presque certainement un signe que vous vous trompez.

Si vous faites référence à l'exécution de plusieurs projets sous un seul domaine, nous résolvons ce problème avec des sous-domaines.Puisque les projets Django que nous construisons sont (généralement) conçus pour vivre à la racine du domaine lorsqu'ils sont réellement déployés, si vous utilisez app1.example.com et app2 etc., vous pouvez tester comme vous allez le déployer, dans la racine de chaque domaine. Vous pouvez configurer des sous-domaines exactement comme vous le feriez pour configurer des domaines de premier niveau, puis passer à votre déploiement final est facile.

Si vous essayez de déployer des applications de ce type, créez un seul projet Django global et utilisez l'URL urlconfs pour inclure chaque application Django à une autre sous-URL.

+0

Merci Paul. Vous avez raison, j'ai fait des échanges croisés de projets et d'applications. Je voulais dire que je voudrais déployer plusieurs projets Django sur le serveur. Désolé pour la confusion. Espérait qu'il y avait un moyen de déployer plusieurs projets Django sur le même serveur, comme on pourrait le faire avec PHP ... en créant essentiellement un nouveau chemin d'URL sous le même domaine. Je comprends que les mécanismes d'une installation de PHP et d'une configuration de Django sont complètement différents, mais espéraient obtenir le même résultat final: http://mydomain.com/project1/ http://mydomain.com/project2/. ...plus... –

+0

J'espérais éviter les sous-domaines, car je préférerais éliminer la nécessité d'une dépendance sur un service de noms externe (DNS, fichier hosts). Cette configuration me servira surtout comme environnement de test sur mon réseau domestique avec seulement des adresses IP (pas de service de noms en cours), où j'installerais peut-être une douzaine de projets Django différents à différents stades de développement à des fins de test. –

+2

Pour l'anecdote, il est * possible * d'exécuter des projets Django côte à côte à des chemins d'URL spécifiques sur le même domaine, mais ce n'est pas joli à mettre en place. –

2

Passons directement à la terminologie.

La plupart des exemples que vous voyez sur le web sont pour un projet Django par domaine. Chaque projet peut contenir plusieurs applications . Je suppose que vous parlez de déployer plusieurs projets sur un seul domaine. (Sinon - votre question est annulée). Cela peut facilement être résolu avec un déploiement approprié par répertoire (cela dépend de la méthode de déploiement que vous utilisez) et en vous assurant que vos URL ne supposent pas qu'elles existent sur la racine du domaine.

+0

Oui, je fais référence au déploiement de plusieurs projets par domaine. Désolé pour la confusion. Merci pour votre réponse –

3

D'autres ont couvert l'utilisation de plusieurs applications dans un projet Django. Si toutefois vous vouliez dire projets et/ou n'avoir qu'une application dans chaque projet, alors la réponse simple est d'utiliser une directive WSGIScriptAlias ​​séparée pour chaque projet si vous utilisez mod_wsgi. Chaque projet peut éventuellement être délégué à un groupe de processus démon mod_wsgi afin de permettre à chacun d'être redémarré séparément sans redémarrer l'ensemble d'Apache, mais le mode démon est une chose supplémentaire qui peut être faite et non la solution elle-même.

+0

Génial, je ferai quelques recherches sur la directive WSGIScriptAlias. Merci pour le pointeur. –

Questions connexes