<i id='n9h35'><div id='n9h35'><ins id='n9h35'></ins></div></i>

      <acronym id='n9h35'><em id='n9h35'></em><td id='n9h35'><div id='n9h35'></div></td></acronym><address id='n9h35'><big id='n9h35'><big id='n9h35'></big><legend id='n9h35'></legend></big></address>

        <i id='n9h35'></i>

        <code id='n9h35'><strong id='n9h35'></strong></code>

        1. <ins id='n9h35'></ins>

        2. <tr id='n9h35'><strong id='n9h35'></strong><small id='n9h35'></small><button id='n9h35'></button><li id='n9h35'><noscript id='n9h35'><big id='n9h35'></big><dt id='n9h35'></dt></noscript></li></tr><ol id='n9h35'><table id='n9h35'><blockquote id='n9h35'><tbody id='n9h35'></tbody></blockquote></table></ol><u id='n9h35'></u><kbd id='n9h35'><kbd id='n9h35'></kbd></kbd>
        3. <span id='n9h35'></span>

            <fieldset id='n9h35'></fieldset>
          1. <dl id='n9h35'></dl>

            Linux下将Python的Django项目部署到Apache服务器

            • 时间:
            • 浏览:6
            • 来源:124软件资讯网

                这几天花了点时间,将把django开发好的web项目部署到Apache上  ,参考了官方的一些文档和互联网上的文档  ,照旧花了比力多的时间  ,这里把设置的历程说一下  。

                利便有需要的朋侪  ,可以参考  ,少走弯路!

                1. django项目部署情况说明

                操作系统 : Red Hat Enterprise Linux Server release 5.3 (Tikanga) x86_64

                apache版本 : httpd-2.2.3-22.el5

                mod_wsgi版本 : mod_wsgi-3.2-1.el5 fedora epel可以下载

                Django版本 : 1.2.3

                python 版本 : 2.5

                这里假定Django和Apache已经安装好  ,而且Django的项目已经开发好 。

                以上软件包都是通过yum包安装,软件包都是系统尺度目录结构!

                django开发好的项目目录是 /var/www/html/server,项目目录结构如下(尺度django项目目录结构)

                ?

              1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #tree -d server/ server/ |-- __init__.py |-- manage.py |-- settings.py |-- backend |-- static | |-- images | |-- locale | |-- plugins | `-- themes | |-- default | | `-- images | |-- gray | | `-- images | `-- icons |-- template `-- view

                2. Apache和mod_wsgi设置

                修改wsgi设置(/etc/httpd/conf.d/wsgi.conf)

                ?

              1 2 3 4 5 6 7 8 #cat /etc/httpd/conf.d/wsgi.conf LoadModule wsgi_module modules/mod_wsgi.so WSGIScriptAlias / "/var/www/html/server/django.wsgi" Order Deny,Allow Allow from all

                项目目录中的django.wsgi这个文件是需要新建的  ,后面会说到怎样新建这个文件  。

                apache使用的尺度设置,Apache的DocumentRoot 指向的是 /var/www/html 目录

                3. 新建django.wsgi文件

                在项目目录/var/www/html/server下新建一个django.wsgi ,文件内容如下:

                ?

              1 2 3 4 5 6 7 8 9 10 #cat /var/www/html/server/django.wsgi # -*- coding: utf-8 -*- import os import sys os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' os.environ['PYTHON_EGG_CACHE'] = '/tmp/.python-eggs' current_dir = os.path.dirname(__file__) if current_dir not in sys.path: sys.path.append(current_dir) import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()

                第三行 os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' ,这个settings就是指项目目录下的setting.py文件.

                第四行 os.environ['PYTHON_EGG_CACHE'] = '/tmp/.python-eggs'  ,指定解压egg文件的cache目录 ,确保运行apache的用户  ,能够对此目录有读写权限.

                第五  ,六行 将当前目录自动加入到python的搜索路径,若是项目中有自己写的模块 ,利便使用和公布

                最后  ,这个django.wsgi文件名可以随便取  ,例如test.wsgi、app.wsgi等等  ,可是一定要与/etc/httpd/conf.d/wsgi.conf设置文件中设置保持一致  。

                若是您这里新建的文件名不是django.wsgi而是test.wsgi  ,那么/etc/httpd/conf.d/wsgi.conf中的设置就应该修改为

                ?

              1 WSGIScriptAlias / "/var/www/html/server/test.wsgi"

                4. 修改django项目中的setting.py文件

                找到项目目录下的setting.py ,对于这里就是/var/www/html/server/setting.py 。找到其中的TEMPLATE_DIRS  ,修改为:

                ?

              1 TEMPLATE_DIRS = ("/var/www/html/server/template",)

                注重: 模板目录在这里一定要用绝对路劲  ,而不能用相对路径,固然也有要领动态设置模板路劲

                PS:关于mod_wsgi

                现在mod_wsgi有两种事情模式:

                第一种是嵌入模式  ,类似于mod_python ,直接在apache历程中运行  ,这样的利益是不需要另外增添历程  ,可是坏处也很显着  ,所有内存都和apache共享 ,若是和mod_python一样造成内存毛病的话  ,就会危害整个apache  。而且若是apache是用worker mpm  ,mod_wsgi也就强制进入了线程模式 ,这样子对于非线程宁静法式来说就没法用了 。

                这种模式下需要在apache的vhost中如下设置:

                ?

              1 WSGIScriptAlias /path /path-to-wsgi

                即可生效  ,对于小型剧本的话  ,直接用这种模式即可  。

                第二种是后台模式  ,类似于FastCGI的后台  ,mod_wsgi会借apache的外壳  ,另外启动一个或多个历程 ,然后通过socket通讯和apache的历程联系  。

                这种方式只要使用以下设置即可:

                ?

              1 2 3 4 5 6 7 8 9 10 #启动WSGI后台 ,site1是后台名字 WSGIDaemonProcess site1 processes=1 threads=15 display-name=%{GROUP} #分配当前上下文应该使用哪个WSGI后台 ,可以放在Location内里指定 WSGIProcessGroup site1 #凭据当前上下文的ProcessGroup分配到对应的后台 WSGIScriptAlias /path /path-to-wsgi

                在这种模式下  ,我们可以通过调治processes和threads的值来设置三种MPM的模式:prefork', 'worker', 'winnt'  。

                winnt模式

                ?

              1 2 3 WSGIDaemonProcess example threads=25 wsgi.multithread True wsgi.multiprocess False

                此时processes=1  ,可是multiprocess为false

                若是显式地指出processes为1那么:

                ?

              1 2 3 WSGIDaemonProcess example processes=1 threads=25 wsgi.multithread True wsgi.multiprocess True

                worker模式

                ?

              1 2 3 4 WSGIDaemonProcess example processes=2 threads=25 wsgi.multithread True wsgi.multiprocess True

                preforker模式

                ?

              1 2 3 WSGIDaemonProcess example processes=5 threads=1 wsgi.multithread False wsgi.multiprocess True

                后台模式由于是与apache历程分散了 ,内存自力  ,而且可以自力重启  ,不会影响apache的历程  ,若是你有多个项目(django)  ,可以选择建设多个后台或者配合使用一个后台  。

                好比在统一个VirtualHost内里 ,差别的path对应差别的django项目 ,可以同时使用一个Daemon:

                ?

              1 2 3 4 5 6 7 WSGIDaemonProcess default processes=1 threads=1 display-name=%{GROUP} WSGIProcessGroup default WSGIScriptAlias /project1 “/home/website/project1.wsgi” WSGIScriptAlias /project2 “/home/website/project2.wsgi”

                这样子两个django都使用统一个WSGI后台  。

                也可以把差别的项目离开  ,离开使用差别的后台  ,这样开销比力大  ,但就不会耦合在一起了  。

                display-name是后台历程的名字 ,这样利便重启对应的历程  ,而不需要所有杀掉  。

                ?

              1 2 3 4 5 6 7 8 9 10 11 12 13 WSGIDaemonProcess site1 processes=1 threads=1 display-name=%{GROUP} WSGIDaemonProcess site2 processes=1 threads=1 display-name=%{GROUP} WSGIProcessGroup site1 WSGIScriptAlias /project1 “/home/website/project1.wsgi” WSGIProcessGroup site2 WSGIScriptAlias /project2 “/home/website/project2.wsgi”

                对于django 1.0以下的版本  ,由于官方认定不是线程宁静的  ,以是建议使用多历程单线程模式

                ?

              1 processes=n threads=1

                对于django 1.0以后  ,就可以放心的使用多历程多线程模式:

                ?

              1 processes=2 threads=64

                这样子性能会更好  。