Debian 6 (Squeeze)安装Nginx uWSGI

uWSGI服务器提供了一个非FastCGI方法用于使用nginx Web服务器部署Python应用程序。 与nginx结合,uWSGI提供极大的稳定性,灵活性和高性能。 但是,要部署具有uWSGI和nginx的应用程序,必须手动编译包含uwsgi模块的nginx。

安装uWSGI

首先执行以下命令来更新系统并安装uWSGI的依赖关系:

  1. apt-get update
  2. apt-get upgrade
  3. apt-get install build-essential psmisc python-dev libxml2 libxml2-dev python-setuptools

依顺序执行以下命令以下载和编译uWSGI:

  1. cd /opt/
  2. wget http://projects.unbit.it/downloads/uwsgi-0.9.6.5.tar.gz
  3. tar -zxvf uwsgi-0.9.6.5.tar.gz
  4. mv uwsgi-0.9.6.5/ uwsgi/
  5. cd uwsgi/
  6. python setup.py install

执行以下命令以创建系统用户来运行uwsgi进程:

  1. adduser –system –no-create-home –disabled-login –disabled-password –group uwsgi

执行以下命令以设置所需的文件权限:

  1. chown -R uwsgi:uwsgi /opt/uwsgi
  2. touch /var/log/uwsgi.log
  3. chown uwsgi /var/log/uwsgi.log

编译nginx及uWSGI模块

执行以下命令来下载和编译nginx及uwsgi模块。 如果您以前从Debian软件包安装了nginx,请在此时删除它们。

  1. apt-get install libpcre3-dev libssl-dev
  2. cd /opt/
  3. wget http://nginx.org/download/nginx-1.0.0.tar.gz
  4. tar -zxvf nginx-1.0.0.tar.gz
  5. cd /opt/nginx-1.0.0/
  6. ./configure –prefix=/opt/nginx –user=nginx –group=nginx –with-http_ssl_module
  7. make
  8. make install
  9. adduser –system –no-create-home –disabled-login –disabled-password –group nginx
  10. wget -O init-deb.sh http://www.linode.com/docs/assets/682-init-deb.sh
  11. mv init-deb.sh /etc/init.d/nginx
  12. chmod +x /etc/init.d/nginx
  13. /usr/sbin/update-rc.d -f nginx defaults
  14. /etc/init.d/nginx start

配置uWSGI

执行以下命令以下载init脚本来管理uWSGI进程,位于/etc/init.d/uwsgi:

  1. cd /opt/
  2. wget -O init-deb.sh http://www.linode.com/docs/assets/683-uwsgi-init-deb.sh
  3. mv /opt/init-deb.sh /etc/init.d/uwsgi
  4. chmod +x /etc/init.d/uwsgi

创建/etc/default/uwsgi文件用来存放Python应用程序的特定设置。 MODULE指定包含wsgi规范的Python模块的名称。 考虑下面的例子:
/etc/default/uwsgi:

  1. PYTHONPATH=/srv/www/example.com/application
  2. MODULE=wsgi_configuration_module

如果要部署“Hello World”应用程序,请将以下代码插入到/srv/www/example.com/application/wsgi配置module.py文件中:
/srv/www/example.com/application/wsgi_configuration_module.py:

  1. import os
  2. import sys
  3.  
  4. sys.path.append(‘/srv/www/example.com/application’)
  5.  
  6. os.environ[‘PYTHON_EGG_CACHE’] = ‘/srv/www/example.com/.python-egg’
  7.  
  8. def application(environ, start_response):
  9.     status = ‘200 OK’
  10.     output = ‘Hello World!’
  11.  
  12.     response_headers = [(‘Content-type’, ‘text/plain’),
  13.                         (‘Content-Length’, str(len(output)))]
  14.     start_response(status, response_headers)
  15.  
  16.     return [output]

执行以下命令使此初始化脚本可执行,确保WSGI在下一个重新启动后重新启动,并启动服务:

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

配置nginx

为uWSGI应用程序的站点创建类似于以下内容的nginx服务器配置:

  1. server {
  2.     listen   80;
  3.     server_name www.example.com example.com;
  4.     access_log /srv/www/example.com/logs/access.log;
  5.     error_log /srv/www/example.com/logs/error.log;
  6.  
  7.     location / {
  8.         include        uwsgi_params;
  9.         uwsgi_pass     127.0.0.1:9001;
  10.     }
  11.  
  12.     location /static {
  13.         root   /srv/www/example.com/public_html/static/;
  14.         index  index.html index.htm;
  15.     }
  16. }

所有以/static结尾的网址请求都会直接从/srv/www/example.com/public_html/static目录提供。 通过执行以下命令重新启动Web服务器:

  1. /etc/init.d/nginx restart