2010-07-12 19 views
8

Estoy buscando una buena manera de instalar múltiples proyectos de Django completamente diferentes en el mismo servidor usando solo un nombre de dominio. El punto es que quiero para navegar a algo como:instancias múltiples de django en un solo dominio

http://192.168.0.1/gallery/ # una galería de fotos de Django Proyecto
http://192.168.0.1/blog/ # a los blogs

De esta manera, puedo desarrollar y probar múltiples proyectos de Django en el mismo servidor simplemente haciendo referencia a diferentes URL. (nota: no creo que este módulo de Django Sites sea lo que estoy buscando porque los proyectos deben ser distintos). Como ejemplo, PHP se comporta de esta manera, ya que puedo instalar algo como php-gallery y phpmyadmin en el mismo servidor, solo con diferentes rutas de URL.

¿Alguien sabe de algún buen recurso de cómo configurar múltiples proyectos de Django bajo múltiples URL en un único servidor usando Apache (con mod_python o mod_wsgi)? Lo que me gustaría saber es cómo configurar el apache.conf, la posible configuración de virtualenv y los cambios en urls.py para acomodar esto. La mayoría de los ejemplos de implementación de Django que veo son para una aplicación por dominio o subdominio.
Cualquier consejo es muy apreciado.

Gracias,
Joe

Respuesta

15

He estado en situaciones en las que no podía usar subdominios, y la forma de manejar esto con Django es bastante simple en realidad.

casi todo en su archivo de configuración será como una aplicación regular de Django, con la excepción de asegurarse de que estos ajustes incluyen su ruta del proyecto:

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

El SESSION_COOKIE_PATH es fundamental para evitar que todas sus aplicaciones en el mismo dominio de reescribir las cookies de los demás.

Las instrucciones anteriores deben cubrir el lado de Django, pero todavía hay más trabajo por hacer en el lado del servidor web. Por ejemplo, si se utiliza Apache + mod_wsgi que necesita para asegurarse de que cada proyecto tiene su propio guión wsgi que se carga la siguiente manera:

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. Modo

+0

Gracias por este gran ejemplo. ¡Es bueno tener en cuenta también la ruta de las cookies! –

+0

Pude ejecutar un proyecto utilizando este enfoque. –

+0

¿Cómo se hace para i18n_patterns que antepone el código de idioma a los patrones y por lo tanto evita su url raíz/galería / –

1

Realiza múltiples proyectos de Django, cada uno con una sola aplicación (frontend por ejemplo) y utilizar la asignación de URL de Django para hacer algo como esto:

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

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

utilizo este, y sale sin problemas.

Si está pidiendo un tutorial completo/tutorial sobre la configuración de algo así, lo siento, no tengo eso. Solo seguí la documentación de Django y se me ocurrió esto.

6

En su pregunta, parece estar utilizando projects y apps indistintamente. Significan cosas separadas en Django. Un project incluye el archivo de configuración, la configuración de la base de datos y el urlconf general, y es lo que desea en la raíz de su dominio. Un app es una pieza de código funcional individual que (generalmente) realiza una tarea.

Si desea implementar varias aplicaciones, desea crear un único proyecto y copiar cada aplicación en el directorio del proyecto. Si miras el tutorial, verás cómo incluir una aplicación en el urlconf. Simplemente repita eso para cada uno, asegurándose de que las expresiones regulares sean correctas.

El punto clave aquí es que obtiene apache trabajando para su proyecto general de django, y luego usa el urlconf interno de Django para configurar dónde se puede acceder a cada aplicación. No intente ejecutar varios proyectos en la raíz de la misma url; es casi seguro que es una señal de que lo está haciendo mal.

Si se refiere a ejecutar varios proyectos en un solo dominio, resolvemos que este problema es con los subdominios.

Dado que los proyectos de Django que estamos construyendo son (en general) diseñado para vivir en la raíz del dominio, cuando en realidad están desplegados, si utiliza app1.example.com y app2 etc., puede probar como va a implementar, en la raíz de cada dominio Puede configurar subdominios exactamente como lo haría con los dominios de nivel superior, y luego pasar a su implementación final es fácil.

Si está intentando implementar aplicaciones así, cree un único proyecto general de Django y use los urlconfs para incluir cada aplicación de Django en una url diferente.

+0

Gracias Paul. Tienes razón, confundí proyectos y aplicaciones. Quise decir que me gustaría implementar varios proyectos de Django en el servidor. Perdón por la confusion. Esperaba que hubiera una manera de implementar múltiples proyectos de Django en el mismo servidor de forma similar a cómo se podría hacer con PHP ... esencialmente creando una nueva ruta de URL bajo el mismo dominio. Entiendo que los mecanismos de una configuración de PHP y de Django son completamente diferentes, pero esperaba el mismo resultado final: http://mydomain.com/project1/ http://mydomain.com/project2/. ...Más... –

+0

Esperaba evitar los subdominios, ya que preferiría eliminar la necesidad de una dependencia en un servicio de nombres externo (DNS, archivo de hosts). Esta configuración me será útil principalmente como un entorno de prueba en mi red doméstica con solo direcciones IP (sin servicio de nombres en ejecución), donde podría instalar aproximadamente una docena de diferentes proyectos de Django en diferentes etapas de desarrollo para fines de prueba. –

+2

Para el registro, * es * posible ejecutar proyectos de Django uno al lado del otro en rutas de URL específicas en el mismo dominio, pero no es agradable de configurar. –

2

Vayamos directo a la terminología.

La mayoría de los ejemplos que usted ve en la web son para un proyecto de Django por dominio. Cada proyecto puede contener varias aplicaciones .

A partir de ahora asumiré que se refiere a la implementación de varios proyectos en un único dominio. (De lo contrario, su pregunta queda anulada).

Esto se puede resolver fácilmente con la implementación adecuada por directorio (esto depende del método de implementación que esté utilizando), y garantizar que sus URL no asuman que existen en la raíz del dominio.

+0

Sí, me refiero a la implementación de proyectos múltiples por dominio. Perdón por la confusion. Gracias por su respuesta –

3

Otros han cubierto el uso de varias aplicaciones dentro de un proyecto de Django. Sin embargo, si se refería a proyectos y/o solo tiene una aplicación en cada proyecto, entonces la respuesta simple es usar una directiva WSGIScriptAlias ​​por separado para cada proyecto si usa mod_wsgi. Cada uno de estos proyectos se puede delegar opcionalmente a un grupo de procesos demonio mod_wsgi para permitir que cada uno se reinicie por separado sin reiniciar todo Apache, pero el modo daemon es algo adicional que se puede hacer y no la solución en sí misma.

+0

Impresionante, voy a investigar sobre la directiva WSGIScriptAlias. Gracias por el puntero. –

Cuestiones relacionadas