当前位置 主页 > iis相关 > 最大化 缩小

    windows 2008 server+IIS 7如何运行 django 1.11 + python 3.6

    栏目:iis相关 时间:2018-09-13 14:43

      缘起
      
      使用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流毒甚广,别看了。那些带有PyISAPIe、isapie-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 。
      
      代码一定要用 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这一层,建议往static和media目录下各放一个web.config文件,内容都是:
      
      记得如果你改过最前面的web.config文件中的name值,这里也要对应。这样就可以在获取静态文件的时候快一点了。
      
      参考:
      
      https://pypi.python.org/pypi/wfastcgi
      
      http://kronoskoders.logdown.com/posts/1074588-running-a-django-app-on-windows-iis