CentOS 安装 Python & Tornado & Nginx & MySQL & Redis

Python

安装 Python 2.7.6,CentOS 6.5 自带 Python 2.6.6,原因是由于 yum 依赖 Python 2.6

下载 Python 2.7.6 并解压

1
2
$ wget https://www.python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz
$ tar -xvf Python-2.7.6.tar.xz

安装 zlib,安装 pip 时需要 zlib

1
2
3
4
$ cd Python-2.7.6/Modules/zlib
$ ./configure
$ make all
$ make install

安装 Python 2.7.6

1
2
3
4
$ cd ../../
$ ./configure
$ make all
$ make install

将 Python 2.7.6 设为默认环境

1
2
$ mv /usr/bin/python /usr/bin/python2.6.6
$ ls -s /usr/local/bin/python2.7 /usr/bin/python

修改 yum 为原来依赖的 Python 2.6.6,将 (/usr/bin/yum) 第一行 #!/usr/bin/python 修改为 #!/usr/bin/python2.6.6

1
$ vi /usr/bin/yum

Nginx

在 yum repository 中添加 nginx.repo,创建文件 /etc/yum.repos.d/nginx.repo,文件内容如下

1
2
3
4
5
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

安装 Nginx

1
$ yum install nginx

Nginx 中使用 WebSocket 配置(Nginx 1.3 以上版本)

1
2
3
4
5
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}

MySQL

安装 MySQL 客户端

1
$ yum install mysql

安装 MySQL-Devel, 使用 pip 安装 MySQL-Python 依赖 MySQL-Devel

1
$ yum install mysql-devel

Redis

安装 Redis

1
$ yum install redis

Tornado

安装 pip 并使用 pip 安装 Tornado

1
2
3
4
5
$ wget https://bootstrap.pypa.io/get-pip.py
$ python get-pip.py
$ pip install tornado
$ pip install mysql-python
$ pip install redis

完。

OS X Yosemite 安装并配置 MySQL & VirtualEnv & Tornado & Supervisor

MySQL

安装 MySQL

1
$ brew install mysql

启动 MySQL

1
mysql.server start

设置 Root 密码,根据提示进行 MySQL 配置

1
$ ./usr/local/Cellar/mysql/5.6.22/bin/mysql_secure_installation

Nginx

安装 Nginx

1
$ brew install nginx

在配置文件中设置 Nginx 为80端口

1
$ vi /usr/local/etc/nginx/nginx.conf

pip

下载 get-pip.py 文件,需要管理员权限

1
$ sudo python get-pip.py

或者使用 easy_install 安装 pip

1
$ sudo easy_install pip

VirtualEnv

安装 virtualenv ,需要管理员权限

1
$ sudo pip install virtualenv

VirtualEnvWrapper

安装 virtualenv ,需要管理员权限

1
$ sudo pip install virtualenvwrapper

创建 .virtualenvs 目录存放虚拟环境以及配置

1
$ mkdir ~/.virtualenvs

在 ~/.zshrc 增加配置

1
2
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

执行如下命令或者重新打开终端

1
$ source ~/.zshrc

创建虚拟环境

1
$ mkvirtualenv [虚拟环境名称]

查看所有虚拟环境

1
$ workon

切换虚拟环境

1
$ workon [虚拟环境名称]

退出虚拟环境

1
$ deactivate

删除虚拟环境

1
$ rmvirtualenv [虚拟环境名称]

iPython

安装 iPython

1
$ pip install ipython

MySQL-Python

安装 MySQL-Python

1
$ pip install mysql-python

测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import MySQLdb as mdb
import sys
try:
con = mdb.connect('localhost', 'root', 'password', 'database')
cur = con.cursor()
cur.execute('select VERSION()')
ver = cur.fetchone()
print 'Database version : %s ' % ver
except mdb.Error, e:
print 'Error %d: %s' % (e.args[0], e.args[1])
sys.exit()
finally:
if con:
con.close()

Tornado

安装 Tornado

1
$ pip install tornado

安装 Supervisor 并且配置 Nginx 运行 Tornado 程序

Supervisor 是一个进程监控程序,使用 Supervisor 来守护管理 Tornado 进程。另外使用 Nginx 作为 Tornado 多进程多端口的反向代理,同时可以达到均衡负载的作用。

Tornado 程序如下 [/Users/youname/repo/tornado-test/app.py]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.options import define, options
define('port', default=8000, help='run on the given port', type=int)
class AppHandler(tornado.web.RequestHandler):
def get(self):
greeting = self.get_argument('greeting', 'Hello')
self.write(greeting + ', friendly user!')
if __name__ == '__main__':
tornado.options.parse_command_line()
app = tornado.web.Application(handlers=[(r'/', AppHandler)])
http_server = tornado.httpserver.HTTPServer(app, xheaders=True)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()

安装 Supervisor

1
$ pip install supervisor

生成 Supervisor 配置文件

1
$ echo_supervisord_conf > ./supervisord.conf

修改配置文件如下,配置 Tornado 开了四个进程,端口为 8001 - 8004

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[group:testapp]
programs=tornado-test
[program:tornado-test]
command=python /Users/youname/repo/tornado-test/app.py --port=80%(process_num)02d
process_name=%(program_name)s%(process_num)d
numprocs=4
directory=/Users/youname/repo/tornado-test
autostart=true
redirect_stderr=true
stdout_logfile=/Users/youname/repo/tornado-test/tornado.log
stdout_logfile_maxbytes=100MB
stdout_logfile_backups=10
loglevel=info
numprocs=4
numprocs_start=1

启动 Supervisor

1
$ supervisord -c ./supervisord.conf

查看运行状态

1
$ supervisorctl status

重新加载配置文件

1
$ supervisorctl reload

停止所有 Supervisor

1
$ supervisorctl stop all

停止某个 Supervisor

1
$ supervisorctl stop [groupname]:[programname]

配置 Nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
upstream tornadoes {
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
server 127.0.0.1:8004;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_pass http://tornadoes;
}

运行 Nginx

1
$ sudo nginx

停止 Nginx

1
$ sudo nginx -s stop

配置 Tornado 环境到这。