nginx+uwsgi+supervisor+ubuntu部署Flask项目

本文介绍了如何在Ubuntu系统中使用nginx、uwsgi和supervisor部署Flask项目。首先,讲解了nginx作为HTTP服务器的角色,接着介绍了uwsgi作为Python应用服务器如何处理Flask应用,并通过配置文件结合nginx运行。此外,还阐述了supervisor作为进程管理工具,用于确保uwsgi服务的稳定性。最后,解释了web服务器、应用服务器和web应用框架的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

nginx:一个http服务器,用来接收用户的请求。

uwsgi:用来处理python代码的应用服务器。

supervisor:这个不是必须的,但是为了让我们的网站运行更加稳定,在出现uwsgi异常退出的时候,supervisor可以让这个服务马上起来。即作为守护进程使用。

nginx使用:

1.在ubuntu下使用以下命令进行安装:

sudo apt-get install nginx

2.启动、重启、停止:

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

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

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

uwsgi使用:

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

sudo pip install uwsgi

2.让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项目的首页。

3.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

4.使用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应用框架。

更多干货内容,欢迎关注公众号:知了python

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值