uWsgi 单独提供http server
uWsgi + nginx 单应用部署
uWsgi + nginx 通过emperor 模式实现多应用部署
简单flask 应用:
脚本目录:/ home / centos / my_project / flaskapp.py:
注意这里的app2
from flask import Flask
app2 = Flask(__name__)
@app2.route('/app/')
def index():
return "<span style='color:red'>I am app </span>"
if __name__ == "__main__":
app2.run(host="0.0.0.0", port=12345)
uWsgi 自身就能提供http server
配置文件目录:home / centos / my_project / http_uwsgi.ini:
[uwsgi]
http = :8088
master = true
porcesses = 4
threads = 2
chdir = /home/centos/my_project # chdir 将工作目录移动到chdir指向的目录
wsgi-file = flaskapp.py # 或者使用 module = myflaskapp
callable = app2 # wsgi app 应用中application的名称,如flaskapp.py中定义的 app (Flask(__name__))
uWsgi + nginx + flask 单应用部署
nginx 提供http server , nginx 通过uwsgi协议将请求转发给uWsgi, uWsgi 通过WSGI协议 与 wsgi app 交互,并将请求结果返回给nginx ,nginx 返回给客户端
uWsgi配置:
[uwsgi]
socket = 127.0.0.1:3031
master = true
porcesses = 4
threads = 2
chdir = /home/centos/my_project # chdir 将工作目录移动到chdir指向的目录
wsgi-file = flaskapp.py # 或者使用 module = myflaskapp
callable = app2 # wsgi app 应用中application的名称,如flaskapp.py中定义的 app (Flask(__name__))
nginx配置:
user centos;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-strealias
listen 80;
server_name 172.16.xx.xx;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:3031;
}
}
}
uwsgi 使用emperor模式 部署多个python应用
创建四个flask应用
# / home / centos / my_project / myflaskapp1.py:
from flask import Flask
app = Flask(__name__)
@app.route('/app/')
def index():
return "<span style='color:red'>I am app 1</span>"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=12345)
# / home / centos / my_project / myflaskapp2.py:
from flask import Flask
app = Flask(__name__)
@app.route('/app/')
def index():
return "<span style='color:red'>I am app 2</span>"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=12345)
# / home / centos / my_project / myflaskapp3.py:
from flask import Flask
app = Flask(__name__)
@app.route('/app/')
def index():
return "<span style='color:red'>I am app 3</span>"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=12345)
# / home / centos / my_project / myflaskapp4.py:
from flask import Flask
app = Flask(__name__)
@app.route('/app/')
def index():
return "<span style='color:red'>I am app 4</span>"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=12345)
创建4个.ini 文件
# home / centos / my_project / vassals / 80001.ini
[uwsgi]
socket = 127.0.0.1:8001
wsgi-file = myflaskapp1.py
master = true
callable = app
# home / centos / my_project / vassals / 8002.ini
[uwsgi]
socket = 127.0.0.1:8002
wsgi-file = myflaskapp2.py
master = true
callable = app
# home / centos / my_project / vassals / 8003.ini
[uwsgi]
socket = 127.0.0.1:8003
wsgi-file = myflaskapp3.py
master = true
callable = app
# home / centos / my_project / vassals / 8004.ini
[uwsgi]
socket = 127.0.0.1:8004
wsgi-file = myflaskapp4.py
master = true
callable = app
nginx 配置里同样需要4个server
user centos;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
sendfile on;
keepalive_timeout 65;
server {
listen 8091;
server_name 172.16.xx.xx;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8001;
}
}
server {
listen 8092;
server_name 172.16.xx.xx;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8002;
}
}
server {
listen 8093;
server_name 172.16.xx.xx;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8003;
}
}
server {
listen 8094;
server_name 172.16.xx.xx;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8004;
}
}
}
启动:
uwsgi --emperor /home/centos/my_project/vassals --vassal-set chdir=/home/centos/my_project
–vassal-set chdir=/home/centos/my_project 将会添加 -set chdir=/home/centos/my_project 到每个vassal中