快速入門會展示如何部署簡單的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服務器后面。