使用django
开发了一个项目,客户的技术体系是全栈window
的,所以要求我们提供把项目部署到windows
服务器的服务。
写这个原因是旧的在 windows 上运行python网站程序的文档,基本上全过时了。
嗯,需要安装 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
官网下载就行,我下载的是64位的版本,因为是64位的机器,需要往下拉一下页面才能找到,直接点Download按钮下载的是32位的。
安装的时候,有两个地方要特别注意,一是要勾选Add to PATH
,二是一定要把它安装到没有空格的路径下,比如c:\python36
,不要使用默认的c:\Program files\python36
,你在后面会被折腾死,我不会告诉你我浪费了一天的时间,最后重装python
解决的。
在windows
上跑django
或其它python
网站程序,用IIS
是最正确的,使用 apache/nginx
会更加难管理。但是IIS
不支持wsgi,而django
自1.7起就弃用了fastcgi,在1.9的时候更是删除了,所以我们编写的网站程序无法直接跑在IIS
上,因为我们用的是1.11版本,太新了。
wfastcgi
是当前唯一、唯一、唯一可用可靠的把wsgi桥接到fastcgi的方案,之前花好几天看到的,基本上都过时了,那些基本django
1.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
命令启用它即可,成功运行后,会输出一个目录,告诉你可以把它加到配置文件(稍后讲)。
当然了,首先要把项目的代码 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
本地跑一下啦,只要依赖的包装好了,一般而言是没有问题的。然后可以进入下一步。
在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
文件,内容都是:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<remove name="Python FastCGI" />
</handlers>
</system.webServer>
</configuration>
记得如果你改过最前面的web.config
文件中的name
值,这里也要对应。这样就可以在获取静态文件的时候快一点了。