阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

利用mod_wsgi部署Django应用

432次阅读
没有评论

共计 5523 个字符,预计需要花费 14 分钟才能阅读完成。

Django 是一个免费、开源、基于 Python 的 Web 开发框架。Django 框架遵循 MVC 架构模式,以快速创建 Web 应用为目标。目前,Django 框架已成为创建 Web 应用的主要选择之一。比如流行的 Instagram 服务、Bitbucket 服务和 Pinterest 服务等都使用了 Django 框架开发。

在开发模式下,Django 自带了一个开发服务器,它仅用于测试目的。一旦完成了 Web 应用的开发,就应该部署到真正的生产服务器上。如果开发者还没部署过真正的 Web 应用,那么可以参考本文。本文提供了利用 mod_wsgi 部署 Django 应用的详细步骤。

一、mod_wsgi

WSGI,即 Web Server Gateway Interface,Web 服务器网关接口,是一个 Web 服务器的 Python 标准,在 PEP 333 标准中定义,并被许多框架实现。Python 是一门传统的编程语言,所以 WSGI 提供了一种让 Web 服务器服务于 Python 应用程序的方式,使得 Python 应用程序可以与 Web 服务器进行交互。
Apache 是最流行​​的 Web 服务器之一,mod_wsgi 是 Apache 的模块之一,可用于把 Python 应用程序托管到 Apache 服务器上。这种方法是部署 Django 应用相对简单的方法。

在 Ubuntu 14.04 版,默认安装中包含了 Python。下面开始利用 mod_wsgi 部署 Django 应用。

二、创建 Django 应用程序

在本节中,我们要安装所需的软件包,并构建一个 Hello World 的 Django 应用程序,并通过 mod_wsgi 模块提供服务。这里假设你已经登录到新创建的虚拟机。

1、创建一个 Ubuntu 虚拟机

创建一个操作系统为 Ubuntu 14.04 x64 的 Linux 虚拟机,物理机也可以。步骤略。

2、安装 Python 包管理器

使用 Ubuntu 的包管理器 apt-get,安装 Python 包管理器。注意,使用前需先对 Ubuntu 的包管理器进行更新。

# sudo apt-get update

Pip 是 Python 语言的包管理器,它可以帮助我们安装、修改、卸载 Python 包。要安装 pip 非常简单,执行命令:

# sudo apt-get install python-pip

apt-get 工具会自带安装 pip 的最新稳定版。但是,如果你想安装指定版本的 pip,可以考虑从源码安装。
参考:https://pip.pypa.io/en/latest/installing.html
还可以使用 easy_install 来替代 pip,它有相似的功能。

3、安装 Django

要从头创建项目,需要先安装 Django 软件包。执行命令:

# sudo pip install Django

要想指定 Django 的安装版本,比如 1.5.5 版,可以这样:

# sudo pip install Django==1.5.5

当然,你仍然可以使用 Ubuntu 的包管理器 apt-get 来安装 Django,但这可能安装的不是最新稳定版的 Django。

4、安装其他依赖

如果要部署一个已有的项目,可以递归运行 pip 来安装项目的依赖。通常,在项目的源码目录存在一个名为 requirements.txt 的配置文件,它包含了运行项目所需的依赖包:

# pip install -r requirements.txt

如果项目还包含了其他的 Python 项目,那么可能会有不同版本的 Python 包会造成彼此干扰。解决办法是使用 virtualenv,它可以让每个 Python 项目在自己的虚拟 Python 环境中运行,彼此间是隔离的。
这里有一个 virtualenv 的教程:https://www.digitalocean.com/community/tutorials/common-python-tools-using-virtualenv-installing-with-pip-and-managing-packages
如果正在开发 Django 应用程序,你可能想创建或更新配置文件,可以执行命令:

# pip freeze > requirements.txt

pip freeze 命令会打印出当前环境中已经安装了的 Python 包,大于符号“>”会把命令的执行结果输出到指定的 requirements.txt 配置文件中。

5、创建 Hello World 应用程序

要创建名为 helloworld 的 Django 应用,运行命令:

# django-admin.py startproject helloworld

要注意,会创建一个名为 helloworld 的新目录。要运行此项目,可以这样:

# cd helloworld/
# django-admin.py startapp helloapp

在浏览器中可以看到 Hello World 的输出。下面,接着在项目中添加 settings.py,找到 INSTALLED_APPS 处,添加以下内容:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'helloapp'
)

接着,在 urls.py 中添加 URL 路由模式,内容如下:

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'helloworld.views.home', name='home'),
    url(r'^', 'helloapp.views.home_view'),
)

它会指示 Django 在 views.py 中寻找 home_view 函数。因此,修改 views.py 的内容如下:

from django.http import HttpResponse

def home_view(request):
    return HttpResponse('Hello World')

下面,我们可以运行开发服务器了:

# python manage.py runserver

在 GitHub 上有本项目的源码:https://github.com/sdaityari/django-hello-world

三、使用 Apache 和 mod_wsgi 模块运行 Django 应用

Django 项目的目录结构后面有说明,下面需要安装并配置 Apache 服务器。

