阿里云linux部署flask+uWSGI+Nginx

前言:用户上网的过程可以简单地理解为客户端(一般是浏览器)从服务端获取网站的信息,然后经过渲染呈现给用户。
Web服务器是运行在物理服务器或者云服务器上的一个后台服务程序,通过HTTP协议与客户端进行通信。当web服务器接收到请求时,会根据不同的请求进行对应的业务逻辑处理并生成相应的响应。如下图。
在这里插入图片描述
在这里,Web服务器可以是uWSGI服务器,它实现了server与application通信的WSGI协议,也包括了与客户端通信的HTTP协议。在Flask和Django这样的python web框架中,也集成了简单的WSGI服务器,一般用于服务器调试,但在生成环境中还是选择uWSGI服务器,可用于小规模网站。但为了网站的稳定性,一般需要引入更强大的web服务器,这里选择Nginx服务器,它支持高并发,支持百万级的TCP连接,部署简单,内存消耗低,而且是免费的。但Nginx是反向代理服务器,需要结合web应用服务器uWSGI使用,作用是将动态请求传递给uWSGI进行具体的应用逻辑处理,可以实现并发处理、安全、日志等强大的功能。
在这里插入图片描述

本次使用的是购买的阿里云轻量应用服务器,ubuntu系统,自带python2.7和3.5,使用的是python3.5。使用ECS服务器实践也可以。
1.创建项目文件夹

先创建一个项目文件夹my_flask

 mkdir my_flask

再进入my_flask文件夹

  cd my_flask
2.创建虚拟环境

安装python虚拟环境virtualenv,它可以隔离项目环境和系统全局环境,避免造成多个项目的环境混乱和冲突。

pip install virtualenv

现在已经在my_flask文件夹里,安装完后直接创建虚拟环境。

virtualenv venv

其中venv是新建虚拟环境包的名称,可以任意起名。
在这里插入图片描述
启动虚拟环境

source venv/bin/activate

检查一下环境是否切换到虚拟环境

pip –V

在这里插入图片描述
注意:如果发现路径不是指向新建的虚拟环境,而是系统环境,这可能是虚拟环境包被 移动过,导致路径变了。这时只需把原来的虚拟环境包删掉,重新创建虚拟环境包,再进入虚拟环境。

3.项目部署

1)通过支持SSH的FTP工具把flask项目project上传到my_flask项目文件夹中。
在这里插入图片描述
Project项目:
在这里插入图片描述
2)安装flask环境

pip install flask
pip install flask-script

安装完后在本地电脑中创建mange.py,再上传到my_flask文件夹中,用于管理flask项目。
写一个简易的mange.py:

from flask_script import Manager
from project.app import app

manager = Manager(app)

if __name__ == "__main__":
    manager.run()

详细的用法可以参考http://flask-script.readthedocs.org/en/latest/

4.uWSGI服务器部署

1)安装uWSGI
虚拟环境下执行pip install uwsgi
如果安装出错,可以尝试以下链接的解决方法。
参考:https://blog.csdn.net/weixin_42682982/article/details/90698724

2)启动uWSGI
测试uWSGI
uwsgi --version
如果启动出现uwsgi: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory,意思是找不到libpcre.so.1这个模块,而导致启动失败。
参考:https://blog.csdn.net/weixin_42682982/article/details/90698724

配置文件启动:
在本地创建config.ini配置文件,再上传到my_flask文件夹中,内容如下:

[uwsgi]

# uwsgi 启动时所使用的地址与端口
socket = 127.0.0.1:8001

# 指向网站目录
chdir = /home/my_flask/

# python 启动程序文件
wsgi-file = /home/my_flask/manage.py 

# python 程序内用以启动的 application 变量名
callable = app 

# 处理器数
processes = 4

# 线程数
threads = 2

#状态检测地址
stats = 127.0.0.1:9191

# 虚拟环境目录
home = /home/my_flask/venv

启动命令:

uwsgi config.ini

注意:目前的环境是虚拟环境,路径是my_flask文件夹下。
Ctrl+C关闭服务器。

5.Nginx服务器部署

1)安装Nginx

sudo apt-get install nginx

