Django学习(9)在Windows中部署(IIS和Apache)

Windews 7 + Apache + wsgi

基本思路是,wsgi和django依赖python,安装wsgi就是将wsgi安装为python的本地包插件,安装完成时会显示python和wsgi的位置信息,将这些信息以及django项目位置信息写入解压好的apache的配置文件中,运行apache的httpd文件即可按照配置文件去启动wsgi、开启django网站入口。
apache本身不需要“安装”到注册表,

安装并测试Apache

安装

实际上是下载Apache公司的一个httpd程序。Apache官网不提供安装程序,只提供源代码,安装包可去合作伙伴的网站下载:

二者都可以,但需要根据对应的VS或VC版本来选择Apache版本,提前检查一下电脑上有没有VC或VS组件,有哪个版本。


image.png
image.png

配置

压缩包下载完成后,解压到你期望的程序目录(D盘目录是此程序默认认为的)。不需要安装过程,解压完成这就是程序运行目录了。不过在 apache httpd 运行的时候程序还是需要知道自己的绝对路径的,所以需要我们在配置文件中自定义一下程序目录绝对路径。找到并打开D:\Apache24\conf\httpd.conf文件,找到Define SRVROOT这一行:

Define SRVROOT "D:/Apache24"

这里写的目录就是默认用户会解压到D盘目录, 但移动到别处也可以,如果你的apache不在此位置,就更改此处。

两种运行方式

httpd.exe

查看apache版本信息:Apache24\bin路径下运行httpd.exe -V (注意,是大写V),
cmd运行, 或者双击运行apache24\bin中的httpd.exe,服务器程序就会运行在黑框中,如果有could not reliably ...的提示,不用解决,打开浏览器输入本机地址直接访问,如果正常出现网页就是成功了。==注意==:关闭网站时尽量不要直接关闭命令行窗口, 而要在命令行窗口使用快捷键Ctrl+C停止程序运行, Ctrl+C后延迟10秒才有反应, 不要着急.

安装到系统服务项

加入服务前须做两个准备:

  1. 先修改Apache24\conf\httpd.conf文件内的本机域名, 在文件中搜索ServerName,后面改为域名:端口号, 如果没有域名, 就写IP:端口号.
  2. 检查确保系统环境变量中有"PYTHONHOME",路径指向Python安装目录,就是有python.exe的那个位置("PYTHONPATH"是不需要的)。如果不加这条环境变量,会报错Fatal Python error: initfsencoding: unable to load the file system codec

准备好之后,在apache24\bin的命令行中输入:

httpd.exe -k install -n "apache24"

其中"apache24"是自定义的名称, 如果不加-n, 名称就默认设为Apache2.4。完成后,在系统服务项页面就能看到并控制这条服务项了,也可以用apache24\bin中的 ApacheMonitor.exe 图形界面去控制。

下载mod_wsgi

是apache的插件,用于协助Python后端程序在Apache上运行
Python Extension Packages for Windows - Christoph Gohlke (uci.edu)

image.png

选择一个匹配apache版本、VC版本、python版本、Windows版本的mod_wsgi,没写ap24的默认就是ap24版本。
可以下载到默认下载位置,到python脚本目录不是必须的。在下载的whl文件的文件夹中,打开命令行,使用pip安装mod_wsgi:

pip install "mod_wsgi-x.x.xx-cpxxx-win_amd64.whl"

引号内改为实际的文件名.
如果pip命令无效, 尝试在前面加python -m.
如果一切正常, 将会在python的Lib目录安装wsgi模块, 并在Scripts目录生成一个mod_wsgi-express.exe程序, 所以我们可以在命令行执行:

mod_wsgi-express  module-config

这行命令是给mod_wsgi做一下配置, 完成后会出现三行配置信息, 分别是LoadFile LoadModule WSGIPythonHome, 我们要将其填写到Apache24\conf\httpd.conf中.

编辑配置文件

打开Apache24\conf\httpd.conf. 勿忘记最开始配置的httpd程序目录: Define SRVROOT "D:/Apache24"

wsgi和Django项目的相关配置

将下面的代码修改为适合自己项目的, 然后复制到开头, (后面可能常打开看看, 放开头比较方便)

# 1.安装wsgi模块后,出来的三行字符,直接复制过来
LoadFile "c:/users/administrator/appdata/local/programs/python/python37/python37.dll"
LoadModule wsgi_module "c:/users/administrator/appdata/local/programs/python/python37/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"
WSGIPythonHome "c:/users/administrator/appdata/local/programs/python/python37"
# 2.设置工程中的wsgi路径
WSGIScriptAlias / D:\website\website\wsgi.py
# 3.设置工程路径
WSGIPythonPath D:\website
# 4.再设置工程中的wsgi路径
<Directory D:\website\website>
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>
# 5.设置静态和媒体文件路径
Alias /media D:\website\website\media
<Directory D:\website\website\media>  
    AllowOverride None  
    Options None  
    Require all granted  
