django,flup,nginx,fastcgi
http://os.51cto.com/art/201109/288717.htm
首先我们必须明白这这3者在该环境下发挥的作用。
1.nginx:("enginex")是一个高性能的HTTP和反向代理服务器,作用和apache的类似。它可以处理一些静态文件的请求,而对于动态的文件的请求,它可以通过fastcgi方式,来分发请求给不同的动态语言处理。
2.flup:本身是一个使用python写的web服务器软件,它可以接受nginx发来的请求,执行相应的python代码,将结果返回给nginx。
3.django:基于python的一个web框架,它可以我们做一些基础性的东西,比如cookie,session管理,模板机制,权限管理等等。
在搭建环境之前,需要先安装好python环境,本文用的是python2.6.5,python的安装这里就不赘述。
1.安装相关支持文件
setuptools,通过setup.py安装python类库需要setuptools。
- wgethttp://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg
shsetuptools-0.6c11-py2.6.eggpcre,正则表达式相关的类库,ospenssh,安装nginx需要。
- wgethttp://sourceforge.net/projects/pcre/files/pcre/8.02/pcre-8.02.tar.gz/download
- tarzxvfpcre-8.02.tar.gz
- cdpcre-8.02
- ./configure
- make
- makeinstall
- cd..
apt-getinstallopenssllibssl-develzlib,压缩相关的类库,很多软件都需要。
- wgethttp://downloads.sourceforge.net/project/libpng/zlib/1.2.5/zlib-1.2.5.tar.gz?use_mirror=nchc
- tarzxvfzlib-1.2.5.tar.gz
- cdzlib-1.2.5
- ./configure
- make
- makeinstall
- cd..
2.安装django
- wgethttp://www.djangoproject.com/download/1.2.1/tarball/
- tarzxvfDjango-1.2.1.tar.gz
- cdDjango-1.2.1
- pythonsetup.pyinstall
cd..如果需要使用mysql数据的话,可以参考《Linux下安装Django1.2和Mysql-Python》。
3.安装flup
- wgethttp://www.saddi.com/software/flup/dist/flup-1.0.2.tar.gz
- tarzxvfflup-1.0.2.tar.gz
- cdflup-1.0.2
- pythonsetup.pyinstall
- cd..
4.安装nginx
- wgethttp://nginx.org/download/nginx-0.8.39.tar.gz
- tarzxvfnginx-0.8.39.tar.gz
- cdnginx-0.8.39
- ./configure
- make
makeinstll注意:安装后会显示一段Configurationsummary信息,可以将它保存起来,【LINUX公社www.LinuxIDC.com】以便以后使用。
5.配置
配置flup和flup通过fastcgi方式通信,在运行python程序的server{..}配置节中的location{..}配置节添加以下配置:
- fastcgi_passunix:/tmp/mysite.sock;
- fastcgi_paramPATH_INFO$fastcgi_script_name;
- fastcgi_paramREQUEST_METHOD$request_method;
- fastcgi_paramQUERY_STRING$query_string;
- fastcgi_paramCONTENT_TYPE$content_type;
- fastcgi_paramCONTENT_LENGTH$content_length;
- fastcgi_pass_headerAuthorization;
- fastcgi_intercept_errorsoff;
- fastcgi_paramSERVER_PROTOCOL$server_protocol;
- fastcgi_paramSERVER_PORT$server_port;
- fastcgi_paramSERVER_NAME$server_name;6.运行
创建django项目
- cd~
- django-admin.pystartprojectmysite以cgi方式运行django
- ~/news/manage.pyrunfcgidaemonize=truesocket=/tmp/mysite.sock启动nginx
- /usr/local/nginx/sbin/nginx
享受django给你带来的乐趣吧!
总结:
希望本文介绍的Ubuntu下搭建Django+Flup+Nginx环境的方法能够对读者有所帮助,更多有关linux系统的知识还有待于读者去探索和学习。
http://www.fresh3g.org/blog/post/346/
一、什么是 WSGI 。
在认识 flup 之前,得先认识一下 WSGI 。
WSGI 的全称为: Python Web Server Gateway Interface v1.0 (Python Web 服务器网关接口),
它是 Python 应用程序和 WEB 服务器之间的一种接口,更多详细的细节,可以参考 PEP333 。
它的作用,类似于FCGI 或 FASTCGI 之类的协议的作用。
WSGI 的目标,是要建立一个简单的普遍适用的服务器与 WEB 框架之间的接口。
WSGI 的特点是:简单、可移植等。
二、什么是 flup 。
WSGI 还只是一种规范,一种标准,它要完成的作用是用来定义 Python 应用程序要如何于
apache/lighttpd/nginx 等之类的 WEB 服务器之间如何进行通信和交换信息,它不是实际
可以直接拿来用的东西。而 flup 就是使用 Python 语言对 WSGI 的一种实现,是可以用
于 Python 的应用开发中的一种工具或者说是一种库。
flup 的官方网站为: http://trac.saddi.com/flup 。flup 属于开源软件,采用了 BSD 风格
的开放源码授权。
那么, WSGI 除了 flup 外,还有没有其他的实现呢,当然有,更多的实现,可以参考:
http://wiki.python.org/moin/WSGIImplementations
三、flup 支持的 WSGI 服务器/网关
flup 支持三种 WSGI 服务器/网关,分别为 AJP 1.3 , FastCGI ,和 SCGI 。
而对于 flup 支持的这三种 WSGI 服务器/网关, flup 有分别提供了两种不同风格的版本:线程版本和进程版本。
这样, flup 实际就支持六种类型的 WSGI 服务器/网关,分别为:
flup.server.ajp
flup.server.ajp_fork
flup.server.fcgi
flup.server.fcgi_fork
flup.server.scgi
flup.server.scgi_fork
flup.server.cgi
使用的参考示例如下:
def myapp(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/plain')])
return ['Hello World!\n']
if __name__ == '__main__':
from flup.server.fcgi import WSGIServer
WSGIServer(myapp).run()
四、flup 在 Django 中的应用
作为一款非常著名和使用比较广泛的 Python Web 开发框架,Django 中就应用到了 flup 。
在 django/core/servers/fastcgi.py 文件中,就调用了 django/core/handlers/wsgi.py
中的 WSGIHandler() 负责对 WSGI 的应用进行处理。
五、WEB 处理流程
nginx <--------(fastcgi)-------> flup(wsgi/django)
lighttpd <-----(fastcgi)-------> flup(wsgi/django)
apache<------(cgi/fastcgi/scgi/mod_wsgi)------------> flup(wsgi/django)
http://blog.sina.com.cn/s/blog_6ae94c2a01010uqr.html
linux+nginx+python+django+flup环境配置(原创)
2011-05-13 15:47:29| 分类: ubuntu/shell | 标签:linux+nginx+python+django环境配置(原创) |字号 订阅
1.安装python
sudo -s
apt-get install python
apt-get install python-MySQLdb
2.安装nginx
apt-get install nginx
3.安装django
svn co http://code.djangoproject.com/svn/django/trunk django-trunk #直接重django的SVN拿最新稳定安装包
cd django-trunk
python setup.py install
安装flup
cd /usr/local/src
setuptools,通过setup.py安装python类库需要setuptools。
wget http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg
sh setuptools-0.6c11-py2.6.eggwget http://www.dbasky.net/tool/python/flup-1.0.1.tar.gz
tar xzvf flup-1.0.1.tar.gz
cd flup-1.0.1
python setup.py install
4.配置nginx
配置flup和flup通过fastcgi方式通信,在运行python程序的server{..}配置节中的location{..}配置节添加以下配置:
server {
listen 8051;
server_name www. python.com;
access_log /var/log/nginx/localhost.access.log;
root /home/zhukai/diangoproject;
#配置django admin需要的文件
location ~* ^/media/(css|img|js)/.*$ {
root /usr/local/lib/python2.6/site-packages/django/contrib/admin;
expires 30d;
break;
}
location ~* ^.+\.(mpg|avi|mp3|swf|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|txt|tar|mid|midi|wav|rtf|mpeg)$ {
access_log off;
break;
}
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|bmp|js)$ {
expires 30d;
break;
}
location / {
#fastcgi_pass unix:/tmp/python/python.sock;
#如果上面是采用TCP的形式则
fastcgi_pass 127.0.0.1:8080;
fastcgi_pass_header Authorization;
fastcgi_intercept_errors off;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param REMOTE_USER $remote_user;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_SOFTWARE "nginx";
fastcgi_param GATEWAY_INTERFACE "CGI/1.1";
}
}
重启nginx
/etc/init,d/nginx restart
5.绑定hosts
vim /etc/hosts
127.0.0.1 www.python.com python.com
6.创建python项目目录
cd /home/zhukai
django-admin.py startproject djangoproject
cd djangooprject
在8051这个端口为nginx提供服务,对应nginx配置文件中写的。
python manage.py runfcgi method=threaded host=127.0.0.1 port=8051
#python manage.py runserver 8080
你将会看到如下输出:
Validating models...
0 errors found
Django version 1.2, using settings 'diangoproject.settings'
Development server is running at http://127.0.0.1:8080/
Quit the server with CONTROL-C.
[13/May/2011 02:27:28] "GET / HTTP/1.1" 200 2065
Django服务器成功开启
打开浏览器, 访问: http://127.0.0.1:8000/ http://www.python.com:8080/
看一下hello下生成了什么
__init__.py
manage.py
settings.py
urls.py
1.__init__.py:一个空文件,它用来告诉Python把这个文件夹看成是一个Python包。
2.manage.py:一个实用的命令行,它让我们通过各种各样的途径和Django项目进行交互。
3.settings.py:设置/配置Django项目
4.urls.py:Django项目的URL映射。
配置使用数据库
配置settings.py
1.DATABASE_ENGINE—— 'postgresql_psycopg2', 'mysql' or 'sqlite3'中的一个,
其它的也适用。
2.DATABASE_NAME——数据库的名字。如果你使用的是SQLite,数据库是你电脑上的一个文件;因些,
DATABASE_NAME就是文件完整的绝对路径,包含文件名。如果文件不存在,它会在你第一次使用数据库
的时候创建。
当指定文件的路径时,要使用斜线,即使是在windows下(如C:/homes/user/mysite/sqlite3.db)。
3.DATABASE_USER——你的数据库的用户名(SQLite不使用)。
4.DATABASE_PASSWORD——你的数据库的密码(SQLite不使用)。
5.DATABASE_HOST——数据库所在的主机。如果你的数据库在相同的物理机器上,保留它为空字符串(SQLite不使用)。
下面给出我的配置,我用的是mysql数据库
DATABASE_ENGINE = 'mysql' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = 'python' # Or path to database file if using sqlite3.
DATABASE_USER = 'root' # Not used with sqlite3.
DATABASE_PASSWORD = '123' # Not used with sqlite3.
DATABASE_HOST = 'localhost' # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = '3306' # Set to empty string for default. Not used with sqlite3.
注意下面的INSTALLED_APPS的设置。这个变量保存所有已经激活的Django应用
程序的Django实例的名字。Apps能在多个项目中使用,你可以打包和发布它们,让它们在其它项目中使用。
默认情况下,INSTALLED_APPS包含有下面的apps,它们都是来自于Django:
1.django.contrib.auth -- 用户验证系统。
2.django.contrib.contenttypes -- 内容类型框架。
3.django.contrib.sessions -- session框架。
4.django.contrib.sites -- 使用一个Django管理多个站点的框架。
这些应用程序默认是包含的,方便通常情况下的使用。
每个应用程序都需要使用和至少一个数据表,因些我们在使用它们之前要先创建数据表。0
要做这些事情,使用下面的命令即可:
python manage.py syncdb
syncdb命令在你的settings.py文件中查找NSTALLED_APPS的设置并使用数据库的设置创建所需要的数据表。
你将会看到每个数据表的创建信息,并且如果你为验证系统创建超级用户帐号的话,你将会看到一个对话框。
继续,并完成它。
后续开发 参照 http://www.ibm.com/developerworks/cn/linux/l-django/