Django-webserver-python搭建配置_on.squeeze(Debian)

.............

 

两部分:

首先:

django链接oracle的配置:

http://bigzhu.is-programmer.com/posts/20388.html

django连接oracle

 

http://www.python.net/crew/atuining/cx_Oracle/下载适配器cx_Oracle

 

打开settings.py文件,配置oracle连接:

 

DATABASE_ENGINE = 'oracle' # 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'.
DATABASE_NAME = 'bill' # Or path to database file if using sqlite3.
DATABASE_USER = 'acct' # Not used with sqlite3.
DATABASE_PASSWORD = '' # Not used with sqlite3.
DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = '1521' # Set to empty string for default. Not used with sqlite3.

 

DATABASE_ENGINE 填入数据库驱动,这里自然填入oracle

 

DATABASE_NAME 填入sid,可以查看本机的tnsnames.ora是如何配置的

 

DATABASE_USER 数据库用户

 

DATABASE_PASSWORD 用户密码

 

DATABASE_HOST 直接填入ip地址就可以

 

DATABASE_PORT oracle服务的端口号

 

配置完毕后,保存,开始测试:

 

进入django的project目录

 

python manage.py shell

 

进入使用了对应settings的命令行.

 

输入:

 

>>> from django.db import connection
>>> cursor = connection.cursor()

没有任何报错就说明成功了.

 

http://www.longtask.com/blog/?p=213

Oracle和Django的结合
    目前支持oracle 9i以上的版本,你需要到http://cx-oracle.sourceforge.net/下载cx-oracle包来提供相关的支持。

然后是apache以及django本身的配置:

 

llll

http://www.howtoforge.com/how-to-install-django-on-debian-lenny-apache2-mod_python

http://www.longtask.com/blog/?p=213

 

Django是简介:

 

    Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的设计模式,即模型M,模版T和视图控制器V。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。
    Django的主要目标是使得开发复杂的、数据库驱动的网站变得简单。Django注重组件的重用性和“可插拔性”,敏捷开发和DRY法则(Don’t Repeat Yourself)。在Django中Python被普遍使用,甚至包括配置文件和数据模型。更多信息在这里

 

Django安装

 

    安装Django之间你必须安装python,到python.org(千万别到python.com上,别怪我没有告诉你)上去下载2.3以上,3.0以下的版本(3.x的版本不向下兼容,目前django还不支持)。到http://www.djangoproject.com/download/下载最新的django1.0.2的gz包,
在linux下的安装为:
    1:tar xzvf Django-1.0.2-final.tar.gz
    2:cd Django-1.0.2-final
    3:sudo python setup.py install
在windows下面的安装方式为:
    1:进入命令行;转到django的解压缩目录
    2:输入:C:\Python25\python.exe setup.py install 就可以了,这里的python.exe是自己的的python在windows下的安装目录。

 

开发前准备工作

 

    1:django支持的数据库
    在web开发之旅中,摆脱数据库总是不太现实,所以需要了解一下django支持的数据库,目前django支持5中数据库:OracleMySQL ,PostgreSQL SQLite 3 ,Microsoft SQL Server 
    Oracle和Django的结合
    目前支持oracle 9i以上的版本,你需要到http://cx-oracle.sourceforge.net/下载cx-oracle包来提供相关的支持。
    Mysql和Django的结合
    支持Mysql4.0以上的版本,需要到http://sourceforge.net/projects/mysql-python下载mysql-python包。
    其他数据库工作中很少关注,如果想继续关注请google一下。
2:web服务器的安装
    (1)到www.modpython.org下载mod_python包,安装中会自动找到你的python安装目录和apache的安装目录,如果提示没有找到,就需要你选择一下相关的安装目录,如果错误会自动退出安装。
    (2)在apache的httpd.conf中添加相关的配置:
   在<IfModule alias_module></IfModule> 中间添加相关的配置,注意你的apache的版本号对应的相关的配置。
    LoadModule python_module modules/mod_python.so
    <Directory "E:/python/web">
        Options FollowSymLinks
        AllowOverride None
        Order allow,deny
        allow from all
        Satisfy all
        AddHandler mod_python .py
        PythonHandler test
        PythonDebug On
    </Directory>
    (3)测试一下你的服务器,在目录E:/python/web下面新建test.py,内容如下:
    from mod_python import apache

 

