Ubuntu10.04 nginx python WSGI-uWSGI 配置

设置 Hostname:

hostname
hostname -f

第一个命令是现实短hostname, 第二个名字显示全机器名(FQDN).

安装 uWSGI:

apt-get install build-essential psmisc python-dev libxml2 libxml2-dev python-setuptools

保证按照以下命令下载和编译 uWSGI:

cd /opt/
wget http://projects.unbit.it/downloads/uwsgi-0.9.6.5.tar.gz
tar -zxvf uwsgi-0.9.6.5.tar.gz
mv uwsgi-0.9.6.5/ uwsgi/
cd uwsgi/
python setup.py install

添加运行uwsgi 的用户:

adduser --system --no-create-home --disabled-login --disabled-password --group uwsgi

设置权限:

chown -R uwsgi:uwsgi /opt/uwsgi
touch /var/log/uwsgi.log
chown uwsgi /var/log/uwsgi.log

编译附带uWSGI功能的nginx:

apt-get install libpcre3-dev build-essential libssl-dev
cd /opt/
wget http://nginx.org/download/nginx-1.0.0.tar.gz
tar -zxvf nginx-1.0.0.tar.gz
cd /opt/nginx-1.0.0/
./configure --prefix=/opt/nginx --user=nginx --group=nginx --with-http_ssl_module
make
make install
adduser --system --no-create-home --disabled-login --disabled-password --group nginx
cp /opt/uwsgi/nginx/uwsgi_params /opt/nginx/conf/uwsgi_params
wget -O init-deb.sh http://library.linode.com/assets/686-init-deb.sh
mv init-deb.sh /etc/init.d/nginx
chmod +x /etc/init.d/nginx
/usr/sbin/update-rc.d -f nginx defaults
/etc/init.d/nginx start

配置 uWSGI

配置uWSGI 启动脚本, 位置在:/etc/init.d/uwsgi:

cd /opt/
wget -O init-deb.sh http://library.linode.com/assets/687-uwsgi-init-deb.sh
mv /opt/init-deb.sh /etc/init.d/uwsgi
chmod +x /etc/init.d/uwsgi

创建/etc/default/uwsgi 文件:

PYTHONPATH=/srv/www/www.bitbi.biz/application
MODULE=wsgi_configuration_module

如果你想部署一个"Hello World" 应用, 建立文件/srv/www/www.bitbi.biz/application/wsgiconfigurationmodule.py file:

File:/srv/www/www.bitbi.biz/application/wsgiconfigurationmodule.py

import os
import sys

sys.path.append('/srv/www/www.bitbi.biz/application')

os.environ['PYTHON_EGG_CACHE'] = '/srv/www/www.bitbi.biz/.python-egg'

def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World!'
    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)
    return [output]

uwsgi开机启动:

/usr/sbin/update-rc.d -f uwsgi defaults
/etc/init.d/uwsgi start

配置 nginx Server:

server {
    listen   80;
    server_name www.bitbi.biz bitbi.biz;
    access_log /srv/www/www.bitbi.biz/logs/access.log;
    error_log /srv/www/www.bitbi.biz/logs/error.log;

    location / {
        include        uwsgi_params;
        uwsgi_pass     127.0.0.1:9001;
    }

    location /static {
        root   /srv/www/www.bitbi.biz/public_html/static/;
        index  index.html index.htm;
    }
}

重启WEB服务:

/etc/init.d/nginx restart

额外的Application Servers

多节点python应用:

nginx 配置:

upstream uwsgicluster {
     server 127.0.0.1:9001;
     server 192.168.100.101:9001;
     server 192.168.100.102:9001;
     server 192.168.100.103:9001;
     server 192.168.100.104:9001;
}

server {
    listen   80;
    server_name www.bitbi.biz bitbi.biz;
    access_log /srv/www/www.bitbi.biz/logs/access.log;
    error_log /srv/www/www.bitbi.biz/logs/error.log;
    location / {
        include        uwsgi_params;
        uwsgi_pass     uwsgicluster;
    }

    location /static {
        root   /srv/www/www.bitbi.biz/public_html/static/;
        index  index.html index.htm;
    }
}

在这个例子里有一个本地应用节点和四个局域网节点