centos怎么使用Nginx部署flask应用

发布时间 - 2023-05-21 00:00:00    点击率:

环境准备

python包安装工具pip : sudo apt-get install pip
virtualenv:为了避免系统环境与应用环境之间的冲突,使用虚拟环境来安装应用的依赖,virtualenv可以为每个python应用创建独立的开发环境,安装方式:sudo pip install virtualenv

虚拟环境使用

flask项目地址:/usr/local/flasky,只需要在项目地址下运行指令:

virtualenv venv

约定俗成一般使用“venv”作为虚拟环境的名称,这样我们就创建了一个虚拟环境的文件夹venv如下图红框所示:

 

接下来激活虚拟环境,只用指令

source venv/bin/activate

 

激活虚拟环境后,命令行抬头会有(venv)标识,仅需虚拟环境后,一切安装python的操作都会讲包和引用装在虚拟环境中,不会影响全局的python环境

退出虚拟环境的指令,直接敲:

deactivate

即可退出虚拟环境

配置flask应用环境

flask应用开发的时候,会应用到非常多的模板,“狗书”中有介绍一种比较方便的方式,直接把开发环境的flask依赖等导出为一个txt文件,然后在centos的虚拟环境中使用相应指令根据这个txt文件安装会非常方便。

pip freeze >requerements.txt

 该指令导出一个文件名为requirements.txt的文本,里面的内容如下图所示

 

然后centos中使用以下指令

pip install -r requerments.txt

这样就会在虚拟环境中安装一个与开发环境一致的副本了。
注意一定要在虚拟环境中使用批量安装指令,不然就安装到全局去了,后果还是比较蛋疼的。

安装uwsgi

flask的实际生产运行环境选择不多,比较成熟的是【gunicorn】和【uwsgi】,这里推荐一本书董伟明的《python web开发实战》里面有讲这两种部署。

以下内容来自百度百科:

uwsgi是一个web服务器,它实现了wsgi协议、uwsgi、http等协议。nginx中httpuwsgimodule的作用是与uwsgi服务器进行交换。wsgi是一种web服务器网关接口。它是一个web服务器(如nginx,uwsgi等服务器)与web应用(如用flask框架写的程序)通信的一种规范。
安装指令如下,注意一定要保证已经进入了虚拟环境并激活:

pip install uwsgi

不需要使用sudo ,因为virtualvenv没有权限要求。

上传项目文件

博主使用的linux连接工具是xshell,在之前的一篇文章中有讲如何上传文件到linux主机,这里不再详细说明,展示一下大概的项目结构以及启动文件manage.py

 

tree命令可以以树形图的形式展示文件结构,可以赋予参数设置树的深度,这里博主展示了2层
安装命令:

sudo apt-get install tree

manage.py代码如下

#coding=utf-8
#!/usr/local/flasky/venv python
'''
created on 2017/11/9
@author: savitar丶
project:
'''
import os
from app import create_app
from flask_script import manager, shell
app = create_app(os.getenv('flask_config') or 'default')
manager = manager(app)

def make_shell_context():
 return dict(app=app)
manager.add_command("shell", shell(make_context=make_shell_context))
@manager.command
def deploy():
 """run deployment tasks."""
 pass
if __name__ == '__main__':
 manager.run()
 #app.run()

命令行运行flask项目

python manage.py runserver

以上命令一般都是在开发环境进行调试的时候使用,或者注释掉“manager.run()”,使用“app.run()”,后者可以直接在pycharm中执行项目,这里不再详细说明

配置uwsgi

我们直接在flask的根目录下面新建一个文件“config.ini”,使用的方式是配置启动。文件内容如下

[uwsgi]

# uwsgi 启动时所使用的地址与端口

socket = 127.0.0.1:5000

#虚拟环境目录 
home = /usr/local/flasky/venv

#指向网站根目录
chdir = /usr/local/flasky

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

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

#处理器数
processes = 4

#线程数
threads = 2

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

#设置uwsgi包解析的内部缓存区大小。默认4k

buffer-size = 32768

配置文件的执行方式,命令行输入指令:

uwsgi config.ini

或者不写配置文件(不建议这样做),直接命令行输入

uwsgi –socket 127.0.0.1:5000 –wsgi-file manage.py –callable app –process 4 –threads 2

这里的callable=app 这个app是manage.py程序文件内的一个变量,这个变量的类型是flask的application类

 

这里是因为博主已经配置好了项目自启动,已经有一个配置文件在运行了,大家按照正常流程配置就好。ctrl+c关闭程序,在实际项目中我们的服务器上可能会有多个项目在运行,我们需要应用随同服务器启动并作为后台服务运行才是实际项目需要,所以我们需要安装另一个工具来引导执行uwsgi

安装supervisor

supervisor可以同时启动多个应用,最重要的是当某个应用down掉的时候,他可以自动重启该应用,保证可用性。

sudo apt-get install supervisor

supervisor的全局配置文件在

 

打开该默认配置文件,最下面一行我们看到,该默认配置文件会从 /etc/supervisord/目录下面加载所有的配置文件

我们不需要修改默认的配置文件,只需要在/etc/supervisord/目录下新建一个配置文件(命名为flask_supervisor.conf)
 

该文件内容如下:

