编程学习网 > 编程语言 > Python > django框架部署iis详细解析
2022
09-30

django框架部署iis详细解析

安装IIS

1.首先打开服务器管理器,点击添加角色和功能。勾选Web服务器(IIS),并IIS下所有功能全部勾选,之后进行安装。安装可能会遇到以下问题:

(1)由角色权限所导致安装失败。

首先将虚拟内存调整到2048M或以上
运行 services.msc 将 Remote Registry打开
重启服务器
(2)由功能缺失导致安装失败

下载对应的sxs文件windows_server_2012 sxs.手动指定该路径进行安装

配置Django
1.首先在IIS上创建网站。输入网站名称,物理路径和指定端口号。安装Python解释器。

2.配置虚拟环境,这里提供两种方法:
(1)使用 workon(需要将一个Python解释器设置到环境变量)

安装workonpip install virtualenvwrapper (若没有设置镜像,下载慢可使用豆瓣源 -i https://pypi.douban.com/simple/)
使用命令mkvirtualenv 虚拟环境名称 创建虚拟环境
使用命令 workon 虚拟环境名称 激活虚拟环境
(2)直接创建环境

使用命令python.exe -m venv 虚拟环境名称 虚拟环境路径创建虚拟环境。
之后进入Python安装路径的Scripts文件夹下使用命令 active激活虚拟环境
3.安装wfasttcgi (需要已经激活现有的虚拟环境)

安装 pip install wfastcgi
使用命令 wfastcgi-enable 初始化 FastCGI。
在IIS主页的FastCGI中会自动生成FastCGI的指向,
编辑改设置,添加三个环境变量的属性
Name: WSGI_HANDLER , Value:django.core.wsgi.get_wsgi_application() ,
Name: PYTHONPATH , Value:项目根目录 ,
Name: DJANGO_SETTINGS_MODULE , Value:项目根目录路径下的settings路径 ,
4.在项目根目录下放入web.config文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <handlers>
                <add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor="虚拟环境下Python解释器路径|C:\Users\Administrator\Envs\虚拟环境名称\lib\site-packages\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
            </handlers>
        <httpProtocol>
            <customHeaders>
                <remove name="Access-Control-Allow-Origin" />
            </customHeaders>
        </httpProtocol>
        </system.webServer>
        <appSettings>
            <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()" />
            <add key="PYTHONPATH" value="E:\项目\" />
            <add key="DJANGO_SETTINGS_MODULE" value="项目.settings" />
        </appSettings>
    </configuration>

5.点击所建立的网站,找到功能处理映射程序,看是否有Python FastCGI这个模块映射。

(1)若没有,点击添加模块映射,配置如下:

请求路径:*

模块:FastCgiModule

可执行文件:虚拟环境下Python解释器路径|C:\Users\Administrator\Envs\虚拟环境名称\lib\site-packages\wfastcgi.py

名称:Python FastCGI

之后点击请求限制,把映射的勾去掉,将谓词设置为全部

(2)若有,确认配置和上方一样。

6.项目主目录点击编辑权限,编辑组或用户名,点添加按钮,输入e之后点击检查名称,添加Everyone到用户中,并勾选完全控制。

7.启动项目

可能遇到的问题
1.配置错误: 不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定是默认设置的 (overrideModeDefault=”Deny”),或者是通过包含 overrideMode=”Deny” 或旧有的 allowOverride=”false” 的位置标记明确设置的。出现这个错误是因为 IIS 7 采用了更安全的 web.config 管理机制,默认情况下会锁住配置项不允许更改。
(1) 因为 IIS 7 采用了更安全的 web.config 管理机制,默认情况下会锁住配置项不允许更改。运行命令行

C:\windows\system32\inetsrv\appcmd unlock config -section:system.webServer/handlers

其中的 handlers 是错误信息中红字显示的节点名称。如果modules也被锁定,可以运行

C:\windows\system32\inetsrv\appcmd unlock config -section:system.webServer/modules

注意:cmd.exe要以管理员身份启动,在c:\windows\system32下找到cmd.exe,右键管理员启动,输入上面的命令即可。

(2) 若上方无法解决问题,可以检查IIS的功能是否全部勾选,若未勾选完,则按照上边安装IIS的步骤勾选完再安装即可。

2. FastCGI 进程意外退出
这个问题很复杂,我把处理步骤进行一个划分,出现这个问题,按照我提供的顺序往下走。

(1)首先确保自己的项目可以正常启动。cmd虚拟环境下进入项目根目录使用命令python manage.py runserver 确保程序可以正常启动。

(2)在IIS的应用程序池中找到当前项目所使用的应用程序池。右键选择高级设置,找到进程模型 -> 标识,将标识设置为 内置账户LocalSystem。之后重启网站,看是否解决。

(3)若上方配置已完成还无法解决,确定自己的Python版本不是python3.7。python的整个3.7版本就是一个BUG版本,可以看我之前博文有说过,python3.7的坑特别多,包括这个FastCGI意外退出的问题,都是这个版本导致,建议Python版本升为python3.8.5,点此下载。很多人说pytho3.6的兼容性是最好的,其实在我个人的使用以及体验上来看,python3.8是要优于3.6的。

(4)若python版本升级为3.8之后都无法解决问题,请在虚拟环境下使用命令wfastcgi-enable确保fastcgi没有问题。之后检查web.config的路径是否有填写正确。

3.Django项目需要用到Celery
Celery在Windows上的坑,多到其实根本数不过来。我这里给出以下几个问题解决的思路(仅是个人的思路)。

(1)Celery在Windows上确实很难去处理,本身兼容性就不是很好,在服务器上部署就更难,所以这里的第一个方案是将Celery和项目分离开进行部署,找打一台Linux服务器或者直接使用云服务器装好celery和flower以及supervistor。只需要在IIS上的项目可以将异步任务放进Redis就OK了。

(2)若果真的只有一台服务器,只能在Windows上部署,那么就只能使用cmd命令挂起一个窗口了。但是这样是很不安全的,这里推荐使用vbs和bat脚本结合的办法,用bat脚本启动celery和flower之后,使用vbs脚本隐藏掉窗口即可。

4.CORS跨域问题
这个问题其实算是比较常见的一个,首先跨域你得清楚,请求跨域说明你的请求已经成功的到达了服务端,服务端已经返回了当前请求的响应。其次得清楚一下两点:

(1)服务端的提示信息(按F12 控制台的打印信息),信息内容提示你没有设置Access-Control-Allow-Origin的时候。你需要在IIS当前网站的HTTP响应头中设置Access-Control-Allow-Origin:*

(2)服务端的提示信息内容找那个提示,你的Access-Control-Allow-Origin一共返回了两个,这个的意思是你在项目中已经设置过了跨域(b比如安装了django-cors-headers且在settings中设置了允许跨域),并且也在IIS的HTTP响应头中设置了Access-Control-Allow-Origin:*。出现了重复设置的情况,你只需要将IIS的HTTP响应头中Access-Control-Allow-Origin:*删调即可。
以上就是“django框架部署iis详细解析”的详细内容,想要了解更多Python教程欢迎持续关注编程学习网

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取