flask+uwsgi+nginx+supervisor模式部署

部署flask项目,我们一般使用uwsgi+nginx+supervisor的模式,以下对这些软件之间的关系进行解释:

nginx:一个http服务器,用来接收用户的请求。
uwsgi:用来处理python代码的应用服务器。
supervisor:这个不是必须的,但是为了让我们的网站运行更加稳定,在出现uwsgi异常退出的时候,supervisor可以让这个服务马上起来。即作为守护进程使用。
nginx使用:

在ubuntu下使用以下命令进行安装:
sudo apt-get install nginx

启动、重启、停止:
启动:sudo service nginx start
重启:sudo service nginx restart
停止:sudo service nginx stop

测试nginx是否可用:在浏览器中,输入该虚拟机的ip地址。如果出现欢迎界面,说明启动成功,否则启动失败。

编写和添加配置文件:由用户编写的配置文件,放在/etc/nginx/conf.d文件夹下,配置示例,将在后面讲解。
uwsgi使用:

uwsgi的安装:因为uwsgi是使用python编写的。因此可以通过pip进行安装。

sudo pip install uwsgi

让uwsgi运行flask项目:在flask项目所在的目录,比如项目名称叫做mysite,那么执行以下命令可以把flask拉起来:

uwsgi –http :8000 –wsgi-file /opt/mysite/mysite.py -callable app -H /home/xiaotuo/py2-env
然后在浏览器中输入http://ip_address:8000/可以访问到flask项目的首页。

nginx+uwsgi配合运行flask项目:两者结合起来使用,原理就是使用nginx来接收用户的请求,然后nginx通过http或者socket的方式与uwsgi进程间通信,把请求转发给uwsgi进行处理。按照以下步骤进行部署:

来到/etc/nginx/conf.d目录下,在这个目录下创建一个配置文件,名字随便取,跟你项目名保持一致即可。比如mysite.conf,然后在里面添加如下配置信息:

配置nginx与uwsgi的通信方式和名称,mysite就是名称

upstream mysite {
# nginx使用socket的方式与uwsgi进行通信
# 这里指向你项目的目录下的socket文件,
# 这个socket文件不需要单独创建,在运行的时候会自动创建。
server unix:///opt/mysite/mysite.sock;
}

配置服务器

server {
# 监听的端口号
listen 80;
# 域名或者本机的ip地址
server_name .example.com;
charset utf-8;
# 最大的上传大小
client_max_body_size 75M; # adjust to taste

# 访问根目录下的任何url的配置
location / {        
    # 指定访问哪个upstream
    uwsgi_pass  mysite;        
    # 包括uwsgi参数的文件
    include     /path/to/your/mysite/uwsgi_params;
}

}

写完配置文件后,使用以下命令测试配置文件语法是否正确:

sudo service nginx configtest

然后cd到项目目录中,使用以下命令运行uwsgi,uwsgi将会把该项目运行起来:

uwsgi –socket mysite.sock –wsgi-file /opt/mysite/mysite.py –callable app -H /home/xiaotuo/py2-env –chmod-socket=666

以上命令比较长,而且不容易记忆,因此uwsgi提供了一种使用配置文件的方式运行uwsgi,配置文件(假如名字是:mysite_uwsgi.ini)如下:

[uwsgi]

当前这个项目的路径

chdir = /opt/mysite

模块

module = mysite

python的虚拟环境

home = /home/xiaotuo/py2-env

是否启用mater模式

master = true

进程数

processes = 10

socket文件地址

socket = /opt/mysite/xt_site.sock

wsgi文件

wsgi-file = /opt/mysite/wsgi.py

wsgi文件中的app变量

callable = app

socket文件的权限

chmod-socket = 666

示例:
[uwsgi]chdir = /opt/mysite
home = /home/xiaotuo/py2-env
module = mysite
master = true
processes = 10
socket = /opt/mysite/mysite.sock
wsgi-file = /opt/mysite/mysite.py
callable = app
chmod-socket = 666

以后运行uwsgi项目,就只需要运行以下命令即可:

uwsgi –ini mysite_uwsgi.ini
使用supervisord运行uwsgi:Supervisor是一个用 Python写的进程管理工具,可以很方便的用来启动、重启、关闭进程(不仅仅是Python进程)。

安装:sudo pip install supervisor。

然后在当前目录下,创建一个supervisor的配置文件,比如取名supervisor.conf,里面的配置信息如下:

supervisor的程序名字

[program:mysite]

supervisor执行的命令

command=uwsgi –ini mysite_uwsgi.ini

项目的目录

directory = /opt/mysite

开始的时候等待多少秒

startsecs=0

停止的时候等待多少秒

stopwaitsecs=0# 自动开始
autostart=true

程序挂了后自动重启

autorestart=true

输出的log文件

stdout_logfile=/opt/mysite/log/supervisord.log

输出的错误文件

stderr_logfile=/opt/mysite/log/supervisord.err

[supervisord]

log的级别

loglevel=info

使用supervisorctl的配置

[supervisorctl]

使用supervisorctl登录的地址和端口号

serverurl = http://127.0.0.1:9001

登录supervisorctl的用户名和密码

username = admin
password = 123

[inet_http_server]

supervisor的服务器

port = :9001

用户名和密码

username = admin
password = 123

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

然后使用supervisor运行uwsgi:
supervisord -c supervisor.conf

使用supervisorctl管理supervisord:supervisor是一个C/S模型,跟redis一样,有一个服务器,也有一个客户端命令用来管理服务的,使用以下命令进入到命令界面:
supervisorctl -c supervisor.conf

指定的文件必须和supervisord服务端保持一致。 一些常用的命令有:
supervisorctl -c supervisor.conf

status # 查看状态
start program_name # 启动程序
restart program_name # 重新启动程序
stop program_name # 停止程序
reload # 重新加载配置文件
quit # 退出当前的客户端

也可在浏览器中,访问服务器的ip:port的方式,来用界面操作supervisorctl。比如以上配置中,我们配置了supervisorctl的serverurl和inet_http_server的port以及username和password,那么我们在浏览器中可以通过以下方式来操作supervisorctl:

web服务器和应用服务器以及web应用框架:

web服务器:负责处理http请求,响应静态文件,常见的有Apache,Nginx以及微软的IIS.
应用服务器:负责处理逻辑的服务器。比如php、python的代码,是不能直接通过nginx这种web服务器来处理的,只能通过应用服务器来处理,常见的应用服务器有uwsgi、tomcat等。
web应用框架:一般使用某种语言,封装了常用的web功能的框架就是web应用框架,flask、Django以及Java中的SSH(Structs2+Spring3+Hibernate3)框架都是web应用框架。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值