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

完。

Hexo 出现 Cannot read property '1' of undefined

在使用 Hexo-2.8.3 命令 hexo g 生成 HTML 页面时出现 TypeError: Cannot read property ‘1’ of undefined ,错误信息如下

1
2
3
4
5
6
7
8
9
10
11
12
[error] HexoError: Process failed: _posts/OS-X-Yosemite.md
TypeError: Cannot read property '1' of undefined
at /usr/local/lib/node_modules/hexo/lib/plugins/filter/backtick_code_block.js:32:27
at String.replace (native)
at module.exports (/usr/local/lib/node_modules/hexo/lib/plugins/filter/backtick_code_block.js:14:31)
at /usr/local/lib/node_modules/hexo/lib/post/render.js:77:9
at iterate (/usr/local/lib/node_modules/hexo/node_modules/async/lib/async.js:149:13)
at Object.async.eachSeries (/usr/local/lib/node_modules/hexo/node_modules/async/lib/async.js:165:9)
at async.series.options (/usr/local/lib/node_modules/hexo/lib/post/render.js:76:13)
at /usr/local/lib/node_modules/hexo/node_modules/async/lib/async.js:610:21
at /usr/local/lib/node_modules/hexo/node_modules/async/lib/async.js:249:17
at iterate (/usr/local/lib/node_modules/hexo/node_modules/async/lib/async.js:149:13)

经排查发现是因为在使用 Markdown 代码区块语法后面多了一个空格

生成 HTML 成功

1
2
3
```#这里没有空格
code
...

生成 HTML 出错

1
2
3
``` #前面多了一个空格
code
...

完。

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 环境到这。

OS X Yosemite 安装并配置 Oh My Zsh & Homebrew & Vim

Oh My Zsh

安装 Oh My Zsh

1
$ curl -L http://install.ohmyz.sh | sh

配置 ~/.zshrc ,增加如下配置

1
2
3
4
5
6
7
8
9
10
11
alias cls="clear"
alias ll="ls -l"
alias la="ls -a"
alias vi="vim"
alias -s c=vi # 使用 Vim 打开 .c 文件,以下类似
alias -s py=vi
alias -s rb=vi
alias -s js=vi
alias -s css=vi
alias -s html=vi
alias -s txt=vi

Homebrew

安装 Homebrew

1
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

z

z 类似于 autojump,安装 z

1
$ brew install z

配置 z ,在 ~/.zshrc 中增加

1
. /usr/local/Cella/z/1.8/etc/profile.d/z.sh
1
$ source ~/.zshrc

Vim

安装 Vim 插件管理插件 Vundle

1
$ git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim

配置 ~/.vimrc ,如果没有 ~/.vimrc 文件新建一个即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
syn on "语法支持
set ai "自动缩进
set bs=2 "在insert模式下用退格键删除
set showmatch "代码匹配
set laststatus=2 "总是显示状态行
set expandtab "以下三个配置配合使用,设置tab和缩进空格数
set shiftwidth=4
set tabstop=4
set cursorline "为光标所在行加下划线
set number "显示行号
set autoread "文件在Vim之外修改过,自动重新读入
set ignorecase "检索时忽略大小写
set fileencodings=uft-8 "使用utf-8或gbk打开文件
set hls "检索时高亮显示匹配项
set helplang=cn "帮助系统设置为中文
set foldmethod=syntax "代码折叠
set nocompatible " be iMproved, required
filetype off " required
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'gmarik/Vundle.vim'
Plugin 'Lokaltog/vim-powerline'
Plugin 'scrooloose/nerdtree'
Plugin 'kien/ctrlp.vim'
Plugin 'tpope/vim-surround'
Plugin 'ervandew/supertab'
Plugin 'godlygeek/tabular'
Plugin 'colorselector'
Plugin 'ap/vim-css-color'
Plugin 'davidhalter/jedi-vim'
call vundle#end() " required
filetype plugin indent on " required
插件介绍

Powerline: 状态栏

NERDTree: 目录结构浏览

CtrlP: 搜索并打开文件

Surround: 修改配对符号

SuperTab: 上下文提示

Tabular: 文本对齐

ColorSelector: Vim 配色

css-color: 显示 CSS 色码所代表的颜色

Jedi-Vim: Python 代码补全

Vundle 命令在 Vim 中使用

:PluginList 显示配置中的插件

:PluginInstall 安装 ~/.vimrc 中配置的插件

:PluginSearch [name] 根据插件名称搜索插件

:PluginClean 清除未使用的插件