配置Django和Apache

时间:2015-03-25 08:19:27

标签: django apache python-2.7

8年前,我曾经在一个PHP项目中完美地工作,在这个项目中运行一个新网站稍微简单容易,只需复制你的文件,创建虚拟主机&运行你的网站。

有一段时间我参与使用Python创建一个项目,所以有些挖掘我发现Django是最合适的框架,再次搜索如何运行Django应用程序开始开发,我在youtube&amp上关注一些教程;我找到了以下内容:

[注意:我的工作环境是Mac osx 10.10,Ubuntu 14.04]

  1. python集成在我的两个操作系统
  2. 我必须安装PIP [install easy_install first]
  3. 安装virtualenv
  4. 创造新的virtualenv&激活它。
  5. 使用PIP安装Django
  6. 启动Django&运行服务器然后我必须得到IP [127.0.0.1:8000]
  7. 毕竟我必须按照教程开始开发,但我有些问题在哪里:

    1. 我如何使用apache + mod_wsgi为我的django站点创建虚拟主机,因为我习惯使用MAMP PRO或在UBUNTO上内置apache,所以我发现在我的开发环境中管理多个django站点有点困难
    2. 如何配置生产服务器来运行我的django网站,因为我也是RedHat的管理员
    3. 我知道我对Python应该使用的不同方式感到有点困惑。

1 个答案:

答案 0 :(得分:0)

嗯,您知道如何创建虚拟主机,因此您知道如何为多个站点提供服务。

下面是运行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个文件 - 生产和开发,所以你可能也想考虑它。