1、安装 Apache2

使用 apt-get 命令完成 Apache2 的安装。

# sudo apt-get install apache2

2、安装 mod_wsgi 模块

仍然可以使用 apt-get 命令安装 mod_wsgi 模块。

# sudo apt-get install libapache2-mod-wsgi

要注意,如果使用的是 Python3,那么命令应该是这样的:

# sudo apt-get install libapache2-mod-wsgi-py3

详细的安装过程可以参考:
https://www.digitalocean.com/community/tutorials/installing-mod_wsgi-on-ubuntu-12-04

3、修改目录结构

要使得 Django 应用程序能通过 mod_wsgi 模块提供服务,我们还需要编写 WSGI 脚本,用此脚本来完成 Apache 服务器和 Django 应用之间的连接。Django 应用的目录结构如下所示:

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
    myapp/
        models.py
        views.py

我们需要做一点修改,让 mysite 目录包含三个文件:

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        apache/
            __init__.py
            override.py
            wsgi.py
    myapp/
        models.py
        views.py

这样的话,逻辑非比较清晰。

注意,如果使用了如 Git 之类的源码控制工具,那么可以把 apache 目录添加到忽略列表。

4、创建 WSGI 脚本

空文件 init.py 会告诉 Python,把此目录当成是包来对待。override.py 会导入所有的设置,并覆盖任何用于生产状态的设置。
比如生产状态的数据库设置和 Debug 设置可能会与开发状态有所不同,要在源码中区别开来,需要这样:

# override.py

from mysite.settings import *

DEBUG = True
ALLOWED_HOSTS = ['www.mydomain.com', 'mydomain.com']

最后,wsgi.py 文件包含了 WSGI 的设置。假定根目录是 /home/myuser/:

#wsgi.py
import os, sys
# Calculate the path based on the location of the WSGI script.
apache_configuration= os.path.dirname(__file__)
project = os.path.dirname(apache_configuration)
workspace = os.path.dirname(project)
sys.path.append(workspace)
sys.path.append(project)

# Add the path to 3rd party django application and to django itself.
sys.path.append('/home/myuser')
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.apache.override'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

还需要为 Apache 服务器的默认用户 www-data 分配根目录的所有权,以便于 Apache 服务器有权限访问此目录:

# sudo chown www-data:www-data apache/

5、配置 Apache

要配置 Apache 使用刚才的 WSGI 脚本,需要编辑配置文件:

# sudo vi /etc/apache2/sites-enabled/000-default.conf

添加以下内容:

<VirtualHost *:80>
    WSGIScriptAlias /mypath/ /home/myuser/mysite/apache/wsgi.py
    <Directory "/home/myuser/mysite/apache/">
      Require all granted
    </Directory>
</VirtualHost>

第一行为 Django Web 目录添加一个 mypath 别名,这样项目就可以通过 URL:http://www.mydomain.com/mypath/ 进行访问。
如果想直接使用域名访问,比如:http://www.mydomain.com/,那么可以直接指向 Django 应用。代码块表示访问指定的目录有所有权限。

如果想自定义 robots.txt 和图标,可以添加下面的内容:

Alias /robots.txt /home/myuser/mysite/robots.txt
Alias /favicon.ico /home/myuser/mysite/favicon.ico

要提供静态文件和媒体文件服务,还需要分别这样配置:

Alias /media/ /home/myuser/mysite/media/
Alias /static/ /home/myuser/mysite/static/

<Directory /path/to/mysite.com/static>
Require all granted
</Directory>

<Directory /path/to/mysite.com/media>
Require all granted
</Directory>

最后,保存配置文件并重启 Apache:

# sudo service apache2 restart

注意 Apache 的版本:对于 Apache 2.4 之前的版本,上面的配置略有不同。

Django1.8 返回 json 字符串和接收 post 的 json 字符串内容  http://www.linuxidc.com/Linux/2015-07/120226.htm

如何使用 Docker 组件开发 Django 项目?http://www.linuxidc.com/Linux/2015-07/119961.htm

Ubuntu Server 12.04 安装 Nginx+uWSGI+Django 环境 http://www.linuxidc.com/Linux/2012-05/60639.htm 

Django+Nginx+uWSGI 部署 http://www.linuxidc.com/Linux/2013-02/79862.htm 

Django 实战教程 http://www.linuxidc.com/Linux/2013-09/90277.htm 

Django Python MySQL Linux 开发环境搭建 http://www.linuxidc.com/Linux/2013-09/90638.htm 

Django 的详细介绍:请点这里
Django 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-09/123345.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计5523字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7993158
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
2025年11月28日-Cloudflare史诗级事故:一次配置失误,引爆全球宕机

2025年11月28日-Cloudflare史诗级事故:一次配置失误,引爆全球宕机

2025 年 11 月 28 日 -Cloudflare 史诗级事故: 一次配置失误,引爆全球宕机 前言 继今...
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
在Windows系统中通过VMware安装苹果macOS15

在Windows系统中通过VMware安装苹果macOS15

在 Windows 系统中通过 VMware 安装苹果 macOS15 许多开发者和爱好者希望在 Window...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...