1
2
3
def handler(req):
  req.write(&quot;Hello World!&quot;)
  return apache.OK

 

    启动apache服务器,在浏览器中输入http://localhost/python/test.py,现实Hello World!则代表服务器启动了。

 

 

 

开始django之旅

 

    (1)到django的安装目录(C:\Python25\Lib\site-packages\django\bin),执行C:/Python25/python.exe django-admin.py startproject mydjango 然后在安装目录下面会有4个文件,分别是:__init__.py (可以向Python编译器表明当前文件夹下的内容是Python工程模块) ;manage.py (一个命令行工具,可以让你以多种方式与Django项目交互);setting.py (Django项目的配置 );urls.py (负责配置URL的地址映射以及管理URL的地址格式 )Python代码不要放在document root下 ,因为这样做别人可以从Web看到你的代码;把代码放在document root以外的目录,如/opt/mydjango。
    (2)在命令模式下执行:
        C:\Python25\Lib\site-packages\django\bin>cd mydjango
        C:\Python25\Lib\site-packages\django\bin\mydjango>C:/Python25/python.exe manage.py runserver
        Validating models…
        0 errors found
        Django version 1.0.2 final, using settings ‘mydjango.settings’
        Development server is running at http://127.0.0.1:8000/
        Quit the server with CTRL-BREAK.
    在浏览器中看到相关的内容,就说明启动了Django应用服务器,如果你的代码有改动,它自动reload,不需要重启项目。默认情况下runserver命令启动服务器的端口为8000,只监听本地连接 
    如果你希望改变端口,增加一个命令行参数即可:
        C:/Python25/python.exe manage.py runserver 8080 
    你也可以改变服务器监听的IP地址:
        C:/Python25/python.exe manage.py runserver 0.0.0.0:8080
    后面你就可以自己写python的代码。

 

推荐2本django的电子书籍

 

    1:django step by step
    2:The Django Book      中文版翻译在这里
    如果你python还没有学习的话,请买本《python核心编程第二版》读读吧!

 

配置过程中可能的问题

 

1:在windows的命令模式下执行 python 报错:
计算机的属性》高级》计算机环境变量》path中添加C:\Python25(python安装目录)
2:403错误,查找apache下面的error日志:
client denied by server configuration
apache2.0和2.2的配置文件不一样。
2.0:
Options FollowSymLinks
AllowOverride None 
2.2:
Options FollowSymLinks
AllowOverride None
Order allow,deny
Deny from all   这个地方需要修改为allow from all
Satisfy all

 #########################################

 

http://club.topsage.com/thread-412466-1-1.html

Django开源项目网站:http://www.djangoproject.com/

Django是用python语言写的开源web开发框架(open source web framework),它鼓励快速开发,并遵循MTV设计。Django遵守BSD版权,初次发布于2005年7月, 并于2008年9月发布了第一个正式版本1.0。Django 根据比利时的爵士音乐家Django Reinhardt命名,他是一个吉普赛人,主要以演奏吉它为主,还演奏过小提琴等。

Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以“插件”形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(Do Not Repeat Yourself)原则。

本文将演示如何在Debian Lenny服务器中快速搭建Django环境,使用Apach2 Web服务器及其mod_python模块提供对pyhton和Django的支持。另外,本文只是提供一个Django运行平台快速搭建的参考,最多Django开发等相关内容请参考其官方文档资料。

1. 安装MySQL

Django支持的数据库管理系统非常广泛,如PostgreSQL、MySQL、SQLite等等,如果你像我一样也是使用MySQL数据库的话,使用下面这个简单的命令安装它,

  1. aptitude install mysql-server mysql-client
复制代码

安装过程中,其中一个环节是要求输入MySQL根用户root的密码:

New password for the MySQL "root" user: <-- yourrootsqlpassword
Repeat password for the MySQL "root" user: <-- yourrootsqlpassword



