这应该是全网最详细的IIS部署Django项目流程了

本文从0开始介绍IIS上部署Django项目的整体流程,以及可能会遇到的一些坑等等

安装IIS

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

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

  • 首先将虚拟内存调整到2048M或以上
  • 运行 services.mscRemote 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)直接创建环境

  1. 使用命令python.exe -m venv 虚拟环境名称 虚拟环境路径创建虚拟环境。
  2. 之后进入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:*删调即可。

### 故障分析解决方案 #### 1. **故障描述** `vim.fault.GenericVmConfigFault` 是一种通用配置错误,在 VMware 的 vSphere 或 Workstation 环境中可能会触发此异常。通常情况下,这种错误表明虚拟机的某些配置存在问题或者不被支持。 此类错误可能发生在多个场景下,例如尝试迁移虚拟机、修改虚拟硬件设置或应用特定策略时[^1]。 --- #### 2. **常见原因** 以下是可能导致 `vim.fault.GenericVmConfigFault` 错误的原因: - 虚拟机配置文件损坏或丢失。 - 使用了不受目标主机支持的功能或设备(如高级网络适配器或存储控制器)。 - 版本兼容性问题:源主机目标主机之间的 VMware 工具版本不同步[^5]。 - 配置冲突:例如 CPU 数量超出许可范围或内存分配不合理。 - 存储路径不可访问或权限不足。 --- #### 3. **排查步骤** 为了有效解决问题,可以按照以下方式逐步排查并修复: ##### (a) 检查虚拟机配置文件 确认 `.vmx` 文件是否存在语法错误或其他损坏情况。可以通过重新导出虚拟机配置来验证其一致性。 ##### (b) 验证功能兼容性 如果正在执行跨主机操作(如 vMotion),需确保源主机目标主机具有相同的硬件辅助功能集支持级别。例如,检查是否启用了 EVC(Enhanced vMotion Compatibility Mode)模式。 ##### (c) 更新 VMware Tools 固件 保持所有组件处于最新状态有助于减少因过时软件引发的问题。对于 VMware Workstation 用户而言,升级到推荐版本(如 15 或 16)可能是必要的措施之一。 ##### (d) 审核日志记录 利用 `/var/log/vmkernel.log` 及其他相关日志文件定位具体失败位置及其上下文信息。这些数据能够提供更详细的线索用于进一步诊断[^3]。 --- #### 4. **解决方法** 针对上述提到的各种可能性,这里给出一些针对性建议: - 若发现 .vmx 文件有问题,则手动编辑修正;必要时重建受影响实例。 - 当存在资源争用现象时调整相应参数直至满足需求为止。 - 对于涉及安全连接的部分(比如 SSL/TLS 加密通信),生成新的证书链以替换旧有失效项[^4]。 下面展示了一个简单的 Python 脚本来帮助自动化部分任务处理过程: ```python import subprocess def generate_certificate(fqdn): command = [ "/usr/lib/vmware-vmca/bin/certool", "--server={}".format(fqdn), "--genCIScert", "--dataencipherment", "--privkey=/etc/vmware-vpx/ssl/data-encipherment.key", "--cert=/etc/vmware-vpx/ssl/data-encipherment.crt", "--Name=data-encipherment", "--FQDN={}".format(fqdn) ] try: result = subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) print("Certificate generated successfully.") print(result.stdout.decode()) except Exception as e: print("Failed to generate certificate:", str(e)) print(result.stderr.decode()) if __name__ == "__main__": fqdn_input = input("Enter FQDN of the server:") generate_certificate(fqdn_input.strip()) ``` --- ### 总结 通过对 `vim.fault.GenericVmConfigFault` 进行深入剖析可知,它往往是由多种因素共同作用造成的复杂状况。因此采取综合手段逐一排除潜在隐患显得尤为重要。同时也要注意定期维护整个 IT 基础设施从而预防类似事件再次发生。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值