[program:flasky]
# 启动命令入口
command=/usr/local/flasky/venv/bin/uwsgi /usr/local/flasky/config.ini

# 命令程序所在目录
directory=/usr/local/flasky
#运行命令的用户名
user=root

autostart=true
autorestart=true
#日志地址
stdout_logfile=/usr/local/flasky/logs/uwsgi_super.log

这里command这一行代码看起来很长,其实就是之前我们的 “uwsgi config.ini”指令,这里使用的是绝对路径,保证命令和文件的准确性,大家也可以copy这一行代码出去执行,结果是ok的。autostart和autorestart参数保证了我们的应用可以一直保持启动的状态,即使是down掉了也能重启服务。

启动服务

sudo service supervisor start

终止服务

sudo service supervisor stop

安装nginx

nginx是轻量级,性能强,占用资源少,能很好的处理高并发的反向代理软件。

正向代理和反向代理

正向代理,作为一个媒介将互联网上获取的资源返回给相关联的客户端。代理和客户端在一个局域网,对于服务是透明的。反向代理,根据客户端的请求,从后端的服务器上获取资源,然后再讲这些资源返回给客户端。代理和服务器再一个局域网,对客户端是透明的。nginx是反向代理的最佳选择。

反向代理的作用

提高动态语言的io处理能力
加密和ssl加速
安全。
负载均衡
缓存静态内容
支持压缩。

nginx安装指令:

sudo apt-get install nginx

配置nginx

我们找到nginx的配置文件,不要修改默认的nginx.conf(路径 /etc/nginx/nginx.conf)文件,只需要在同样的文件夹下面新建一个文件夹(conf.d)然后在conf.d下面新建配置文件(flask_ng.conf)即可,如下图

 

flask_ng.conf文件内容如下

server {
  listen 80;
  server_name www.cloud-test.com; #公网地址

  location / {
  include  uwsgi_params;
  uwsgi_pass 127.0.0.1:5000; # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi 处理
  uwsgi_param uwsgi_pyhome /usr/local/flasky/venv; # 指向虚拟环境目录
  uwsgi_param uwsgi_chdir /usr/local/flasky; # 指向网站根目录
  uwsgi_param uwsgi_script manage:app; # 指定启动程序
  }
 }

启动nginx

sudo service nginx restart

然后浏览器直接访问服务器http://www.cloud-test.com地址,结果如下

 

小case,解决办法,直接修改本机hosts,绑定就好了,如下图所示

 

然后再去访问

 

然后也可以找自己的同事一起访问,看看并发请求,网站的运行情况,想来能解决在开发环境使用了host 0.0.0.0 也只能处理一个用户的请求的问题

查看应用的运行情况

supervisorctl 是 supervisord 的命令行客户端工具,使用的配置和 supervisord 一样,这里就不再说了。下面,主要介绍 supervisorctl 操作的常用命令:
输入命令 supervisorctl 进入 supervisorctl 的 shell 交互界面(还是纯命令行),可以看到应用的运行情况
就可以在下面输入命令了。:

help # 查看帮助
status # 查看程序状态
stop program_name # 关闭 指定的程序
start program_name # 启动 指定的程序
restart program_name # 重启 指定的程序
tail -f program_name # 查看 该程序的日志
update # 重启配置文件修改过的程序(修改了配置,通过这个命令加载新的配置)

也可以直接通过 shell 命令操作:

supervisorctl status
supervisorctl update


# centos  # nginx  # 配置文件  # 命令行  # 客户端  # 重启  # 只需  # 要在  # 如下图  # 的是  # 所示  # 会有 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 网页制作模板网站推荐,网页设计海报之类的素材哪里好?  北京网站制作的公司有哪些,北京白云观官方网站?  如何选择PHP开源工具快速搭建网站?  如何获取免费开源的自助建站系统源码?  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  北京企业网站设计制作公司,北京铁路集团官方网站?  Linux安全能力提升路径_长期防护思维说明【指导】  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  Laravel如何优化应用性能?(缓存和优化命令)  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  详解jQuery停止动画——stop()方法的使用  桂林网站制作公司有哪些,桂林马拉松怎么报名?  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  零服务器AI建站解决方案:快速部署与云端平台低成本实践  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  Laravel如何实现文件上传和存储?(本地与S3配置)  Laravel API资源类怎么用_Laravel API Resource数据转换  android nfc常用标签读取总结  PHP 500报错的快速解决方法  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  专业商城网站制作公司有哪些,pi商城官网是哪个?  微信小程序 闭包写法详细介绍  如何有效防御Web建站篡改攻击?  javascript中闭包概念与用法深入理解  Java遍历集合的三种方式  如何实现javascript表单验证_正则表达式有哪些实用技巧  javascript日期怎么处理_如何格式化输出  如何确认建站备案号应放置的具体位置?  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  Laravel如何与Pusher实现实时通信?(WebSocket示例)  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  Python文本处理实践_日志清洗解析【指导】  JavaScript Ajax实现异步通信  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  Swift中switch语句区间和元组模式匹配  如何用PHP快速搭建CMS系统?  Android利用动画实现背景逐渐变暗  如何在宝塔面板中修改默认建站目录?  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  如何在Windows虚拟主机上快速搭建网站?  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  零基础网站服务器架设实战:轻量应用与域名解析配置指南  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?