1.安裝ubuntu有uwsgi的ppa:
?
1
2
3
add-apt-repository ppa:stevecrozz/ppa
apt-get update
apt-get install uwsgi
2. 用uwsgi代替mod_wsgi
Nginx 的整體配置這里不說了,假設(shè)已經(jīng)明白 Nginx的基本配置,那么uwsgi就類似這么配置:
?
1
2
3
4
location / {
include uwsgi_params
uwsgi_pass 127.0.0.1:9090
}
再比如django就是:
?
1
2
3
.......
from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()
然后運行uwsgi監(jiān)聽9090,其中-w后跟模塊名,也就是剛才配置的myapp
?
1
uwsgi -s :9090 -w myapp
運行網(wǎng)站發(fā)現(xiàn)已經(jīng)部署完成了。
3.uwsgi的參數(shù)
以上是單個project的最簡單化部署,uwsgi還是有很多令人稱贊的功能的,例如:
并發(fā)4個線程:
?
1
uwsgi -s :9090 -w myapp -p 4
主控制線程+4個線程:
?
1
uwsgi -s :9090 -w myapp -M -p 4
執(zhí)行超過30秒的client直接放棄:
?
1
uwsgi -s :9090 -w myapp -M -p 4 -t 30
限制內(nèi)存空間128M:
?
1
uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128
服務(wù)超過10000個req自動respawn:
?
1
uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128 -R 10000
后臺運行等:
?
1
uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128 -R 10000 -d uwsgi.log
4.為uwsgi配置多個站點
為了讓多個站點共享一個uwsgi服務(wù),必須把uwsgi運行成虛擬站點:去掉“-w myapp”加上”–vhost”:
?
1
uwsgi -s :9090 -M -p 4 -t 30 --limit-as 128 -R 10000 -d uwsgi.log --vhost
然后必須配置virtualenv,virtualenv是Python的一個很有用的虛擬環(huán)境工具,這樣安裝:
?
1
2
apt-get install Python-setuptools
easy_install virtualenv
然后設(shè)置一個/多個app基準環(huán)境:
?
1
virtualenv /var/www/myenv
應(yīng)用環(huán)境,在此環(huán)境下安裝的軟件僅在此環(huán)境下有效:
?
1
2
3
4
source /var/www/myenv/bin/activate
pip install django
pip install mako
...
最后配置nginx,注意每個站點必須單獨占用一個server,同一server不同location定向到不同的應(yīng)用不知為何總是失敗,估計也 算是一個bug。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
server {
listen 80;
server_name app1.mydomain.com;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9090;
uwsgi_param UWSGI_PYHOME /var/www/myenv;
uwsgi_param UWSGI_SCRIPT myapp1;
uwsgi_param UWSGI_CHDIR /var/www/myappdir1;
}
}
server {
listen 80;
server_name app2.mydomain.com;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9090;
uwsgi_param UWSGI_PYHOME /var/www/myenv;
uwsgi_param UWSGI_SCRIPT myapp2;
uwsgi_param UWSGI_CHDIR /var/www/myappdir2;
}
}
這樣,重啟nginx服務(wù),兩個站點就可以共用一個uwsgi服務(wù)了。