【问题标题】:Configure Django along with Apache配置 Django 和 Apache
【发布时间】:2015-05-28 19:44:34
【问题描述】:

8 年前,我曾经在一个 PHP 项目上完美地工作,其中运行一个新网站非常简单易行,只需复制您的文件,创建虚拟主机并运行您的网站。

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

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

  1. python 集成在我的两个操作系统上
  2. 我必须安装 PIP [先安装 easy_install]
  3. 安装 virtualenv
  4. 创建新的 virtualenv 并激活它。
  5. 使用 PIP 安装 Django
  6. 启动 Django 并运行服务器,然后我必须获取 IP [127.0.0.1:8000]

在这一切之后,我必须按照教程开始开发,但我遇到了一些问题:

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

【问题讨论】:

  • 你为什么不阅读文档,所有这些都得到了充分的解释?

标签: django apache python-2.7


【解决方案1】:

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

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

【讨论】:

  • 我想先了解如何在 MAMP Pro 和 ubuntu 14.04 上安装 mod_wsgi,因为我知道它是在 apache 上运行 python 项目所支持的模块
  • 对于 ubuntu,您可以使用“sudo aptitude install libapache2-mod-wsgi”轻松完成
猜你喜欢
  • 2023-04-09
  • 1970-01-01
  • 2011-05-06
  • 1970-01-01
  • 2012-03-10
  • 1970-01-01
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
相关资源
最近更新 更多