最近考虑将原来Prism架构(非专业、半专业人员可以认为是C/S架构)往B/S迁移,主要原因是部署问题,包含两个方面的因素:一个因素是虽然已经做了一键安装与部署,但有些只想体念一下的用户对在他们机器上安装一个软件还是心存顾虑,尽管我一再声明这是一个绿色软件;另一个因素是在有的机器上部署还是不太成功,这一点算是跳进了微软的坑(相比于创新,他们更善于创造问题。可参见我另一篇文章"勿于浮沙筑高台 去除对微软运行时库RunTime依赖,http://blog.csdn.net/hlqyq/article/details/7406208)。最终的考虑是:做一个C/S和B/S混合的客户端。即一般的用户界面都是用网页,客户可以继续用他们喜欢的浏览器使用。对于GIS以及其它高性能要求的功能,客户需要下载客户端 - 一个自定义的Chromium浏览器。因为是自定义浏览器,所以可以添加一系列C/S特有的功能,如python脚本嵌入,托盘提示等。整个迁移是渐进的,非颠覆式的迁移。出于对python语言的喜欢,准备使用python的web框架,所以选择了django。
由于我偏向于喜欢轻量级的开源系统,所以web服务器想使用nginx。最好的搭配是nginx + uWSGI + django。但遗憾的是uWGSI好像没Windows版本,所以只好选用nginx + Flup + Django组合。信息流程是:browser<=> web服务器(nginx) <=>FastCGI <=>Flup<=> WSGI <=> Django。其中Flup充当在FastCGI接口规范和WSGI接口规范的适配器角色。本文即是对以上配置的一个安装备忘录。
1、安装python
下载最新的python版本,在本文撰写时为python 3.4,下载地址:https://www.python.org/ftp/python/3.4.0/python-3.4.0.msi,现在完成后点击运行,完成python安装(如c:/python34).
配置python路径支持,右键“计算机”=》“属性”=》“高级系统设置”=》“高级”=》“环境变量”=》“系统变量”=>"Path"=>"编辑",在后面追加";c:\python34"。这样,就可以在命令行窗口下直接运行"python.exe"。运行"cmd",打开一个控制台窗口,运行"python -V",显示“Python 3.4.0"即表示成功。
2、安装Django
下载最新版Django1.6.2,下载地址: https://www.djangoproject.com/m/releases/1.6/Django-1.6.2.tar.gz。下载完成后解压(例如解压到"D:\Django-1.6.2")。运行"cmd"打开控制台窗口,切换到"d:\django-1.6.2",运行"setup.py install",安装完成后启动python,输入"import django;print(django.VERSION)" 显示“(1, 6, 2, 'final', 0)”即表示成功。
配置django路径支持,右键“计算机”=》“属性”=》“高级系统设置”=》“高级”=》“环境变量”=》“系统变量”=>"Path"=>"编辑",在后面追加";C:\Python34\Lib\site-packages\django\bin"。这样,就可以在命令行窗口下直接运行django命令。打开控制台窗口,输入"django-admin.py -h"显示帮助信息表示成功。
注意要支持python3.x系列的flup3,下载地址: https://codeload.github.com/chxanders/flup3/zip/master.zip。解压后如果运行解压根目录下的setup.py会显示下载setuptools错误。所以直接提取子目录(flup)并拷贝到python第三方软件目录下(C:\Python34\Lib\site-packages)目录下即可。
启动python,运行"import flup;print(flup.__path__)",打印"['C:\\Python34\\lib\\site-packages\\flup']"即表示成功。
4、安装nginx
下载最新的nginx - 1.5.13,,下载地址:http://nginx.org/download/nginx-1.5.13.zip。下载后解压到一个特定目录(如C:\nginx)即可。
运行nginx,打开浏览器,输入"127.0.0.1",显示"Welcome to nginx!"即表示成功。
}
#3、定向静态页面请求到页面目录中
location ~* \.(gif|jpg|jpeg|html|js|css|png)$ {
root d:/mysite/html;
index index.html index.htm;
}