</Directory> 
Alias /static D:\website\website\website\static
<Directory D:\website\website\website\static>  
    AllowOverride None  
    Options None  
    Require all granted  
</Directory> 

django-admin页面的静态文件是不能直接访问, 需要收集到一起.
第一步: 修改应用的settings.py:

 STATIC_URL = '/static/' #下方新增如下内容:
 STATIC_ROOT = os.path.join(BASE_DIR, 'static')

第二步: 运行命令,收集静态文件到指定的static目录

python manage.py collectstatic

配置完以上内容应当就可以运行服务端, 访问网站了. 如果访问网站出现问题, 再看下面的设置内容

IP和端口设置

检查并设置一下主机IP和端口号:

  1. 找到Listen, 可写IP:端口, 也可只写端口:
#Listen 12.34.56.78:80
Listen 80
  1. 不设ServerName也能运行, 但总报警告. 找到ServerName, 应当写DNS的那个域名带端口号, 如果没有域名, 就写IP和端口号:
ServerName 192.168.31.161:80
  1. 去掉#注释,打开访问日志
 CustomLog "logs/access.log" common
  1. 若出现You don't have permission to access / on this server., 就修改访问权限:
    找到如下配置
<Directory />
    AllowOverride none
    Require all denied
</Directory>

中间部分修改为

     AllowOverride ALL
     Require all granted

Windows Server + IIS + wfastcgi

啊,图形界面真香!
参考:cnblog-飘逸的小乐

安装Python和Django

Python没有的话去官网下载,可以安装在C盘根目录,记住一定要安装在非用户目录,不然后期会有难以解决的权限问题。新版本Python一般自带pip,在cmd或PowerShell输入python -m pip -version查看是否有pip,如果显示了pip版本号的话,python安装目录下的Scripts文件夹中的cmd中输入

python -m pip install django

即可安装django。如果报错权限问题,则用管理员权限打开cmd。

运行测试

对已存在的项目,要确保项目路径不在用户目录内,会有权限问题,可以在C目录下也可以在C:\inetpub\wwwroot。在项目根目录执行命令python manage.py runserver(0:80不要用了,Windows下不太支持) ,尝试启动服务,可能会出现类似下面的报错:

import requests  ModuleNotFoundError: No module named ‘requests’

原因:没有导入requests库。原文链接:CSDN博主「stone_tomcat」
解决办法:
进入到python安装目录下的Scripts文件夹中,然后在cmd输入python -m pip install requests,就好了。如果缺少其他module,同理。

安装wfastcgi

类似上面,在Scripts文件夹中在cmd输入

python -m pip install wfastcgi

wfastcgi是cgi的一种,类似于wsgi,作为服务器和Django的中间件,很重要。

开始IIS部署

复制wfastcgi.py

去python下site-package目录


image.png

把“wfastcgi.py”这个文件复制到网站根目录


image.png

如果只是调用“site-package”目录下的同一个“wfastcgi.py”文件,如果你要部署多个网站的话,将无法对不同网站创建不同的FastCGI执行环境。

在IIS里添加网站

image.png

物理路径就是有wfastcgi.py的目录。

添加程序映射

在新建的网站的控制台内点开“处理程序映射”。


image.png

右面点击“添加模块映射”,具体内容如下


image.png

可执行文件一栏输入“python解释器”的目录位置和我们的“wfastcgi.py”的位置,注意中间使用“|”符号隔开,名称随意填写。
填完后点开请求限制,把“仅当请求映射至以下内容时才调用处理程序”去掉
image.png

确认添加后会弹出创建FastCGI应用程序对话框,点击确认创建。注意,这里每多创建一个FastCGI应用程序,同时运行的Django网站就可以多一个。如果你添加了多个网站但不需要同时运行多个网站,只创建一个应用程序就够了。应用程序池可以管理创建的应用程序,网站的基本设置可以变更应用程序。


image.png

配置Django执行的环境变量

在服务器控制台,进入“FastCGI设置”


image.png

可以看到刚刚添加的映射


image.png

双击打开,添加Django执行时候的环境变量
image.png

这里环境变量一共要添加三个:
WSGI_HANDLER 为固定的 django.core.handlers.wsgi.WSGIHandler()
PYTHONPATH 为 网站根目录
DJANGO_SETTINGS_MODULE 为 django settings文件位置


image.png

添加完成后去应用程序池回收一下FastCGI应用程序就好了
image.png

静态文件的处理

在IIS内找到“static”文件夹的页面,打开处理程序映射

image.png

可以看到这里的列表跟网站是一致的
image.png

将为网站创建的FastCGI映射删除掉,static文件夹就可以直接访问了,右侧的“恢复为父项”可以恢复对此目录的修改
image.png

这样可以测试一下网站是否正常。Django后台管理页面可能出现静态文件丢失,那么需要使用python manage.py collectstatic,详见Django学习(7)上传文件和文件储存的最后部分。

搞定。虽然步骤比较多,但是比较之下,图形界面已经方便太多了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351