Windows操作系统上各种Web服务器搭配各种模块部署Django的方法.doc_第1页
Windows操作系统上各种Web服务器搭配各种模块部署Django的方法.doc_第2页
Windows操作系统上各种Web服务器搭配各种模块部署Django的方法.doc_第3页
Windows操作系统上各种Web服务器搭配各种模块部署Django的方法.doc_第4页
Windows操作系统上各种Web服务器搭配各种模块部署Django的方法.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DDTCMS小组内部交流资料Windows Server 2003上各种Web服务器搭配各种模块部署Django的方法合集资料整理:糊糊( )我的博客:/huyoo/ 最后更新:2011年4月2日目 录1基础准备工作31.1运行环境31.1.1基本运行环境安装配置31.1.2推荐您安装的组件31.2Web服务器套件选择41.2.1IIS 服务器上部署Django应用的组合41.2.2Apache服务器上部署Django应用的组合41.2.3LightTpd服务器上部署Django应用的组合41.2.4Nginx服务器上部署Django应用的组合41.3数据库选择42IIS + PyISAPIe运行Django52.1运行环境及组件准备:52.1.1依赖组件:52.1.2可选组件:52.2组件安装52.2.1必须组件安装操作:52.2.2可选组件安装操作:62.2.3组件测试62.2.4IIS 和 Python62.2.5你的网站目录结构72.2.6配置 IIS72.2.7配置一个应用程序池72.2.8添加站点92.2.9编辑 Isapi.py92.2.10启动102.3完毕了?别急,还需要修改文件pyisapie.py102.4注意事项:103IIS + FastCGI 运行Django114IIS + isapi_wsgi 运行Django124.1理解ISAPI-WSGI124.1.1介绍134.1.2理论134.1.3Example134.1.4IIS 配置154.1.5管理你的环境164.1.6使用 zc.buildout164.1.7isapi-wsgi的新家.174.1.8文档174.1.9配置向导174.1.10准备工作:174.1.11需求依赖184.1.12测试184.1.13与Django 整合185IIS + pyisapi-scgi运行Django225.1需求:225.2建立站点225.3关于scgi进程所使用的用户权限的说明:225.4评论235.5PyISAPI_SCGI_0_6_17235.5.1pyISAPI_SCGI 0.6.17 使用说明236参考资料:271 基础准备工作1.1 运行环境1.1.1 基本运行环境安装配置1.将硬盘分区为C: D: E: F:,当然,不是这样分区的也没有关系;C:为NTFS格式,最好留一个分区为Fat32格式的,以供测试用,因为某种人品不好的时候,权限问题会让你的脑袋无限膨胀,其余分区均弄成NTFS格式。Windows 命令行下转换硬盘分区格式的命令是convert 盘符 /f ntfs 。2.将Windows Server 2003 RC2安装、配置并能够良好运行。3.下载并安装好python2.5.4(2.5.2,2.5.4,2.5.6都行,只要是2.5.X),安装python2.5到 C: 盘,名为“Python25”。不过我现在比较推荐python2.6.x版本,因为apache的mod_wsgi的几乎所有版本都只匹配python2.6以上版本,包括现在不兼容python2.x的3.0以上版本。4. 下载并安装好django 1.1.1+版本,推荐您使用Django最新版,但不保证最新版适用本文所述的各种方法,本文使用Django 1.1.2 release 版,下载最新的 Django发行版,解压缩安装到C:pythonLibsite-packages.按照Django 入门教程,创建一个基本的 Django 项目并运行,以验证你的Python运行正常。本文所有的示例均在Windows server 2003 + IIS6.0+ Python2.5.4 下测试运行,但是并不保证在您个人使用的计算机上同样能够完美成功运行。1.1.2 推荐您安装的组件 pywin32安装和python的版本相应的pywin32版本下载并安装PyISAPI1.1.0-rc4. 我推荐你安装到C:根目录, 就像我们安装python时装到C:一样。PIL, Python Imaging Module.1.2 Web服务器套件选择1.2.1 IIS 服务器上部署Django应用的组合IIS服务器上部署Django应用的组合通常有如下几种选择:l IIS+PyISAPIel IIS+FastCGIl IIS+isapi_wsgi以上组合在后面的章节中将逐一进行介绍。1.2.2 Apache服务器上部署Django应用的组合服务器上部署Django应用的组合通常有如下几种选择:l Apache+mod_pythonl Apache+mod_wsgi以上组合在后面的章节中将逐一进行介绍。1.2.3 LightTpd服务器上部署Django应用的组合服务器上部署Django应用的组合通常有如下几种选择:以上组合在后面的章节中将逐一进行介绍。1.2.4 Nginx服务器上部署Django应用的组合服务器上部署Django应用的组合通常有如下几种选择:以上组合在后面的章节中将逐一进行介绍。1.3 数据库选择l Sqlite3l MysqlMySQL,数据库服务器,MySQL.com,推荐使用 MySQL 5.1.推荐使用MySQL 图形工具,它可以使数据库的管理在windows上更加方便.l Mssql server2 IIS 服务器上部署Django应用2.1.1 IIS + PyISAPIe运行Django2.1.2 运行环境及组件准备: 依赖组件:l pywin32l pyisapie0.4 及其源代码 可选组件:vs2005+pyisapie0.4源代码2.1.3 组件安装 必须组件安装操作:.1 pyisapie拷贝pyisapie.dll的时候,使用自己编译的那个。在windows服务器上,我知道的运行Django最好方式是安装Apache,并以 mod_python 或者 mod_wsgi的方式运行。 首先,虽然Apache,在windows 上运行的好好的,但是在windows上运行,看起来始终就像个杂牌货。所有的unix 约定看起来就像是鹤立鸡群一样难堪。看起来好像是IIS比较稳定高效的运行 PHP,那为什么不能运行Django呢?最好的选择看起来应该是 PyISAPIe, 一个为IIS设计的 ISAPI 插件,以允许Python脚本来提供网页。我尝试了其他的选择,比如 isapi_wsgi, 但它不能使服务器保持长久运行,仅仅一两个请求就让服务器崩溃了。下载并安装PyISAPI1.1.0-rc4. 我推荐你安装到C:根目录, 就像我们安装python时装到C:一样。 Django2.1.4 可选组件安装操作: 编译pyisapie解压缩pyisapie,进入source使用vs2005(我用的是这个,2003或者6应该也可以)加载python.lib和python.h重新编译pyisapie。默认下载的pyisapie是使用python2.6.2编译的。然后按照/wiki/DjangoOnWindowsWithIISAndSQLServer中的说明去做。 安装MySQL和 Python MySQLdb我们的项目使用 MySQL 作为我们的数据库服务器。 如果你要使用Postgres, 你需要自己解决。要想Django 使用MySQL数据库,还得 安装 Python 对MySQL的绑定MySQLDb.2.1.5 组件测试 Django2.1.6 IIS 和 Python在windows服务器上,我知道的运行Django最好方式是安装Apache,并以 mod_python 或者 mod_wsgi的方式运行。First, Apache, while it runs under Windows just fine, always feels like a kludge when running under Windows. All of the UNIX conventions just stick out like a sore thumb. Seeing that IIS is so stable 和awesome at running PHP, why wouldnt it work to run Django?最好的选择看起来应该是 PyISAPIe, 一个为IIS设计的 ISAPI 插件,以允许Python脚本来提供网页。我尝试了其他的选择,比如 isapi_wsgi, 但它不能使服务器保持长久运行,仅仅一两个请求就让服务器崩溃了。2.1.7 你的网站目录结构每一个Django网站 需要专属于它自己的一份pyisapie.dll拷贝,和它专属的配置文件。我最终完成的目录结构分为2个文件夹。在我的 inetpub 目录下,我创建了一个目录名为 “sites”,这里将存放我的每一个基于Django创建的网站,每一个Each project has its own directory under that, 和within each of those directories I have a folder for pyisapie 和another for my Django project.In the case of the structure looks like this:“log” 和“public”目录不是必须的。在 pyisapie 目录内, I have a copy of the DLL file, 和the configuration files. 下一步,将你的Django项目放在 python 子目录。2.1.8 配置 IIS我们需要将PyISAPIe 在IIS上注册为一个有效的服务器扩展,并且如果你需要运行多个Django 生产的网站的话,你还需要进行非常特殊的设置。首先,为我们的网站注册特定的pyisapie.dll副本: 打开IIS 管理器, 单击 “Web 服务扩展”. 单击“操作”菜单,选择“添加一个新的Web 服务扩展”,给你的扩展服务名称填一个你容易识别的名字,然后在“要求的文件”框框右边,单击“添加”按钮,浏览到你的网站文件夹,在pyisapie 目录下, 单击选择 pyisapie.dll 文件。单击选中“设置扩展状态为允许”旁边的复选框。2.1.9 配置一个应用程序池根据 PyISAPIe的工作方式,你将需要为每一个Django网站配置独立的应用程序池。 性能优先,对于计划在一个主机上运行大量的Django网站,这种方式不是件好事。但是根据我的测试,这样做,运行起来很方便。在你的 IIS 管理器,右键单击应用程序池,并选择“新建”“应用程序池”。然后给你新建的应用程序池命名,最好能给你点提示的名字。In terms of settings, Im still tweaking.作为加载测试,我使用了一个工具叫做siege,并检查确认服务器能处理100个请求/每秒, To achieve this, 我设置应用程序池每60分钟,或者在250个请求之后回收工作进程。你可以调整设置,来看看那种设置比较适合你。2.1.10 添加站点按你平常添加网站的做法,在IIS中添加一个站点,我把我的“主目录”设置为你先前看到的空的“public”目录,虽然是空目录,但是它没有实质影响因为我们将要将所有的网站访问请求指向我们的 PyISAPIe 文件。在主目录,给你的应用一个名字,然后单击 “配置”。在通配符应用程序映射框框下,单击 “插入”,然后浏览你的网站特定的PyISAPIe.dll 文件,然后确保你的“确认文件是否存在”处于未勾选的状态。因为用python来解析静态文件(比如图片,多媒体文件等)是不必要的,所以我为这些静态文件添加了一些虚拟目录(通常保存在你的 Django 项目的“static” 目录)。并且,如果你使用了Django的admin模块,你还可以创建一个“media”虚拟目录指向“ C:pythonLibsite-packagesdjangocontribadminmedia”。最后,确保你将网站的应用程序池设置为你前面在应用程序池中创建的那一个。2.1.11 编辑 Isapi.pyIsapi.py 文件位于 “pyisapie/Http” is the actual adapter file PyISAPIe 寻找并解析http请求。你需要做2件事:第一, 添加你的 Django 项目的全路径到系统的变量的 PYTHON_PATH 像上面的例子一样可使用 sys.append 。第二, 你将需要设置os.environDJANGO_SETTINGS_MODULE 到你的项目 settings 包。2.1.12 启动一旦你做完了上面的所有工作,停止你先前创建的应用程序池,在停止你创建的网站。接着,启动应用程序池,再启动网站,注意一定要按照这个顺序来。通过浏览器访问你的网站地址,你将发现你的网站已经开始运行了。由 Jack 发表。2.1.13 完毕了?别急,还需要修改文件pyisapie.py第一个是将response = This.get_response(Env.URL,request)修改成如下response = This.get_response(request)response.path = Env.URL 这个可以考虑不要了,在dj中response对象,并没有path属性。也没有相关需求。然后将#for chunk in http_response.iterator:# Write(chunk)Write(http_response.content)ok了,全部搞定,大家可以使用了。所有小提醒中的服务器中,都是指我们上边架设的iis+pyisapie的这个环境;其它环境是否存在此问题,我并没有验证。2.1.14 注意事项:一:django的urls.py中的规则都是从访问根目录开始的,也就是http:/localhost/开始;如果你使用虚拟目录的话(例如:虚拟目录为python),你的规则中需要带上此虚拟目录。你的urls.py中的设定都应该是rpython/*这样开始的。小的提醒(2):在django的devolopment server中,模块加载路径会自动逐目录查找的,但是在iis中使用的时候则不会。例如:在使用django-tagging的时候,其fields.py模块中的from tagging.validators import isTagList,在自带的开发server中使用是没有任何问题的,但是到了服务器上tagging.validators就会无法找到,必须是projectname.tagging.validators才可以Write(http_response.content),这句居然有问题完毕了?别急,还需要修改文件pyisapie.py 第一个是 将response = This.get_response(Env.URL,request) 修改成如下 response = This.get_response(request) response.path = Env.URL 这个可以考虑不要了,在dj中response对象,并没有path属性。也没有相关需求。 不需要 request.path = Env.URL 吗?不过既然你成功了,也许是不需要了。 然后将 #for chunk in http_response.iterator: # Write(chunk) Write(http_response.content) 这里改成: try: for chunk in http_response: Write(chunk) finally: http_response.close()也许更合适,毕竟 response 是支持 iterator 的。 小的提醒(2):在django的devolopment server中,模块加载路径会自动逐目录查找的,但是在iis中使用的时候则不会。例如:在使用django-tagging的时候, 其fields.py模块中的from tagging.validators import isTagList,在自带的开发server中使用是没有任何问题的,但是到了服务器上tagging.validators就会无法找到,必 须是projectname.tagging.validators才可以 这个的原因应该是与当前目录有关,django 加载模块会从当前目录开始,执行 development server 的时候当前目录就是 project 的目录,所以 from tagging.validators import . 时能够从当前目录找到模块,不过用 iis 时,当前目录不同了,所以只能从 sys.path 中的目录中找,项目的上一层目录在 sys.path 中,所以. - 缺点:pyisapie不方便,一个站点只能用一个, 可以考虑使用头太晕的,可以用于多个站点。很方便的。-ValueError at /list/Write()的参数必须为字符串。2.2 IIS + FastCGI 运行Django准备工作:现在IIS官方提供fastcgi的支持,这样运行python就可以非常快了。下面是在win2003下设置的步骤:下载和安装IIS对FastCGI的支持, /default.aspx?tabid=1000051。安装flup /flup, python-fastcgi和相关包,我编译好的:/python/fastcgi/libfcgi.dll,/python/fastcgi/python-fastcgi-1.1.win32-py2.5.exe,也可以自己从和/pypi/python-fastcgi下载相关的源代码自己编译。把libfcgi.dll拷贝到Python25DLLs目录,同时把Python25python.exe也拷贝到PythonDLLs目录,不然在IIS下启动python.exe会有问题。添加Python的FastCGI支持:打开命令行窗口到%WINDIR%system32inetsrv,运行:cscript fcgiconfig.js -add -section:PYTHON -extension:py -path:C:Python25DLLspython.exe加一个django的启动文件inetpubdjango_fastcgi.py, 内容:#!c:/python25/python.exeimport sys, ossys.path.insert(0, c:/XXX) # 你的 django project 目录os.environDJANGO_SETTINGS_MODULE = mysite.settings import fastcgifrom flup.server.fcgi import WSGIServer from django.core.handlers.wsgi import WSGIHandlerdef django_app(environ, start_response):handler = WSGIHandler() return handler(environ, start_response)s = fastcgi.ThreadedWSGIServer(django_app, workers=5)s.serve_forever()修改%WINDIR%system32inetsrvfcgiext.ini的PYTHON:PYTHONExePath=C:python25DLLspython.exeArguments=c:/inetpub/django_fastcgi.pyQueueLength=999MaxInstances=20InstanceMaxRequests=500RequestTimeout=500ActivityTimeout=900写一个空的index.py到你的网站目录,然后重启IIS测试一下。(如果404错误,可能需要重启服务器)vcc_- next part -An HTML attachment was scrubbed.URL: /pipermail/python-chinese/attachments/20071204/a35b4052/attachment.html 2.3 IIS + isapi_wsgi 运行Django2.4 理解ISAPI-WSGI 一个关于ISAPI-WSGI的概览,和它是怎么工作的。2.4.1 介绍ISAPI-WSGI is a Python module which allows you to deploy a Python WSGI application natively in Microsoft IIS. This means that, for example, you can use IIS thread pooling 和load balancing to manage the resources of your application: there is no need to start a separate process or service. 安装和 和pre-requisitesTo use ISAPI-WSGI, you first need to install: Python version 2.3 or later The Python Win32 extensions If you are in Python 2.4 or earlier, the wsgiref library The isapi_wsgi module itself wsgiref 和isapi_wsgi are available on PyPI 和can be installed using easy_install or zc.buildout. Thus, if you want to install these into your global Python environment 和you have easy_install available, you can get the latest version with: easy_install -U wsgirefeasy_install -U isapi_wsgi2.4.2 理论Under the hood, ISAPI-WSGI uses the isapi module from the Python Win32 extensions. The normal usage pattern is like this: Create a script which loads (or contains) your WSGI application 和initialies it In this script, place a method _ExtensionFactory_() which returns an ISAPI-WSGI object (either the simple or threadpool handler) Also in this script, add some initialisation boilerplate which is run when the script is executed through the interpreter. The initialisation boilerplate creates a DLL file 和installs it as a wildcard handler in IIS, either for an entire site, or for a virual directory in that site. When a request is received by IIS, it will pass it onto the wildcard handler, which will translate the request into a WSGI request for your application. Note that the automatic IIS configuration in step 4 is convenience only. It is possible to configure IIS manually by installing a wildcard handler using the generated DLL file. If you prefer to do this, you can ignore the VirtualDirs list being created below. Do remember to turn off Check for existence of file in the IIS configuration. 2.4.3 ExampleThis is a simple example that uses Paste Deploy. Paste Deploy loads a WSGI application (configured in a Paste Deploy INI file not shown here), runs in a thread-pool, 和installs to a virtual directory called wsgi-test: # Enable tracing. Run python -m win32traceutilif hasattr(sys, isapidllhandle): import win32traceutil# The entry point for the ISAPI extension.def _ExtensionFactory_():from paste.deploy import loadappfrom paste.script.util.logging_config import fileConfigconfigfile=C:MyAppMyApp.inifileConfig(configfile)application = loadapp(config: + configfile)import isapi_wsgireturn isapi_wsgi.ISAPIThreadPoolHandler(application)# ISAPI installationif _name_=_main_:from isapi.install import ISAPIParameters, ScriptMapParams, VirtualDirParameters, HandleCommandLineparams = ISAPIParameters()sm = ScriptMapParams(Extension=*, Flags=0)vd = VirtualDirParameters(Name=wsgi-test,Description = A test application,ScriptMaps = sm,ScriptMapUpdate = replace)params.VirtualDirs = vdHandleCommandLine(params)At the top of the file, we enable trace logging. This allows you to watch for log messages by running: python -m win32traceutilThis is very useful for debugging, though you probably want to remove the import if win32traceutil for production use. Next, we define the _ExtensionFactory_() function, which is the entry point for ISAPI. IIS will call this function 和expect to get a handler object back. Here, we use the ISAPIThreadPoolHandler, which enables thread pooling. There is also ISAPISimpleHandler, which runs single-theraded. The handler is passed the WSGI application (a callable). The handler may optionally take other applications as keyword arguments, which will be available on various sub-domains: return isapi_wsgi.ISAPIThreadPoolHandler(default_app, foo=foo_app, bar=bar_app)Here, /foo (under the virtual directory where the handler is installed - more on that in moment) will execute the WSGI application represented by the foo_app callable, /bar will execute bar_app 和everything else will go to default_app. With the entry point configured, the rest of the script is concerned with creating a DLL file 和configuring IIS. Lets look at the code again: if _name_=_main_:from isapi.install import ISAPIParameters, ScriptMapParams, VirtualDirParameters, HandleCommandLineparams = ISAPIParameters()sm = ScriptMapParams(Extension=*, Flags=0)vd = VirtualDirParameters(Name=wsgi-test,Description = A test application,ScriptMaps = sm,ScriptMapUpdate = replace)params.VirtualDirs = vdHandleCommandLine(params)The HandleCommandLine function parses comm和line options 和is capable of configuring IIS when the script is run like so (if the script is called myapp.py): python myapp.py installThis will configure the default IIS site. If you want to configure another site, you can use the -server argument: python myapp.py install -server=MySiteMySite is the name of the site object in the IIS console. When this script is run, a DLL file will be created in the current directory, called e.g. _myapp.dll. This is then intalled into IIS as wildcard handler. In the example above, the configuration takes place in a virtual directory called wsgi-test that is created if it does not exist. To configure the root of the IIS site, pass Name=/: vd = VirtualDirParameters(Name=wsgi-test,Description = A test application,ScriptMaps = sm,ScriptMapUpdate = replace)2.4.4 IIS 配置Presuming you are using the thread pool handler, you can configure the application pool to use from the properties of the site or virtual directory in IIS, 在“主目录”选项卡. This application pool can be configured to monitor memory usage, limit resource consumption, automatically restart processes 和so on. SecurityIIS may need write access to be able to write log files or other temporary files. The exact requirements will be application-dependent, but bear in mind that when your application runs in an IIS application pool, the user to run as can be set in the application pool configuration. The win32traceutil log should be able to tell you of any permission denied errors stopping your application from executing correctly. 2.4.5 管理你的环境Most non-trivial applications will depend on third party libraries, 和most people will not want to install those packages in their global Python environment. It is probably a good idea to install the Python Win32 extensions globally, but everything else (including wsgiref 和isapi_wsgi) can be placed in a local environment. The two most common approaches for managing a local Pythone environment are virtualenv 和zc.buildout Using virtualenvPresuming your global Python environment is relatively clean, you should be able to load the packages in a specific virtualenv by placing the following at the top if your ISAPI-WSGI script: import sitesite.addsitedir(/path/to/virtualenv/lib/python2.5/site-packages)This assumes the virtualenv uses Python 2.5 和is installed in /path/to/virtualenv. 2.4.6 使用 zc.buildout如果你在用zc.buildout, you probably want to make sure that WSGI application contains the packages in the working set managed for your application by the buildout process. As long as you are using Paste Deploy to configure your WSGI application, there is a buildout recipe which can generate the ISAPI-WSGI script 和even automatically install it for you. It can be used like this: buildoutparts = wsgidevelop = src/myappwsgirecipe = collective.recipe.isapiwsgieggs =wsgirefisapi_wsgimyappconfig-file = $buildout:directory/production-deployment.inidirectory = /server = Defaultdebug = TrueThis example configures the root of the IIS site called Default with a script similar to the one shown above. See the collective.recipe.isapiwsgi documentation for more details. 2.4.7 isapi-wsgi的新家. /p/isapi-wsgi/描述:一个 WSGI (PEP 333)的实现,用以运行 for running as a ISAPI extension under IIS. WSGI is considered as important standard for the future of web deployed Python code. There are implementations for CGI, mod python, twisted, jython etc but at the start of development there was not one using ISAPI for IIS. The goal of this project is to pro

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论