在Ubuntu12.04上使用mod wsgi服务应用程序
状态: 已弃用
本文介绍了不再受支持的 Ubuntu 版本。 如果您当前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议您升级或迁移到受支持的 Ubuntu 版本:
原因: Ubuntu 12.04 已于 2017 年 4 月 28 日终止生命周期 (EOL) and no longer receives security patches or updates. This guide is no longer maintained.
请参阅:
本指南可能仍可用作参考,但可能不适用于其他 Ubuntu 版本。 如果可用,我们强烈建议使用为您正在使用的 Ubuntu 版本编写的指南。 您可以使用页面顶部的搜索功能来查找更新的版本。
先决条件
在开始阅读本文之前,请确保您已阅读本系列的前 2 篇。 你可以在这里找到它们:
创建 Django 应用程序:
首先,我们将导航到主目录。 创建一个新目录并切换到它:
mkdir -p ~/public_html/domain1.com cd ~/public_html/domain1.com
之后,继续在 django-admin.py 工具的帮助下创建一个项目。
django-admin.py startproject MyTestProject
创建虚拟主机和 WSGI 文件:
为了正确地为 Django 应用程序提供服务,Apache 知道它应该将某些类型的请求转发到 mod_wsgi 是很重要的。 创建告诉 mod_wsgi 如何处理这些请求的 wsgi 文件也很重要。 我们将设置一个虚拟主机来完成这些任务。 它将告诉 Apache wsgi 文件的位置并相应地设置文件。
打开新的虚拟主机文件。
sudo nano /etc/apache2/sites-available/domain1.com
接下来,为虚拟主机输入以下定义:
<VirtualHost *:80> ServerName domain1.com ServerAlias www.domain1.com WSGIScriptAlias / /home/username/public_html/domain1.com/MyTestProject.wsgi </VirtualHost>
一旦我们指示 apache 使用上面指定的 wsgi 文件并将接收请求传递给 mod_wsgi,我们将自己创建 mod_wsgi 文件。
nano ~/public_html/domain1.com/MyTestProject.wsgi
键入以下配置:
import os import sys sys.path.append('~/public_html/domain1.com/') os.environ['DJANGO_SETTINGS_MODULE'] = 'MyTestProject.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()
此定义确保将导入必要的模块。 此外,它将 Django 项目的路径附加到 Python 的路径中,并设置了许多有助于 mod_wsgi 工作的变量。 完成后,您需要启用虚拟主机并重新启动 Apache。
sudo a2ensite domain1.com sudo /etc/init.d/apache2 reload
如果一切按预期进行,您将能够在浏览器中看到您的域(Droplet IP),并获得新创建的应用程序。 如果您收到任何 NameVirtualHost 或端口错误,请重新加载 Apache。
静态内容
虚拟主机定义有一个警告。 不支持静态内容。 要正确提供静态内容,您可以更新文件 MyTestProject/settings.py 中的一些设置并使用以下虚拟主机定义。
<VirtualHost *:80> ServerName domain1.com ServerAlias www.domain1.com WSGIScriptAlias / /home/username/public_html/domain1.com/MyTestProject.wsgi Alias /static/ /home/username/public_html/domain1.com/static/ <Location "/static/"> Options -Indexes </Location> </VirtualHost>
Alias Directive 让 Apache 知道它不应该允许 Django 或 mod_wsgi 处理位于您域的 /static/ 目录下的任何内容。 您可以使用任何目录,但请确保它在 /home/username/public_html/domain1.com/ 下可用。 在我们的示例中,目录的名称是静态的。 通过设置 MEDIA_ROOT 和 MEDIA_URL 的变量来更新 settings.py。
nano /home/username/public_html/domain1.com/MyMyTestProject/settings.py
查找并更新以下设置。
MEDIA_ROOT = '/home/username/public_html/domain1.com/static/' MEDIA_URL = '/static/'
最后,重新启动 Apache 以使更改生效。
sudo /etc/init.d/apache2 reload
您可以通过 http://www.domain1.com/static/path/to/file 访问已放置在 MEDIA_ROOT 中的任何项目。
对 Django 应用程序的更改
养成每次对项目进行更改时重新启动 apache 的习惯是个好主意。