好吧,您知道如何创建虚拟主机,因此您知道如何为多个站点提供服务。
下面是一个运行 wsgi 对象的虚拟主机的模板——你可以在 django 项目中找到它。
它有一个我称为“public”的静态文件夹的别名,并链接到实际文件夹“static”。
在 settings.py 上
# The static alias
STATIC_URL = '/public/'
# The actual static folder
STATIC_ROOT = 'static'
只需确保 apache 用户“www-data”对您可能使用的文件夹具有访问和写入权限,例如上传文件的“媒体”。
<VirtualHost *:80>
WSGIDaemonProcess yourproject display-name=%{GROUP}
WSGIProcessGroup yourproject
DocumentRoot /var/www/public_html/youproject/src/
ServerName youproject.com
ErrorLog ${APACHE_LOG_DIR}/youproject.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/youproject_access.log combined
WSGIScriptAlias / /var/www/public_html/youproject/src/project/wsgi.py
<Directory "/var/www/public_html/youproject/src/project/">
<Files wsgi.py>
Allow from all
Order deny,allow
</Files>
</Directory>
Alias /public /var/www/public_html/youproject/src/static
<Directory /var/www/public_html/youproject/src/static>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
你可以用上面的方法运行一个django项目,但是如果你想在服务器上有不同的包,你可能需要考虑在每个项目上运行一个virtualenv并将那个env传递给wsgi。
这样您就可以为每个项目使用独立的包。
文件夹结构示例:
-env (virtualenv)
-src (django files)
---- project
----- ----- settings
----- ----- ----- production.py
----- ----- ----- development.py
----- ----- ----- default.py
----- ----- wsgi.py
----- ----- urls.py
---- apps (Your apps)
---- static
---- media
---- manage.py
django wsgi.py
import os
import sys
import site
# Setting python paths
project_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
git_path = os.path.dirname(project_path)
# Adding the site-packages of the chosen virtualenv to work with
virtual_env_path = os.path.join(git_path, 'env')
virtual_env_lib_path = os.path.join(virtual_env_path, 'lib', 'python2.7', 'site-packages')
# Adding the site-packages of the chosen virtualenv to work with
site.addsitedir(virtual_env_path)
# Adding directories to PYTHON PATH
sys.path.append(project_path)
sys.path.append(os.path.join(project_path, 'project'))
# Choosing which settings the project will use - production / development
# from project.config import server
# os.environ.setdefault("DJANGO_SETTINGS_MODULE", server.DJANGO_SETTINGS)
# Lets just select the production settings for now
os.environ.setdefault("DJANGO_SETTINGS_MODULE", 'project.settings.production')
# Activating virtual env
activate_env = os.path.expanduser(os.path.join(virtual_env_path, 'bin', 'activate_this.py'))
execfile(activate_env, dict(__file__=activate_env))
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
如果您检查上面,有一个注释部分可以选择 settings.py 文件。
我通常运行 2 个文件 - 生产和开发,所以你可能也想考虑一下。