web-dev-qa-db-ja.com

複数のDjango Apacheおよびmod_wsgiを備えたサイト

Debian 5を使用する同じサーバーで複数のサイトをホストしたいのですが、site1site2site3があり、IPが155.55.55.1であると仮定します。

site1: 155.55.55.1:80  , script at /opt/Django/site1/
site2: 155.55.55.1:8080, script at /opt/Django/site2/
site3: 155.55.55.1:8090, script at /opt/Django/site3/

Apacheのデフォルトは次のとおりです。

<VirtualHost *:80>
    ServerName /
    ServerAlias  */
    DocumentRoot /opt/Django/site1/
    LogLevel warn
    WSGIScriptAlias / /opt/Django/site1/Apache/Django.wsgi
    Alias /media /opt/Django/site1/media/statics
    Alias /admin_media  /home/myuser/Django-1.1/Django/contrib/admin/media 
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/usr/share/phpmyadmin"
    ServerName /phpmyadmin
    Alias /phpmyadmin /usr/share/phpmyadmin
    <Directory /usr/share/phpmyadmin>
        Options Indexes FollowSymLinks
        AllowOverride None
        Order Deny,Allow
        Allow from all
    </Directory>
</VirtualHost>

そして、これはsite1/opt/Django/site1/Apache/Django.wsgiのwsgi構成です。

import os, sys
import Django.core.handlers.wsgi

sys.path.append('/opt/Django')
sys.path.append('/opt/Django/site1')

os.environ['Django_SETTINGS_MODULE'] = 'site1.settings'
application = Django.core.handlers.wsgi.WSGIHandler()

Djangoベースのサイトで、site2のように提供されるsite3site1を追加するにはどうすればよいですか?

56
Hellnar

ServerName/ServerAliasディレクティブが間違っています。 ServerNameはホスト名にする必要があります。おそらくServerAliasを削除するだけです。

次に、明白で重複したVirtualHost/Listenディレクティブを実行し、ファイルシステム内のスクリプトのポート番号と場所を変更します。

最後に、Djangoコードが存在する場所にDocumentRootを設定しないでください。Apache構成を詰め込んだ場合、ダウンロードするソースコードを誤って公開してしまいやすくなります。そのため、DjangoサイトのVirtualHostからDocumentRootディレクティブを削除するだけです。

Listen 80

<VirtualHost *:80>
ServerName www.example.com
WSGIScriptAlias / /opt/Django/site1/Apache/Django.wsgi
Alias /media /opt/Django/site1/media/statics
Alias /admin_media  /home/myuser/Django-1.1/Django/contrib/admin/media

<Directory opt/Django/site1/Apache>
Order allow,deny
Allow from all
</Directory>

<Directory /home/myuser/Django-1.1/Django/contrib/admin/media>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

Listen 8080

<VirtualHost *:8080>
ServerName www.example.com
WSGIScriptAlias / /opt/Django/site2/Apache/Django.wsgi
Alias /media /opt/Django/site2/media/statics
Alias /admin_media  /home/myuser/Django-1.1/Django/contrib/admin/media

<Directory opt/Django/site2/Apache>
Order allow,deny
Allow from all
</Directory>

<Directory /home/myuser/Django-1.1/Django/contrib/admin/media>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

Listen 8090

<VirtualHost *:8090>
ServerName www.example.com
WSGIScriptAlias / /opt/Django/site3/Apache/Django.wsgi
Alias /media /opt/Django/site3/media/statics
Alias /admin_media  /home/myuser/Django-1.1/Django/contrib/admin/media

<Directory opt/Django/site3/Apache>
Order allow,deny
Allow from all
</Directory>

<Directory /home/myuser/Django-1.1/Django/contrib/admin/media>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

また、静的ファイルへのアクセスを許可するための欠落しているDirectoryディレクティブを追加しました。ただし、パスを確認する必要があります。

必ずお読みください:

http://code.google.com/p/modwsgi/wiki/IntegrationWithDjangohttp://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines#Hosting_Of_Static_Files

詳細については。


更新1

ところで、同じApacheでPHPを使用しているため、mod_wsgiデーモンモードを使用して、各Djangoインスタンスを独自の個別のプロセスにプッシュする方がはるかに優れています。これにより、PHPのためにメインのApacheプロセスが強制的にシングルスレッド化される場合でも、これらのプロセスをマルチスレッド化できます。最終結果は、prefork MPMを使用して埋め込みモードで各プロセスで複数のDjangoインスタンスを実行する場合よりも、使用されるメモリがはるかに少なくなります。 Djangoコードはスレッドセーフである必要があります。上記に加えて、WSGIDaemonProcess/WSGIProcessGroupを各Django VirtualHostに追加します。デーモンプロセスグループの名前はVirtualHostごとに異なります。

<VirtualHost *:80>
WSGIDaemonProcess site1 display-name=%{GROUP}
WSGIProcessGroup site1
... existing stuff
</VirtualHost>

<VirtualHost *:8080>
WSGIDaemonProcess site2 display-name=%{GROUP}
WSGIProcessGroup site2
... existing stuff
</VirtualHost>

<VirtualHost *:8090>
WSGIDaemonProcess site3 display-name=%{GROUP}
WSGIProcessGroup site3
... existing stuff
</VirtualHost>

これにより、Apache全体を再起動することなく、各Djangoインスタンスをより簡単に再起動することもできます。読んだ:

http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide#Delegation_To_Daemon_Processhttp://code.google.com/p/modwsgi/wiki/ReloadingSourceCode

104

すべてのvirtualHost構成を1か所に置くことは問題なく機能しますが、Debianには/ etc/Apache2/sites-availableの各サイトのファイルにそれらを分離するという独自のコンセプトがあります。このようにして、サーバー管理者は、サイト管理者のUNIXユーザーごとに個別のアクセス権を構成ファイルに割り当てることもできます。スクリプトは、サイトがアクティブかどうかを確認できます。

基本的に、Django-Adminのインストールのための1つの中心的なハウツーがあればいいのですが、現在の多数の個別のドキュメント、リンク、およびブログ記事は、Djangoの普及にはあまり役立ちません。

2
Ed Doerr