2010-07-12 10 views
8

Sto cercando un buon modo per installare più progetti Django completamente diversi sullo stesso server usando solo un singolo nome di dominio. Il punto è che voglio passare a qualcosa di simile:più istanze di django su un singolo dominio

http://192.168.0.1/gallery/ # una galleria di foto di Django progetto
http://192.168.0.1/blog/ # un blogging

questo modo, posso sviluppare e testare più progetti Django sullo stesso server semplicemente facendo riferimento a URL diversi. (nota: non penso che questo modulo di Django Sites sia quello che sto cercando perché i progetti devono essere distinti). Ad esempio, PHP si comporta in questo modo in quanto posso installare qualcosa come php-gallery e phpmyadmin sullo stesso server, solo con percorsi URL diversi.

Qualcuno sa di buone risorse su come configurare più progetti Django su più URL su un singolo server utilizzando Apache (con mod_python o mod_wsgi)? Le cose che sarei interessato a sapere è come impostare apache.conf, la possibile configurazione di virtualenv e le modifiche a urls.py per sistemare tutto ciò. La maggior parte degli esempi di distribuzione di Django che vedo sono per un'applicazione per dominio o sottodominio.
Qualsiasi consiglio è molto apprezzato.

Grazie,
Joe

risposta

15

Sono stato in situazioni in cui non è possibile utilizzare sottodomini e il modo di gestirlo con Django è piuttosto semplice.

Praticamente tutto nel file di impostazioni sarà proprio come una normale app Django, con l'eccezione di assicurarsi queste impostazioni includono il vostro percorso del progetto:

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

Il session_cookie_path è fondamentale per evitare che tutte le tue applicazioni su lo stesso dominio dalla riscrittura reciproca dei cookie.

Le istruzioni di cui sopra dovrebbero riguardare il lato Django, ma c'è ancora molto lavoro da fare sul lato server web. Ad esempio, se si utilizza Apache + mod_wsgi è necessario assicurarsi che ogni progetto ha il proprio script WSGI che viene caricato in questo modo:

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 

ecc modalità

+0

Grazie per questo grande esempio. Buono a notare anche il percorso dei cookie! –

+0

Sono riuscito a far funzionare un progetto utilizzando questo approccio. –

+0

Come si fa su i18n_patterns che antepone il codice lingua ai pattern e quindi aggira il tuo URL/galleria / –

1

fare più progetti Django, ciascuno con una singola applicazione (frontend per esempio) e utilizzare la mappatura URL di Django per fare qualcosa di simile:

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

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

Io uso questo, e si stacca senza intoppi.

Se stai chiedendo un'esercitazione/procedura completa per impostare qualcosa di simile, mi dispiace di non averlo. Ho appena seguito la documentazione di Django e ho trovato questo.

1

Un approccio consiste nel distribuire le applicazioni ad Apache in esecuzione in mod_wsgi in modalità daemon. La documentazione può essere trovata qui: http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango

+0

Daemon di per sé non è la soluzione, se stanno parlando di diversi progetti. –

6

Nella tua domanda, sembra che tu stia usando projects e apps in modo intercambiabile. Significano cose separate in Django. A project include il file di installazione, la configurazione del database e urlconf generale ed è ciò che si desidera nella directory principale del dominio. Un app è un singolo pezzo funzionale di codice che (generalmente) svolge un compito.

Se si desidera distribuire più app, si desidera creare un singolo progetto e copiare ciascuna app nella directory del progetto. Se guardi il tutorial, vedrai come includere un'app in urlconf. Ripeti semplicemente quello per ognuno, assicurandoti che le regex siano corrette.

Il punto chiave qui è che apache funziona per il tuo progetto django complessivo, e quindi usi urlconf di Django per impostare dove è possibile accedere a ciascuna app. Non provare a eseguire più progetti sotto la radice dello stesso url - questo è quasi certamente un segno che stai sbagliando.

Se si fa riferimento a eseguire più progetti in un singolo dominio, risolviamo questo problema con i sottodomini.

Poiché i progetti Django stiamo costruendo sono (generalmente) progettato per vivere alla radice del dominio quando sono effettivamente distribuiti, se si utilizza app1.example.com e app2 ecc, è possibile verificare come si sarà distribuendo, nella radice di ciascun dominio. È possibile configurare i sottodomini esattamente come si configureranno i domini di primo livello e quindi passare alla distribuzione finale è semplice.

Se si sta tentando di implementare applicazioni in questo modo, creare un progetto Django sovradimensionato e utilizzare urlconfs per includere ogni app Django in un sotto-sotto-URL differente.

+0

Grazie Paul. Hai ragione, ho scambiato in modo confuso progetti e app. Intendevo che mi piacerebbe distribuire diversi progetti Django sul server. Dispiace per la confusione. Era come sperare che esistesse un modo per distribuire più progetti Django sullo stesso server, in modo simile a come si potrebbe farlo con PHP ... essenzialmente creando un nuovo percorso URL sotto lo stesso dominio. Capisco che i meccanismi di un PHP, una configurazione e una configurazione di Django sono completamente diversi, ma speravo nello stesso risultato finale: http://mydomain.com/project1/ http://mydomain.com/project2/. ...Di Più... –

+0

Speravo di evitare sottodomini, poiché preferirei eliminare la necessità di una dipendenza da un servizio nomi esterno (DNS, file hosts). Questa configurazione sarà utile principalmente per me come ambiente di test sulla mia rete domestica con solo indirizzi IP (nessun servizio di nameservice in esecuzione), dove installerei forse una dozzina di progetti Django diversi in diverse fasi di sviluppo a scopo di test. –

+2

Per la cronaca, * è * possibile eseguire i progetti Django fianco a fianco in percorsi URL specifici sullo stesso dominio, ma non è bello da configurare. –

2

Andiamo dritto sulla terminologia.

La maggior parte degli esempi che vedi sul web sono per un progetto Django per dominio. Ogni progetto può contenere diverse applicazioni .

Da qui in poi presumo che si stia riferendo alla distribuzione di più progetti su un singolo dominio. (Altrimenti, la tua domanda è annullata).

Questo può essere facilmente risolto con una distribuzione appropriata per directory (ciò dipende dal metodo di distribuzione utilizzato) e assicurando che gli URL non suppongano che siano presenti nella radice del dominio.

+0

Sì, mi riferisco alla distribuzione di più progetti per dominio. Dispiace per la confusione. Grazie per la tua risposta –

3

Altri hanno coperto l'uso di più applicazioni all'interno di un progetto Django. Se tuttavia intendevi progetti e/o hai solo un'applicazione in ogni progetto, la semplice risposta è usare una direttiva WSGIScriptAlias ​​separata per ogni progetto se si utilizza mod_wsgi. Ciascun progetto di questo tipo può essere delegato a un gruppo di processi daemon mod_wsgi in modo da consentire a ciascuno di essere riavviato separatamente senza riavviare l'intero Apache, ma la modalità daemon è una cosa aggiuntiva che può essere fatta e non la soluzione stessa.

+0

Impressionante, farò qualche ricerca sulla direttiva WSGIScriptAlias. Grazie per il puntatore. –

Problemi correlati