快速入门会展示如何部署简单的WSGI程序和常用的web框架。
这里的Python指的是CPython,如果想用PyPy,则需要使用特定的插件[The PyPy plugin](https://uwsgi-docs.readthedocs.io/en/latest/PyPy.html),Jython支持尚在开发中。
>[info] 该入门文档适用于uWSGI 1.4及以上版本。旧版本已不再维护,且会有很多bug
**安装uWSGI及Python支持**
>[warning]当你开始学习uWSGI时,尽量使用官方源码编译:如果使用分发系统提供的包,可能会让你很头疼。当你慢慢深入明了的时候,你可以使用模块化的编译包(就像你的分发系统提供的包)。
uWSGI是一个巨大的C程序,所以你需要C编译器(比如gcc或者clang),以及Python开发头文件。
在以Debian系统为基础的发行版系统上:
~~~
apt-get install build-essential python-dev
~~~
这一行命令就够了。
然后,你可以使用多种方式,为Python安装uWSGI:
* 通过pip
~~~
pip install uwsgi
~~~
* 使用网络安装程序
~~~
curl http://uwsgi.it/install | bash -s default /tmp/uwsgi
~~~
这种方式会将uWSGI二进制库安装在```/tmp/uwsgi```目录下,你可以随意更改它。
* 下载一个源码tar文件【tarball】,然后进行编译【make】
~~~
wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz
tar zxvf uwsgi-latest.tar.gz
cd <dir>
make
~~~
在编译之后,将在当前文件夹下生成一个```uwsgi```二进制库【binary】
这里并没有介绍通过分发包安装的方法(可能无法满足所有人的口味),但是通用规则都是适用的。
当使用分发包来学习这个入门文档时,你可能要考虑一件事情,就是你的分发版本很可能已经以模块化的方式构建过uWSGI(即每一个功能都是一个不同的插件,且都需要被加载)。为了完成该入门,你需要在第一个系列样例中,预先加上```--plugin python,http```,而当HTTP路由被移除时,你则要预先加上```--plugin python```。(如果这对你没有意义,那就直接往下阅读)。
**第一个WSGI程序**
让我们开始一个简单的“Hello World”:
~~~
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
~~~
保存为``` foobar.py ```
可以看出,它由一个Python方法组成。它的名字是“application“,是因为这是uWSGI Python加载器会寻找的默认方法(但你也可以定制它)。
**部署在HTTP 9090端口**
现在启动uWSGI,运行一个HTTP服务器/路由器,将请求传输给WSGI程序:
~~~
uwsgi --http :9090 --wsgi-file foobar.py
~~~
就这样。
>[success] 当你有一个前端服务器,或者正在做一些基准测试时,不要使用``` --http ```,选用``` --http-socket ```代替。继续阅读可以知道原因。
**添加并发和监控功能**
接下来第一个改进,你可能希望是添加并发(默认情况下,uWSGI启动时只有一个进程和一个线程)。
你可以使用``` --processes ```选项添加更多的进程,或者使用``` --threads```添加多个线程。甚至你可以2个都使用。
~~~
uwsgi --http :9090 --wsgi-file foobar.py --master --processes 4 --threads 2
~~~
这个命令会产生4个进程,每个进程有2个线程;1个主进程(当其它进程死亡时,它会负责重新产生进程);和HTTP路由器(像前面提到的那样)
一个重要的任务是监控。晓得到底发生了什么,在产品环境中是至关重要的。统计子系统允许你将uWSGI内部的数据统计导出为JSON:
~~~
uwsgi --http :9090 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191
~~~
向你的程序制造一些请求,然后telnet到9191端口,你会得到很多有趣的信息。你可能会想使用“uwsgitop”工具(只需要``` pip install uwsgitop```就可以安装它),这是一个类似于“top”命令的工具,用来监控实例。
>[warning]注意:
>将统计端口绑定到一个私有地址中(除非你知道你在做什么),否则任何人都可以访问它!
**放在一个专业的web服务器后面**
即使uWSGI HTTP路由器是可靠而且高性能的,但你也许还是想把应用放在一个功能完整的web服务器后面。