安装好后可以检验一下是否安装成功
检验命令:sudo nginx
浏览器访问:阿里云公网IP,即xx.xxx.xxx.xx
可以看到:
在这里插入图片描述
2) 创建配置文件flask_nginx.conf,上传到my_flask文件夹中,内容:

server {
   	listen  80;       #监听端口  
   	server_name X.X.X.X;    #服务器公网IP
   	location  /  {
      		include      uwsgi_params;
      uwsgi_pass   127.0.0.1:8001;  # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi 处理,8001对应uWSGI启动的端口
      uwsgi_param  UWSGI_PYHOME /home/my_flask/venv;  # 指向虚拟环境目录
      uwsgi_param  UWSGI_CHDIR   /home/my_flask;   # 指向网站根目录
      uwsgi_param  UWSGI_SCRIPT manage:app;   # 指定启动程序
   }
  }

3)链接配置文件并重新启动Nginx

#建立链接:
sudo ln –s  /home/my_flask/flask_nginx.conf  /etc/nginx/conf.d/
#重启服务:
sudo service nginx restart
#关闭服务:
sudo service nginx stop
#启动服务
sudo service nginx start

4)测试
通过命令uwsgi config.ini启动uWSGI就可以在浏览器用公网IP:xx.xx.xx.xx访问到网页了。
测试可以访问之后,Ctrl+C关掉uwsgi,进行下一步。
在这里插入图片描述
如果无法访问,可以检查一下uWSGI的启动情况。下面是启动正常,可访问的状态。
在这里插入图片描述

6.supervisor进程管理工具部署

Supervisor是一个用Python写的进程管理工具,可以很方便的用来启动,重启,关闭进程。在项目运行中,可以将uWSGI托管给supervisor,实现uWSGI后台服务运行。
1)安装
如果在虚拟环境中,请退出环境,使用命令deactivate。在外部环境安装:

pip install supervisor

在外部环境安转,是为了方便维护管理,不用每次都要进入虚拟环境,而且不会造成环境冲突。

2)添加配置文件
Supervisor的配置文件在/etc/supervisor/,如果找不到,我们需要使用命令产生配置文件supervisord.conf。如果找到了,直接跳到d步骤
  a. 先在/etc/下创建文件夹supervisor
  b. 执行命令 echo_supervisord_conf > /etc/supervisor/supervisord.conf
  c. 在/etc/supervisor/中找到supervisord.conf,并创建文件夹conf.d
  d. supervisord.conf文件,通过FTP工具下载并打开,在文件最下面添加两行:
  在这里插入图片描述
意思是supervisor服务启动时加载该配置文件,同时加载conf.d文件夹里所有后缀为.conf的配置文件。所以不需要修改原配置文件,只需在conf.d文件夹里添加配置文件即可。
  e. 在本地创建配置文件flask_supervisor.conf,上传到/etc/supervisor/conf.d/,内容如下:

[program:my_flask]
# 启动命令入口
command=/home/my_flask/venv/bin/uwsgi  /home/my_flask/config.ini
# 命令程序所在目录
directory=/home/my_flask
#运行命令的用户名
user=root
#自启动   
autostart=true
#自重启
autorestart=true
#日志地址
stdout_logfile=/home/my_flask/logs/uwsgi_supervisor.log  
stderr_logfile=/home/my_flask/logs/uwsgi_supervisor-err.log 

[supervisord]

因为supervisor不会自动创建文件夹,所以要回到my_flask文件夹中,创建logs文夹,用于储存supervisor日志文件。

3) 启动supervisor服务

supervisord -c /etc/supervisor/supervisord.conf

如出现:

Unlinking stale socket /var/run/supervisor.sock

输入:

sudo unlink /var/run/supervisor.sock

其他命令:

#修改/增加配置文件后更新配置
supervisorctl update
#重启
supervisorctl reload
#关闭
supervisorctl shutdown

4) 测试
查看是否运行

ps aux | grep supervisord
ps aux | grep uwsgi

客户端查看项目是否成功托管

supervisorctl

浏览器访问阿里云公网IP即可访问到网页。

至此,整个配置已经完成,项目结构如下:在这里插入图片描述
小白实践…

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值