🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
快速入门会展示如何部署简单的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服务器后面。