系统环境:Centos 5.8_64
相关站点:
Pcre: http://ftp.exim.llorien.org/pcre/
Nginx: http://nginx.org/download/nginx-1.4.1.tar.gz
Uwsgi: http://projects.unbit.it/downloads/uwsgi-1.4.9.tar.gz
Python: http://www.python.org/getit/
Mysql-Python: http://sourceforge.net/projects/mysql-python/files/mysql-python/1.2.3/
Django: https://www.djangoproject.com/download/
virtualenv: https://pypi.python.org/pypi/virtualenv#downloads
UWSGI 是一个快速的 纯C语言开发的 自维护的 对开发者友好的WSGI服务器 旨在提供专业的Python
web应用发布和开发,它更符合python web的标准协议 速度要比Fastcgi要快 性能更加稳定.
--------------------------------------------------------------------------------------
wget http://ftp.exim.llorien.org/pcre/pcre-8.32.tar.gz
wget http://nginx.org/download/nginx-1.4.1.tar.gz
wget http://projects.unbit.it/downloads/uwsgi-1.4.9.tar.gz
wget http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tgz
wget https://www.djangoproject.com/download/1.5.1/tarball/
wget http://sourceforge.net/projects/mysql-python/files/mysql-python/1.2.3/MySQL-python-1.2.3.tar.gz/download
wget http://mirrors.sohu.com/mysql/MySQL-5.1/mysql-5.1.68.tar.gz
wget http://www.dbasky.net/tool/python/setuptools-0.6c9.tar.gz
wget --no-check-certificate https://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.9.1.tar.gz
安装部署:
一:安装PCRE
yum install -y pcre-devel
tar zvfx pcre-8.32.tar.gz
cd pcre-8.32
./configure
make
make install
cd ..
二:安装Nginx
tar zvfx nginx-1.4.1.tar.gz
cd nginx-1.4.1
./configure --prefix=/usr/local/nginx-1.4.1 \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-pcre
make && make install
cd ..
groupadd develop -g 507
useradd -g develop www -u 2000
三:安装Python
tar zvfx Python-2.7.5.tgz
cd Python-2.7.5
./configure
make && make install
cd ..
四:安装相关依赖
tar zxvf mysql-5.1.68.tar.gz
cd mysql-5.1.68
./configure --prefix=/usr/local/mysql-5.1.68 \
--without-server \
--with-extra-charsets=all
make
make install
cd ..
echo "export PATH=/usr/local/mysql-5.1.68/bin:\$PATH" >> /etc/profile
source /etc/profile
echo "/usr/local/mysql-5.1.68/lib/mysql" > /etc/ld.so.conf.d/mysql.conf
ldconfig
tar zvfx setuptools-0.6c9.tar.gz
cd setuptools-0.6c9
python setup.py install
cd ..
五:安装Mysql-Python
tar zvfx MySQL-python-1.2.3.tar.gz
cd MySQL-python-1.2.3
python setup.py install
cd ..
六:安装Django
tar zvfx Django-1.5.1.tar.gz
cd Django-1.5.1
python setup.py install
cd ..
七:安装uWSGI
tar zvfx uwsgi-1.4.9.tar.gz
cd uwsgi-1.4.9
make
cp uwsgi /usr/bin
cd ..
ln -s /usr/local/lib/libpcre.so.1 /lib64
VirtualEnv用于在一台机器上创建多个独立的python运行环境,VirtualEnvWrapper为前
者提供了一些便利的命令行上的封装.
使用 VirtualEnv 的理由:
隔离项目之间的第三方包依赖,如A项目依赖django1.2.5,B项目依赖django1.3.
为部署应用提供方便,把开发环境的虚拟环境打包到生产环境即可,不需要在服务器上再折腾一翻.
tar zvfx virtualenv-1.9.1.tar.gz
cd virtualenv-1.9.1
python setup.py install
cd ..
八:平台环境配置
创建项目:
[root@CN-BJ-MT-02 ~]#mkdir -p /data/python_web
[root@CN-BJ-MT-02 python_web]django-admin.py startproject phone
如下说明创建成功:
[root@CN-BJ-MT-02 python_web]# tree phone/
phone/
|-- manage.py
`-- phone
|-- __init__.py
|-- settings.py
|-- urls.py
`-- wsgi.py
九:Nginx相关配置和uWSGI配置
配置Nginx
vi nginx.con
#================================================================================================
user www develop;
worker_processes 8;
error_log logs/error.log;
pid logs/nginx.pid;
worker_rlimit_nofile 60000;
events {
use epoll;
worker_connections 10000;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
keepalive_timeout 10;
client_header_buffer_size 32k;
large_client_header_buffers 4 128k;
client_max_body_size 10m;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 8k;
gzip_http_version 1.1;
gzip_types text/javascript text/plain application/x-javascript text/css application/xml;
include vhost/*.conf;
fastcgi_intercept_errors on;
}
#================================================================================================
vi vhost/django_default.conf
#================================================================================================
server {
listen 80;
server_name www.80sa.org;
access_log /data/logs/80sa.log;
location / {
root /data/python_web/phone/;
uwsgi_pass 127.0.0.1:9000;
include uwsgi_params;
}
}
#================================================================================================
vi uwsgi.xml
#================================================================================================
<uwsgi>
<!--监听位置 指定uwsgi的客户端将要连接的socket的路径uwsgi.sock不要创建会自动生成-->
<socket>127.0.0.1:9000</socket>
<listen>200</listen>
<master>true</master>
<!-- 开启32个线程 -->
<processes>32</processes>
<!-- 你的配置文件 -->
<module>phone_wsgi</module>
<profiler>true</profiler>
<enable-threads>true</enable-threads
<memory-report>true</memory-report>
<!--该应用所需要新增的PYTHONPATH,一般为创建Python应用的所在目录-->
<!--若上面得应用中调用了非PYTHONPATH里的模块,也可以在这里指定添加PATH,如应用根目录的phone下-->
<pythonpath>/data/python_web/phone</pythonpath>
<pythonpath>/data/python_web/</pythonpath>
<!-- 限制内存空间10240 -->
<limit-as>10240</limit-as>
<logdate>true</logdate>
<!--以守护进程模式启动,并指定log文件-->
<daemonize>/data/logs/phone_uwsgi.log</daemonize>
<!--指定运行的PID文件-->
<pidfile>/var/run/uswgi.pid</pidfile>
</uwsgi>
#================================================================================================
uwsgi 相关参数详解:
-s :指定端口
-w :指定模块名字
-p :并发4个线程.(-M -p 4)主控制线程+4个线程
-t :(-t 30)超过30秒的client直接放弃
--limit-as :(--limit-as 128)限制内存空间128M
-R :(-R 10000)服务超过10000个自动respawn重生
线上配置:
[root@CN-BJ-MT-02 phone]# cat uwsgi.xml
<uwsgi>
<socket>0.0.0.0:9000</socket>
<listen>100</listen>
<master>true</master>
<processes>32</processes>
<module>phone.wsgi</module>
<profiler>true</profiler>
<memory-report>true</memory-report>
<pythonpath>/data/python_web/phone</pythonpath>
<pythonpath>/data/python_web/</pythonpath>
<limit-as>100</limit-as>
<logdate>true</logdate>
<daemonize>/data/logs/phone_uwsgi.log</daemonize>
<pidfile>/var/run/uswgi.pid</pidfile>
</uwsgi>
/usr/bin/uwsgi -x /data/python_web/phone/uwsgi.xml