这一篇教程,我们一起来了解如何将Django2的Web项目部署到基于IIS的Web服务器。
很多学习Python的用户,都是在使用Windows系统,当使用Django完成一个Web项目,想在本机进行测试,又不想额外安装Web服务器的话,可以考虑使用Windows自带的IIS进行部署。
IIS(Internet Information Services:互联网信息服务)是Web服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面。
如果想使用IIS部署Django项目,需要先在Window系统中添加IIS功能并开启CGI应用程序支持,大家可以参考之前发布的教程《练习项目11:在线编辑文件(上)》中的第一部分内容,进行添加与设置。
提示:教程中是以Windows7系统下的IIS7.5为例,不同版本的Windows或IIS的添加与设置都比较相近。
但是,仅有这些是不行的。
因为IIS支持FastCGI,不支持WSGI,而Django2全面使用WSGI,不再使用FastCGI。
MMP,这是有多大仇?
所以,要想让两个仇家能合作,需要有个中间人。
这个中间人是Python的第三方库wfastcgi。
了解了以上内容,我们就可以开始部署工作了。
提示:本篇教程以Window7为例。
一、安装启用wfastcgi
在系统目录中找到CMD命令行终端,路径为:C:\Windows\system32\cmd.exe
也可以在桌面左下角,点击开始按钮,在【搜索程序和文件】的输入框中输入CMD进行查找。
但是,不要急于打开,在程序图标上点击鼠标右键选择【以管理员身份运行】;否则,启用wfastcgi会失败。
执行命令:
pip install wfastcgi
wfastcgi-enable
启用成功后会显示:
已经在配置提交路径“MACHINE/WEBROOT/APPHOST”向“MACHINE/WEBROOT/APPHOST”的“sy
stem.webServer/fastCgi”节应用了配置更改”C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe|C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\wfastcgi-3.0.0-py3.6.egg\wfastcgi.py” can now be used as a FastCGI script processor
注意上面的标红的路径,是由Python解释器的路径和“|”以及“wfastcgi.py”文件路径组成,后面会用得到。
如果需要部署多个项目,大家可以把“wfastcgi.py”文件从上面的路径中复制到Django项目的根目录下。
另外,如果想卸载wfastcgi,需要先禁用再卸载。
禁用命令:wfastcgi-disable
卸载命令:pip uninstall wfastcgi
二、创建网站
打开Internet信息服务(IIS)管理器,【控制面板】-【管理工具】-【Internet信息服务(IIS)管理器】。
在窗口左侧的【网站】图标上点击鼠标右键,选择【添加网站】。
站点名称可以和项目名称保持一致,然后物理路径选择项目目录,绑定设置使用默认设置,主机名留空。
三、添加处理程序映射
点中我们新建的网站。
注意:不要点中左侧列表的根目录,根目录中的处理程序映射是对所有网站有效的。
窗口中部找到【处理程序映射】,双击打开之后,在窗口右侧找到【添加模块映射】,点击打开后依次进行设置:
- 请求路径:*
- 模块:FastCgiModule
- 可执行文件:Python解释器的路径|wfastcgi.py文件路径
- 名称:MyFastCGI(自定义名称)
提示:可执行文件填写的内容就是之前标红的路径,如果将wfastcgi.py文件复制到了项目目录中的话,可以使用项目中的文件路径。
例如:C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe|D:\MyWeb\wfastcgi.py
另外,还要点击上图中的【请求限制】按钮,打开的窗口中取消【仅当请求映射至以下内容时才调用处理程序】的勾选。
提示:IIS7.5默认是不够选的,但是有些IIS版本会默认勾选,导致网站无法正常访问,例如:IIS10。
做完以上设置,点击【确定】,此时会弹出创建FastCGI应用程序的提示,点击【是】,完成创建。
四、添加应用程序
Internet信息服务(IIS)管理器左侧点中根目录,窗口中部找到【FastCGI设置】,双击进入。在打开的窗口中,双击我们创建的记录打开【编辑FastCGI应用程序】的窗口。
FastCGI属性列表中,找到【环境变量】,点击后方的【…】按钮进入【EnvironmentVariables集合编辑器】,左侧成员列表下方点击添加按钮,添加3个变量。
第1个变量是WSGI_HANDLER,以及它的实例。
在Django项目的“wsgi.py”文件中有一句代码:from django.core.wsgi import get_wsgi_application
导入的方法“get_wsgi_application”,它的返回值就是一个WSGIHandler()。
Name: WSGI_HANDLER
Value: django.core.wsgi.get_wsgi_application()
第2个变量是项目目录,Python代码文件的所在路径。
Name: PYTHONPATH
Value: D:\MyWeb
第3个变量是项目中“settings.py”文件的路径。
Name: DJANGO_SETTINGS_MODULE
Value: MyWeb.settings
点击确定按钮,保存退出。
网上的很多教程到这里就会说:当我们完成以上步骤,重新启动网站,就能够访问了。
事实上还不行,继续完成下面的设置。
五、修改项目的设置文件
打开项目中的“settings.py”文件,找到“ALLOWED_HOSTS ”,进行修改。
示例代码:
ALLOWED_HOSTS = ['*'] # *表示不限制,也可以在列表中添加站点绑定的域名
如果之前已经做过这项设置,此步骤可以略过。
六、添加目录权限
需要增加权限的目录包括Python安装目录和项目目录,缺一不可。
修改内容是将这些目录都添加指定用户组的控制权限。
这里,我们给指定用户组都赋予“完全控制”的权限,参考《练习项目11:在线编辑文件(上)》中第二部分~第6点的内容。
提示:如果还不能访问,尝试将“IIS_IUSRS”用户组的权限也添加上。
到这里,就可以通过本机、局域网或者外网进行访问了。
打开浏览器,输入访问地址:
- 本机:127.0.0.1或者localhost
- 局域网:192.168.X.X
- 外网:本机所在网络的外网IP地址
提示:如果本机通过路由器联网,需要路由器上做端口映射(转发),也可以通过启用DMZ来实现外网的访问。
问:如果局域网内可以访问,外网仍然无法访问,怎么办?
答:首先,找宽带服务商将IP地址转为公网IP,作者是电信宽带,打完热线要求更改后不到24小时就可以访问了。
问:如果转成公网IP依旧无法访问本机服务器,怎么办?
答:可能存在很多原因,有可能是防火墙问题,也有可能是IIS问题等等,需要进行排查才能确定。Django项目在IIS上部署,本来就是以测试为目的,我建议不要耗费太多精力在这个问题上,除非是真正在生产环境下需要如此进行部署。
最后,对于项目中的静态文件我们还需要进行相应的设置。
七、处理静态文件
1、打开项目中的“settings.py”文件,找到“STATIC_URL”,进行修改。
示例代码:
STATIC_URL = 'static/' # 注意只有后面有“/”,否则会目录不正确。
2、打开项目中的“urls.py”文件,增加代码。
示例代码:
from django.conf import settings from django.conf.urls.static import static urlpatterns = [ ...省略URL分发配置... ] + static(settings.STATIC_URL, document_root=settings.STATIC_URL)
3、在项目文件夹中添加静态文件的文件夹。例如:static
4、Internet信息服务(IIS)管理器点中我们创建的网站,点击鼠标右键,选择添加虚拟目录,填写别名(例如:static),然后将这个虚拟目录指向静态文件目录的物理路径,点击确定保存。
到这里,我们就完成了Django2项目在IIS上的部署。
转载请注明:魔力Python » Django2:Web项目开发入门笔记(15)