当前位置 主页 > iis相关 >

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

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

  缘起
  
  使用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
缩小 缩小 缩小 缩小