在windows 2008 server 的IIS 7上运行 django 1.11 + python 3.6

来源:互联网 发布:js防水卷材厚度 编辑:程序博客网 时间:2024/06/09 06:40

缘起

使用django开发了一个项目,客户的技术体系是全栈window的,所以要求我们提供把项目部署到windows服务器的服务。

写这个原因是旧的在 windows 上运行python网站程序的文档,基本上全过时了。

从macOS登陆windows服务器

嗯,需要安装 Microsoft Remote Desktop,版本是 8.0.x。需要注意的是微软官网的下载链接是直接链接到app store,而该App在中国区不上架,所以下载不了。最后解决问题是同事在网上找到了个下载版。

登陆的时候,还有一个要注意的就是在配置的session那里勾选Connect to admin session。也许只是用Administrator账号登陆的话才需要,我没试其它账号。

注:MS Office 2011 for Mac 自带的那个RDC不行了,版本2.1.x的,一登陆就证书不对之类的,是登陆不上去的。

安装 Python

这个很容易,直接在python官网下载就行,我下载的是64位的版本,因为是64位的机器,需要往下拉一下页面才能找到,直接点Download按钮下载的是32位的。

安装的时候,有两个地方要特别注意,一是要勾选Add to PATH,二是一定要把它安装到没有空格的路径下,比如c:\python36,不要使用默认的c:\Program files\python36,你在后面会被折腾死,我不会告诉你我浪费了一天的时间,最后重装python解决的。

安装 wfastcgi

windows上跑django或其它python网站程序,用IIS是最正确的,使用 apache/nginx会更加难管理。但是IIS不支持wsgi,而django自1.7起就弃用了fastcgi,在1.9的时候更是删除了,所以我们编写的网站程序无法直接跑在IIS上,因为我们用的是1.11版本,太新了。

wfastcgi是当前唯一、唯一、唯一可用可靠的把wsgi桥接到fastcgi的方案,之前花好几天看到的,基本上都过时了,那些基本django1.2/1.4版本写的文章,丢掉吧,别看了,完全没有用处。github上有个django-windows-tools的项目,也过时了,七八年前的了,别看了;也有一篇相关的文章,Installing Django on IIS: A Step-by-Step Tutorial流毒甚广,别看了。那些带有PyISAPIeisapie-wsgi字样的,统统都不靠谱,见到就闪吧。

wfastcgi感觉生命力会长久一些,因为它其实出自微软自身,根正苗红,也有Azure云计算的需要。开发它的团队是Python Tools for Visual Studio的那帮人,实力强劲。

安装好python以后,开个Power Shell新窗口,运行pip install wfastcgi就可以安装成功了。然后再运行一下wfastcgi-enable命令启用它即可,成功运行后,会输出一个目录,告诉你可以把它加到配置文件(稍后讲)。

安装 git

当然了,首先要把项目的代码 clone 到本地。需要安装git,具体用法就不说了。不过安装的时候,有一个很重要的点,就是问你要使用哪个加密库。默认是使用 OpenSSL,我是原生党,所以改选了使用有windows native字样的那个,结果后来使用 git 的时候,验证账号密码一直出错,坑死爹爹了。切记这里不要乱选了。

在这里说一下题外话,安装git的时候,可以把跟Cygwin相关的选项取消掉,使用GOW即可,非常好用,基本上常用的命令都有了,安装GOW之后,在Power Shell中用起来感觉跟在macOS的终端下的体验有得一拼。官网:https://github.com/bmatzelle/gow ,支持的命令列表:https://github.com/bmatzelle/gow/wiki/executables_list 。嗯,32个赞。

代码一定要用 manager.py runserver本地跑一下啦,只要依赖的包装好了,一般而言是没有问题的。然后可以进入下一步。

配置 web.config

IIS中新建一个网站,把域名分配过去就好。然后在manager.py的同级目录新建一个文本文件web.config,里面的内容有个模板可以套:

<?xml version="1.0" encoding="UTF-8"?>    <configuration>        <system.webServer>            <handlers>                <add name="Python FastCGI"                      path="*"                      verb="*"                      modules="FastCgiModule"                      scriptProcessor="<Path to Python>\python.exe|<Path to Python>\lib\site-packages\wfastcgi.py"                      resourceType="Unspecified"                      requireAccess="Script"/>            </handlers>        </system.webServer>        <appSettings>            <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()" />            <add key="PYTHONPATH" value="<Path to Django App>" />            <add key="DJANGO_SETTINGS_MODULE" value="<Django App>.settings" />        </appSettings>    </configuration>

scriptProcessor的值,要改为前文说过的运行wfastcgi输出的那个值。PYTHONPATH的value要改为manager.py的那个目录,也就是你项目的根目录。DJANGO_SETTINGS_MODULE的value中的<Django App>要改为你的项目名。

然后重启一下你的网站,域名没有错的话,应该就可以访问了。

嗯,就是这么简单,这么霸道。但我不会告诉你我找资料的那240个小时的。

如果你看到页面没有css样式了,应该是找不到静态文件,执行一下manager.py collectstatic应该就好了。

另外,为了让静态文件的处理不经过Python这一层,建议往staticmedia目录下各放一个web.config文件,内容都是:

<?xml version="1.0" encoding="UTF-8"?><configuration>  <system.webServer>    <handlers>      <remove name="Python FastCGI" />    </handlers>  </system.webServer></configuration>

记得如果你改过最前面的web.config文件中的name值,这里也要对应。这样就可以在获取静态文件的时候快一点了。

参考:

  1. https://pypi.python.org/pypi/wfastcgi
  2. http://kronoskoders.logdown.com/posts/1074588-running-a-django-app-on-windows-iis
1 0
原创粉丝点击