如果希望远程访问MySQL的话,我们要修改 /etc/mysql/my.cnf配置文件,把其中的 bind-address=127.0.0.1 一行注释掉:

  1. vi /etc/mysql/my.cnf
  2. [...]
  3. # Instead of skip-networking the default is now to listen only on
  4. # localhost which is more compatible and is not less secure.
  5. #bind-address           = 127.0.0.1
  6. [...]
复制代码

然后,重启MySQL:

  1. /etc/init.d/mysql restart
复制代码

如果要检查是否能远程访问MySQL,可以使用netstat命令,

  1. netstat -tap | grep mysql
复制代码

会得到类似于下面的输出:

  1. server1:~# netstat -tap | grep mysql
  2. tcp        0      0 *:mysql                 *:*                     LISTEN      3403/mysqld
  3. server1:~#
复制代码

2. 安装Apache及mod_python模块

如果你的系统中Apache2及mod_python没有安装的话,也不必担心,同样一条安装命令搞定:

  1. aptitude install apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-python
复制代码

怎么样,看是不是非常快捷方便?


3. 安装Django

接下来我们该安装Django了,同样,还要安装Python对MySQL的支持,这样才能使用python、Django访问MySQL数据库,安装python-django、python-mysqldb:

  1. aptitude install python-django python-mysqldb
复制代码

4. 配置Apache

Apache安装成功后,其默认的站点根目录为 /var/www,我们这里也不防简化一下:默认的虚拟目录(/etc/apache2/sites-available/default)就直接指向默认的站点根目录(/var/www)了。不过,实际应用中要依自己的具体情况而定。

