centos搭建python+nginx+tornado+mysql环境

python是一种解释型、面向对象、动 态数据类型的高级程序设计语言。自从20世纪90年代初python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和web编程。python已经成 为最受欢迎的程序设计语言之一。2011年1月,它被tiobe编程语言排行榜评为2010年度语言。官网

nginx是一款轻量级的web 服务器/反向代理服务器及电子邮件(imap/pop3)代理服务器,并在一个bsd-like 协议下发行。由俄罗斯的程序设计师igor sysoev所开发,供俄国大型的入口网站及搜索引擎rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的 并发能力确实在同类型的网页服务器中表现较好。官网

tornado是friendfeed使用了一款使用 python 编写的,相对简单的 非阻塞式 web 服务器。其应用程序使用的 web 框架看起来有些像 web.py 或者 google 的 webapp, 不过为了能有效利用非阻塞式服务器环境,这个 web 框架还包含了一些相关的有用工具 和优化。 tornado 就是我们在 friendfeed 的 web 服务器及其常用工具的开源版本。tornado 和现在的主流 web 服务器框架(包括大多数 python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对 epoll 的运用,tornado 每秒可以处理数以千计的连接,因此 tornado 是实时 web 服务的一个 理想框架。我们开发这个 web 服务器的主要目的就是为了处理 friendfeed 的实时功能 ——在 friendfeed 的应用里每一个活动用户都会保持着一个服务器连接。(关于如何扩容 服务器,以处理数以千计的客户端的连接的问题,请参阅 the c10k problem )官网

mysql是一个关系型数据库管理系统,由瑞典mysql ab公司开发,目前属于oracle公司。mysql是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内, 这样就增加了速度并提高了灵活性。mysql的sql语言是用于访问数据库的最常用标准化语言。mysql软件采用了双授权政策(本词条“授权政策”), 它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择mysql作为网站数据库。官网

python+tornado的组合正在得到越来越多人的关注。tornado和nginx一样采用epoll的方式进行进程的调度。非阻塞的的调用方式轻易就解决了大并发的问题,再加上python是开发轻量级、多并发程序的神器。所以,这个组给看上去相当不错。
下面我将介绍在unix(linux、mac下的配置方法其本一致)下如何快速搭建其运行环境:
1、安装python
wget http://www.python.org/ftp/python/2.7.5/python-2.7.5.tgz tar xvfz python-2.7.5.tgzcd python-2.7.5 ./configure
make
sudo make install

2、安装python的包管理工具setuptools、pip和打包工具distribute
wget http://peak.telecommunity.com/dist/ez_setup.py python ez_setup.py
wget http://python-distribute.org/distribute_setup.py python distribute_setup.py
wget https://github.com/pypa/pip/raw/master/contrib/get-pip.py python get-pip.py

3、安装readline
sudo pip install readline

4、安装mysql

#安装cmake wget http://www.cmake.org/files/v2.8/cmake-2.8.8.tar.gz
tar xvfz cmake-2.8.8.tar.gz
cd cmake-2.8.8
./configure
make
sudo make install #安装mysql wget http://cdn.mysql.com/downloads/mysql-5.5/mysql-5.5.29.tar.gz
tar xvfz mysql-5.5.29.tar.gz
cd mysql-5.5.29
cmake . -dcmake_install_prefix=/usr/local/mysql -dmysql_datadir=/usr/localmysql/data/ -dmysql_unix_addr=/usr/localmysql/data/mysqld.sock -dwith_innobase_storage_engine=1 -dsysconfdir=/etc -dextra_charsets=all -ddefault_charset=utf8 -ddefault_collation=utf8_unicode_ci -dwith_debug=0
make
sudo make install #下载安装mysql-python wget http://sourceforge.net/projects/mysql-python/files/mysql-python/1.2.3/mysql-python-1.2.3.tar.gz
tar xvfz mysql-python-1.2.3.tar.gz
cd mysql-python-1.2.3 #修改site.py中mysql_config的路径(为mysql安装路径下的/bin/mysql_config), site.py
mysql_config = /usr/local/mysql/bin/mysql_config #更改完进行编译和安装 python setup.py build
sudo python setup.py install #将mysql安装路径下的lib加入到环境变量ld_library_path中 export ld_library_path=/usr/local/mysql/lib/:$ld_library_path

5、安装一些python的常用模块和tornado
pip install tornado
pip install torndb
pip install requests
pip install markdown

6、配置mysql
groupadd mysql useradd -g mysql mysql chown mysql.mysql -r /service/mysql/ /usr/local/mysql/scripts/mysql_install_db –user=mysql –basedir=/usr/local/mysql –datadir=/usr/local/mysql/data cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf

7、安装nginx
wget http://nginx.org/download/nginx-0.8.33.tar.gz tar zxvf nginx-0.8.33.tar.gz
cd nginx-0.8.33 ./configure
make
make install

8、配置nginx,编辑/usr/local/nginx/conf/nginx.conf文件
user nobody;
worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
upstream snail {
server 127.0.0.1:8888;
}
sendfile on; #tcp_nopush on; keepalive_timeout 65;
proxy_read_timeout 200;
tcp_nopush on;
tcp_nodelay on;
gzip on;
gzip_min_length 1000;
gzip_proxied any;
server {
listen 80;
server_name localhost; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location / {
proxy_pass_header server;
proxy_set_header host $http_host; # proxy_redirect false; proxy_set_header x-real-ip $remote_addr;
proxy_set_header x-scheme $scheme;
proxy_pass http://snail; }
}
}

9、创建一个项目
vi demo.py
import tornado.ioloop import tornado.web class mainhandler(tornado.web.requesthandler): def get(self): self.write(“hello, world”)
application = tornado.web.application([
(r”/”, mainhandler),
]) if __name__ == “__main__”:
application.listen(8888)
tornado.ioloop.ioloop.instance().start()

10、运行这个项目
#启动项目 nohup python demo.py & #重启nginx /usr/local/nginx/sbin/nginx -s reload
在浏览器中输入http://127.0.0.1 看到页面输出hello word!