• <i id='tg4pc'></i>

    1. <span id='tg4pc'></span>
      <acronym id='tg4pc'><em id='tg4pc'></em><td id='tg4pc'><div id='tg4pc'></div></td></acronym><address id='tg4pc'><big id='tg4pc'><big id='tg4pc'></big><legend id='tg4pc'></legend></big></address>

      1. <tr id='tg4pc'><strong id='tg4pc'></strong><small id='tg4pc'></small><button id='tg4pc'></button><li id='tg4pc'><noscript id='tg4pc'><big id='tg4pc'></big><dt id='tg4pc'></dt></noscript></li></tr><ol id='tg4pc'><table id='tg4pc'><blockquote id='tg4pc'><tbody id='tg4pc'></tbody></blockquote></table></ol><u id='tg4pc'></u><kbd id='tg4pc'><kbd id='tg4pc'></kbd></kbd>
      2. <dl id='tg4pc'></dl>

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

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

            <fieldset id='tg4pc'></fieldset>
            <ins id='tg4pc'></ins>

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

            • 时间:
            • 浏览:14
            • 来源: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

                这样子性能会更好 。