uwsgi+nginx+virtualvenv+https部署的flask后端项目


前言

近期用uwsgi+nginx在虚拟环境部署了flask的项目,于是做了这篇文章作为一个回顾,并在最后讲出遇到的一些坑


我用的环境是centos7,python版本为3.7.8

一、虚拟环境

1.安装并创建虚拟环境

pip install virtualenv

(安装完成后创建虚拟环境)
 virtualenv -p /usr/local/python/bin/python3.7 venv
 !!注意,我这里的-p是切换到当前项目目录下,如果没切换到项目的目录下注意修改, venv为虚拟环境的名字用的是python3.7的环境
 如果不知道python环境在哪,可以用whereis python 查看

2.激活虚拟环境

 source venv/bin/activate
 关闭虚拟环境的命令:deactivate

二、安装uwsgi

在这里插入图片描述
安装完成后查看uwsgi自带的版本

在这里插入图片描述

二、配置uwsgi

在项目路径下创建uwsgi.ini文件
	[uwsgi]
	; http = 0.0.0.0:8091
	socket = 0.0.0.0:8081
	callable = app
	chdir = /root/pro1
	home = /root/pro1/venv
	; daemonize = /root/test/uwsgi.log
	pidfile = uwsgi.pid
	wsgi-file =  main.py 
	processes = 4
	threads = 8
	buffer-size = 32768
	master = true

!!注意,socket是后面配置nginx相关的,如果要直接访问配置http即可,home目录为上面创建的虚拟环境的目录 wsgi-file为主启动文件的名称。

三、启动uwsgi

1.创建flask文件

@app.route('/')
def index():
    return 'success'

2.启动uwsgi

(必须先启动虚拟模式)
	uwsgi --ini uwsgi.ini
	启动完成后即可访问配置的http,用自己服务器外网ip+端口
	(注意配置问题,最后会讲我在配置这个文件踩到的坑)

四、配置nginx

只需要在server里加入

    location / {
        include /etc/nginx/uwsgi_params;
        uwsgi_pass 0.0.0.0:8081;
    }

注意:这里的uwsgi_pass和uwsgi.ini配置的socket要一致

我这边是一个小程序的开发,需要用到https
在server里配好ssl后在加入上面的location即可

四、把uwsgi加入到开机自启

1.首先找到uwsgi的安装目录
whereis uwsgi

我的目录是
在这里插入图片描述
2.创建配置文件

cd /etc/systemd/system/ 

touch server_uwsgi.service

3.添加配置信息
vim server_uwsgi.service
然后填入下列信息

[Unit]
Description=HTTP Interface Server
After=syslog.target
 
[Service]
KillSignal=SIGQUIT
ExecStart=/usr/local/python/bin/uwsgi --ini /root/pro1/uwsgi.ini
#注意,重点:--ini 前面的路径就是刚才获取到的uwsgi的路径,--ini后面的路径是你的uwsgi配置文件的路径
Restart=always
Type=notify
NotifyAccess=all
StandardError=syslog
 
[Install]
WantedBy=multi-user.target

4.将服务加到系统中

systemctl enable /etc/systemd/system/server_uwsgi.service

到了这一步基本上就ok了,用下列命令即可操作uwsgi

systemctl stop server_uwsgi.service 关闭uwsgi服务
systemctl start server_uwsgi.service 开启uwsgi服务
systemctl restart server_uwsgi.service 重启uwsgi服务

可能遇到的问题

配置好uwsgi后启动发现报了 encoding 的问题,一般就是你的虚拟环境home目录配错了,修改一下就可以了
注意看虚拟环境创建的python版本和uwsgi自带python的版本

不过我遇到的比较大的坑就是导包的问题
我在本地通过pip freeze > requirements.txt命令获取原项目所有的包,然后再虚拟环境下
pip install -r requirements.txt安装所有的包,发现导入的包不一致
查看虚拟环境的python版本和本地环境的python版本都是一致的。
查了一下csdn发现这种方式导入的包是环境中所有依赖的包
所以推荐使用 pipreqs
安装
pip install pipreqs
导出
pipreqs . --encoding=utf8 --force

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flask是一个基于Python的轻量级Web框架,它提供了简单易用的工具来构建Web应用程序。Flask具有灵活的设计,可以根据需求进行扩展和定制。它支持RESTful风格的API开发,并且具有良好的可扩展性,适用于开发小型到中型的Web应用。 uWSGI是一个Web服务器和应用服务器,它可以将Web应用程序从框架中分离出来,并通过WSGI协议与框架进行通信。它支持高并发和负载均衡,并且具有内置的缓存机制和性能监控。uWSGIFlask配合使用可以提高Web应用程序的性能和稳定性。 Nginx是一个高性能的开源HTTP服务器和反向代理服务器。它可以处理大量并发连接,并能有效地分发请求到后端服务器。Nginx的反向代理功能可以将请求转发给uWSGI服务器,然后由uWSGI服务器处理Flask应用程序的逻辑。 使用FlaskuWSGINginx的组合可以实现一个高性能的Web应用程序架构。首先,Flask用于开发Web应用程序的逻辑和路由。然后,uWSGI作为应用程序服务器,将Flask应用程序加载到内存中,并以WSGI协议与Nginx进行通信。最后,Nginx作为前端服务器,通过负载均衡和反向代理将请求分发到uWSGI服务器。 这种架构可以提供高并发、可扩展和稳定的Web应用程序。Flask提供了优雅的开发方式,uWSGI处理应用程序的逻辑和性能优化,而Nginx作为前端服务器提供高性能的负载均衡和反向代理。整个架构可以根据需求进行灵活的配置和扩展,以满足不同规模的Web应用程序的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值