在正式配置Apache之前,我们必须先新建一个Django项目(比如,叫mysite,具体请参考:http://www.djangoproject.com/documentation/tutorial01/)。为了安全起见,这个项目不放在/var/www目录里,暂且改放在/home/mycode里:

  1. mkdir /home/mycode
  2. cd /home/mycode
  3. /usr/share/python-support/python-django/django/bin/django-admin.py startproject mysite
复制代码

这样,django-admin.py 就自动为我们新建了一个名为mysite的项目,位于/home/mycode/mysite,可以看看,里面已经有一些python程序文件了。

现在,我们来配置Apache,打开我们的默认虚拟主机配置文件/etc/apache2/sites-available/default,在配置文件中的<VirtualHost ...>和</VirtualHost>之前加入如下配置项:

  1. vi /etc/apache2/sites-available/default
  2. [...]
  3. <Location "/mysite">
  4.     SetHandler python-program
  5.     PythonHandler django.core.handlers.modpython
  6.     SetEnv DJANGO_SETTINGS_MODULE mysite.settings
  7.     PythonDebug On
  8.     PythonPath "['/home/mycode'] + sys.path"
  9. </Location>
  10. [...]
复制代码

上面加入的配置项,第一行的路径 /mysite 是该虚拟站点的子目录,假如,当前站点的URL为 http://www.example.com/的话,那么该路径即告诉apache,我的mysite站点就在该虚拟站点根目录下的mysite目录下,可以直接使用http://www.example.com/mysite 这个地址访问。

修改完成后,重启Apache:

  1. /etc/init.d/apache2 restart
复制代码

现在,我们就可以直接在浏览器中打开 http://www.example.com/mysite 查看了。如果一切顺利的话,我们可以看到如下的界面:


这说明Django已经安装成功了,我们可以立即着手Python Web应用程序的开发了,更多Django框架下的Python Web开发资料可以参见:http://www.djangoproject.com/documentation/

5. Django项目连接MySQL数据库

多数Web应用都要用到后台数据库以存取数据,这里我们也简要地说明一下其中的过程。

首先,我们新建一个数据库mysite,并为该库新建一个管理用户mysiteadmin:

  1. mysql -u root -p
  2. CREATE DATABASE mysite;
  3. GRANT ALL ON mysite.* TO 'mysiteadmin'@'localhost' IDENTIFIED BY 'mysiteadmin_password';
  4. GRANT ALL ON mysite.* TO 'mysiteadmin'@'localhost.localdomain' IDENTIFIED BY 'mysiteadmin_password';
  5. quit;
复制代码

然后,打开项目文件夹中的settings.py python程序文件,修改其中的数据库设置项:

  1. vi /home/mycode/mysite/settings.py
  2. [...]
  3. DATABASE_ENGINE = 'mysql'           # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
  4. DATABASE_NAME = 'mysite'             # Or path to database file if using sqlite3.
  5. DATABASE_USER = 'mysiteadmin'             # Not used with sqlite3.
  6. DATABASE_PASSWORD = 'mysiteadmin_password'         # Not used with sqlite3.
  7. DATABASE_HOST = ''             # Set to empty string for localhost. Not used with sqlite3.
  8. DATABASE_PORT = ''             # Set to empty string for default. Not used with sqlite3.
  9. [...]
复制代码

OK,这样,我们在项目中就可以访问MySQL数据库了。

 

最后是nginx+uwsgi部署方式介绍:

 

  llll

http://wangye.org/blog/archives/570/

 

 

最近尝试把项目迁移到Python环境下,特别新装了一台干净的Debian系统,准备重新配置环境,上网找了一些运行Python Web的环境方案,最后敲定Nginx+uWSGI组合,Nginx用得比较多,熟练些;uWSGI据说性能不错,想尝试一下。

 

网上大部分教程都是要求到uWSGI官方网站下载源码包,然后通过编译的方式安装,比如对于一台新Debian系统,可以通过下面的命令安装:

 

apt-get update
apt-get upgrade
apt-get install build-essential psmisc
apt-get install python-dev libxml2 libxml2-dev
apt-get install python-setuptools
cd /opt/
wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz
tar -zxvf uwsgi-latest.tar.gz
mv uwsgi-latest/ uwsgi/
cd uwsgi/
python setup.py install

 

 

 

还有一些配置我就不介绍了,大家可以参考Linode Library的《Deploy Python Code with WSGI using uWSGI and nginx on Debian 6 (Squeeze)》介绍。

 

今天要介绍的是利用APT源直接apt-get install安装配置我们所需要的环境,首先按惯例先安装MySQL和Nginx:

 

apt-get install mysql-server
apt-get install nginx

 

然后通过Debian Packages网站找到我们所需要的uWSGI在sid里,sid版里的东西表示仍在开发测试中,不是最终稳定版,不过对于我们测试来说是够用了,为了用sid里面的软件包,我们还需要修改我们的/etc/apt/sources.list源,添加deb http://ftp.tw.debian.org/debian sid main non-free contrib这一行,或者直接输入命令:

 

echo "deb http://ftp.tw.debian.org/debian sid main non-free contrib" >> /etc/apt/sources.list

 

配置过源列表后,我们就可以通过下面的命令安装了:

 

apt-get update
apt-get install uwsgi uwsgi-core uwsgi-plugin-python

 

安装完成后,配置文件按惯例放在了/etc/uwsgi里面,服务控制可以通过invoke-rc.d uwsgi后面跟命令参数来实现,不过这里有个小插曲我不得不提一下,安装时可能会报这样的错误:

 

The following packages have unmet dependencies:
libc6-dev : Breaks: gcc-4.4 (< 4.4.6-4) but 4.4.5-8 is to be installed.
E: Broken packages

 

看样子是依赖包gcc版本不匹配,我后来通过下面的方式解决了:

 

apt-get update
apt-get upgrade # 先尝试升级系统软件包
 
apt-get install libc6-dev

 

接下来就是安装django以及Python的MySQL支持,继续APT命令:

 

apt-get install python-django python-mysqldb

 

通过上面的步骤,Python环境应该安装到你的系统里了,切换到/usr/lib

 

cd /usr/lib
ls -l | grep python

 

你可能会发现系统内被默认安装了几个版本的Python,比如我这里就安装有3个版本:

 

/usr/lib/python2.6
/usr/lib/python2.7
/usr/lib/python3

 

如何确定当前的Python默认版本呢?很容易,直接通过下面的命令就可以了:

 

python --version

 

大家知道django是安装到python目录下的site-packages下的,但是这几个python目录下都没有site-packages这个文件夹,其实我们可以先通过下面的命令定位一下:

 

python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"

 

上面的命令会在控制台上打印Python包路径,比如这里我们可能获得dist-packages这个目录,切换到这个目录你就会发现django在那儿啦。给django-admin.py加上权限,再做个符号连接,便于我们以后操作(我这里Django在Python2.7下):

 

chmod 777 /usr/lib/python2.7/dist-packages/django/bin/django-admin.py
ln -s /usr/lib/python2.7/dist-packages/django/bin/django-admin.py /usr/local/bin

 

记下Django所在的Python版本,然后通过下面的命令切换uwsgi的默认Python版本(一般不需要切换):

 

update-alternatives --config uwsgi-plugin-python

 

好啦,到这里基本上安装部分就介绍完了,下面讲解配置部分,首先建立我们项目的文件夹,比如说放在/home/user/www下,然后通过下面的命令创建名为mysite的Django项目:

 

cd /home/user/www
django-admin.py startproject mysite

 

好了,这下/home/user/www目录下应该有个子文件夹名字叫mysite,我们需要丢个wsgi的配置文件到/home/user/www/mysite/里面去,配置文件命名为wsgi.py,内容如下:

 

# wsgi.py
# /home/user/www/mysite/wsgi.py
import sys
import os
 
sys.path.append(os.path.abspath(os.path.dirname(__file__)))
# 下面这行是mysite的父目录
sys.path.append('/home/user/www')
# 下面这行的值请改成相应项目名称.settings
# 我们这里是mysite.settings
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
 
import django.core.handlers.wsgi
 
application = django.core.handlers.wsgi.WSGIHandler()

 

接下来是修改uwsgi配置文件,先通过如下命令按照刚才的设置建立个配置文件:

 

cat > /etc/uwsgi/apps-enabled/www.ini << EOF
[uwsgi]
socket = /var/run/uwsgi/app/www/socket
chmod-socket = 666
limit-as = 256
processes = 6
max-request = 2000
memory-report = true
enable-threads = true
pythonpath = /home/user/www
chdir = /home/user/www/mysite
wsgi-file = /home/user/www/mysite/wsgi.py
EOF
 
# 重启uwsgi
invoke-rc.d uwsgi restart

 

注意上面的socket配置,这个在我机子上是这个路径,大家可以cd /var/run里面找下,然后配置正确,接下来建立Nginx配置文件:

 

cat > /etc/nginx/sites-enabled/www << EOF
server {
        listen   80;
        server_name localhost;
        location / {
                include uwsgi_params;
                uwsgi_pass unix:///var/run/uwsgi/app/www/socket;
        }
}
EOF

 

这里的uwsgi_pass依旧是上面我们找到的socket,注意一下server_name,这个是我们绑定的域名,通过nginx -s reload重新加载nginx。

 

好了,现在可以访问看看是不是成功了?如果出现502 Bad Gateway,可以检查一下uwsgi是否正常启动,通过ps aux | grep uwsgi看下进程列表,最后在检查下socket路径是否正确。

 

假如出现uWSGI Error:Python application not found这个问题,主要是路径配置问题,这点你可以查阅/var/log/uwsgi下面的日志文件,比如我就遇到过ImportError: No module named django.core.handlers.wsgi这个问题,实际上是wsgi.py里面路径配置不正确。

 

 

 

###################################################

http://developer.51cto.com/art/201010/229615.htm

快速部署Python应用:Nginx+uWSGI配置详解(1)

2010-10-13 09:21 observer observer专栏杂记 我要评论(0) 字号:T | T
一键收藏,随时查看,分享好友!

相比于PHP,Python应用的部署很麻烦,比较常用的方法有fcgi与wsgi,然而这两种都很让人头痛。文章介绍了Nginx+uwsgi的简便方法,来快速的部署Python应用。

AD:

 

PHP里,最方便的就是deployment了,只要把php文件丢到支持PHP的路径里面,然后访问那个路径就能使用了;无论给主机添加多少PHP应用,只要把目录改好就没你的事了,完全不用关心php-cgi运行得如何,deployment极为方便。

反观Python,部属起来真是头痛,常见的部署方法有:

◆fcgi:用spawn-fcgi或者框架自带的工具对各个project分别生成监听进程,然后和http服务互动。

◆wsgi:利用http服务的mod_wsgi模块来跑各个project。

无论哪种都很麻烦,apache的mod_wsgi配置起来很麻烦,内存占用还大,如果要加上nginx作为静态页面的服务器那就更麻烦了;我的应用基本上到后来都是是各个project各自为战,且不说管理上的混乱,这样对负载也是不利的,空闲的project和繁忙的project同样需要占用内存。

如果Python中能有个什么东西像php-cgi一样监听同一端口,进行统一管理和负载平衡,那真是能省下大量的部署功夫。偶然看到了uWSGI,才发现居然一直不知道有那么方便地统一部署工具。uWSGI,既不用wsgi协议也不用fcgi协议,而是自创了一个uwsgi的协议,据说该协议大约是fcgi协议的10倍那么快,有个比较见下图:

uWSGI

uWSGI的主要特点如下:

◆超快的性能。

◆低内存占用(实测为apache2的mod_wsgi的一半左右)。

◆多app管理。

◆详尽的日志功能(可以用来分析app性能和瓶颈)。

◆高度可定制(内存大小限制,服务一定次数后重启等)。

正式开工

uwsgi的文档虽然很多也很详细,这里是uwsgi的官方文档:http://projects.unbit.it/uwsgi/wiki/Doc

1.安装uwsgi

ubuntu有uwsgi的ppa:

  1. add-apt-repository ppa:stevecrozz/ppa  
  2. apt-get update  
  3. apt-get install uwsgi 

2. 用uwsgi代替mod_wsgi

Nginx的整体配置说来话长,这里不再多说,假设已经明白Nginx的基本配置,那么uwsgi就类似这么配置:

  1. location / {  
  2.   include uwsgi_params  
  3.   uwsgi_pass 127.0.0.1:9090  

这就是把所有url传给9090端口的uwsgi协议程序来互动。再到project目录建立myapp.py,使得application调用框架的wsgi接口,比如web.py就是:

  1. ......  
  2. app = web.application(urls, globals())  
  3. appapplication = app.wsgifunc() 

再比如django就是:

  1. .......  
  2. from django.core.handlers.wsgi import WSGIHandler  
  3. application = WSGIHandler() 

然后运行uwsgi监听9090,其中-w后跟模块名,也就是刚才配置的myapp

  1. uwsgi -s :9090 -w myapp 

运行网站发现已经部署完成了。

3.uwsgi的参数

以上是单个project的最简单化部署,uwsgi还是有很多令人称赞的功能的,例如:

并发4个线程:

  1. uwsgi -s :9090 -w myapp -p 4 

主控制线程+4个线程:

  1. uwsgi -s :9090 -w myapp -M -p 4 

执行超过30秒的client直接放弃:

  1. uwsgi -s :9090 -w myapp -M -p 4 -t 30 

限制内存空间128M:

  1. uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128 

服务超过10000个req自动respawn:

  1. uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128 -R 10000 

后台运行等:

  1. uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128 -R 10000 -d uwsgi.log 

4.为uwsgi配置多个站点

为了让多个站点共享一个uwsgi服务,必须把uwsgi运行成虚拟站点:去掉“-w myapp”加上”–vhost”:

  1. uwsgi -s :9090 -M -p 4 -t 30 --limit-as 128 -R 10000 -d uwsgi.log --vhost 

然后必须配置virtualenv,virtualenv是Python的一个很有用的虚拟环境工具,这样安装:

  1. apt-get install Python-setuptools  
  2. easy_install virtualenv 

然后设置一个/多个app基准环境:

  1. virtualenv /var/www/myenv 

应用环境,在此环境下安装的软件仅在此环境下有效:

  1. source /var/www/myenv/bin/activate  
  2. pip install django  
  3. pip install mako  
  4. ... 

最后配置nginx,注意每个站点必须单独占用一个server,同一server不同location定向到不同的应用不知为何总是失败,估计也算是一个bug。

  1. server {  
  2.         listen       80;  
  3.         server_name  app1.mydomain.com;  
  4.         location / {  
  5.                 include uwsgi_params;  
  6.                 uwsgi_pass 127.0.0.1:9090;  
  7.                 uwsgi_param UWSGI_PYHOME /var/www/myenv;  
  8.                 uwsgi_param UWSGI_SCRIPT myapp1;  
  9.                 uwsgi_param UWSGI_CHDIR /var/www/myappdir1;  
  10.         }  
  11.     }  
  12.     server {  
  13.         listen       80;  
  14.         server_name  app2.mydomain.com;  
  15.         location / {  
  16.                 include uwsgi_params;  
  17.                 uwsgi_pass 127.0.0.1:9090;  
  18.                 uwsgi_param UWSGI_PYHOME /var/www/myenv;  
  19.                 uwsgi_param UWSGI_SCRIPT myapp2;  
  20.                 uwsgi_param UWSGI_CHDIR /var/www/myappdir2;  
  21.         }  
  22.     } 

这样,重启nginx服务,两个站点就可以共用一个uwsgi服务了。

 

 

5.实战应用

最初的设置完毕以后,再添加的应用,只需要在Nginx里面进行少量修改,无需重启uwsgi,就能立刻部署完毕。uwsgi自带了基于django的监控uwsgi运行状态的工具,就拿它来部署好了:

  1. server {  
  2.     listen 80;  
  3.     root   /var/www/django1.23;  
  4.     index  index.html index.htm;  
  5.     server_name uwsgiadmin.django.obmem.info;  
  6.     access_log  /var/log/nginx/django.access.log;  
  7.     location /media/ {  
  8.         root /var/www/django1.23/adminmedia;  
  9.         rewrite ^/media/(.*)$ /$1 break;  
  10.     }  
  11.     location / {  
  12.         include uwsgi_params;  
  13.         uwsgi_pass 127.0.0.1:9090;  
  14.         uwsgi_param UWSGI_PYHOME /var/www/django1.23/vtenv;  
  15.         uwsgi_param UWSGI_CHDIR /var/www/django1.23/uwsgiadmin;  
  16.         uwsgi_param UWSGI_SCRIPT uwsgiadmin_wsgi;  
  17.     }  

于是uwsgi的监控信息可以在http://uwsgiadmin.django.obmem.info看到(用户名密码都是admin)。再比如LBForum论坛程序的部署:根据安装说明安装完毕,再按部署说明修改完配置文件,然后只需修改nginx配置文件:

  1. server {  
  2.     listen 80;  
  3.     root   /var/www/django1.23;  
  4.     index  index.html index.htm;  
  5.     server_name lbforum.django.obmem.info;  
  6.     access_log  /var/log/nginx/django.access.log;  
  7.     location / {  
  8.         include uwsgi_params;  
  9.         uwsgi_pass 127.0.0.1:9090;  
  10.         uwsgi_param UWSGI_PYHOME /var/www/django1.23/vtenv;  
  11.         uwsgi_param UWSGI_CHDIR /var/www/django1.23/LBForum/sites/default;  
  12.         uwsgi_param UWSGI_SCRIPT lbforum_wsgi;  
  13.     }  

于是http://lbforum.django.obmem.info就是论坛程序了。

后记

虽然写出来寥寥几行,配置的时候我可吃尽了uwsgi的苦头,有些想当然的用法完全不能成立,–no-site参数一加上去其他都好使LBForum怎么都部署不了,一开始多站点公用uwsgi怎么都成功不了等等。

Python世界很有趣,一直会发现有趣的东西,但是Python世界也很折腾人,大部分东西都是dev版本,文档缺失,各种兼容问题。

原文地址:http://obmem.info/?p=703

uwsgi官网:http://projects.unbit.it/uwsgi/

 

posted @ 2012-04-13 11:29  陳聽溪  阅读(599)  评论(0)    收藏  举报