用WSGI发布flask到centos7.9

起因

想把自己的Flask或者Django网站,发布到服务器上,让大家都可以访问。网上搜的结果,要么是用Nginx+uWSGI,要么是用Nginx+Gunicorn。大名鼎鼎的Nginx我早有耳闻,那么两位俩玩意是啥呢。

WSGI是什么

uwsgi是Nginx和web框架(比如flask和Django)之间的桥梁。Nginx处理静态文件非常优秀,却不能直接与我们的Python Web应用程序进行交互。flask或Django的测试服务器,处理并发效果很差。

为了解决Web 服务器与应用程序之间的交互问题,就出现了Web 服务器与应用程序之间交互的规范。最早出现的是CGI,后来又出现了改进 CGI 性能的FasgCGI,Java 专用的 Servlet 规范。在Python领域,最知名的就是WSGI规范了。

这其中,尤其以为uWSGI和Gunicorn最为有名

各自的优劣

那问题来了,二选一该选谁呢。

uwsgi目前好像只支持到比较低的版本,比如python3.8。这是因为我在python3.10的环境安装总是报错。后来网上冲浪了很久得出的答案。

Gunicorn,不支持windows。但好处是他安装简单,因为不依赖其他库。

pip3 install gunicorn

gunicorn启动flask

# 在虚拟环境安装一遍
pip install gunicorn #安装gunicorn
ln -s /usr/local/python3/bin/gunicorn /usr/bin/gunicorn #配置环境变量

启动项目

# equivalent to 'from hello import app'
$ gunicorn -w 4 'main:app'

# equivalent to 'from hello import create_app; create_app()'
$ gunicorn -w 4 'main:create_app()'

可以指定端口

gunicorn -w 4 -b 0.0.0.0:8080 'main:create_app()' #main文件下的app变量

用gunicorn关闭

# 查看进程
pstree -ap|grep gunicorn
# 如果无法使用pstree命令,请yum安装
yum -y install psmisc

假如搜索结果如下:

在这里插入图片描述

通过如下命令杀进程:

kill -HUP 76537

实际操作

下面举例说明如何操作

环境

centos7.9/Mysql8.0/Python3.10.10

首先默认以上都已OK,然后创建一个虚拟环境

mkdir /opt/my_pj
cd /opt/my_pj
python3 -m venv venv310
# 进入虚拟环境的bin目录
cd py310\bin
# 启动虚拟环境
source activate

上传代码

通过git也好,ftp工具也好,将项目上传。例如我的项目叫hanayo,然后安装项目依赖

pip install -r requirements.txt

当然还需要安装gunicorn

pip install gunicorn

然后通过gunicorn启动项目,这里是在8080端口运行

gunicorn -w 4 -b 0.0.0.0:8080 'hanayo:create_app()' #main文件下的app变量

这里我的代码中,hanayo是项目文件夹名,然后init文件中有create_app函数,这在Flask文档中好像叫工厂模式

Nginx简单设置

接下来设置nginx,yum安装的nginx,设置文件在/etc/nginx/nginx.conf

我这里设置在:/opt/nginx/conf/nginx.conf

server {
    listen 80;
    server_name _;

    location / {
        proxy_pass http://127.0.0.1:8080/;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Prefix /;
    }
}

然后刷新nginx

nginx -s reload

然后就大工告成啦!可以看到我的网站已经可以访问了
在这里插入图片描述
参考:

https://pythondjango.cn/python/tools/6-uwsgi-configuration/
https://dormousehole.readthedocs.io/en/latest/deploying/nginx.html
https://dormousehole.readthedocs.io/en/latest/deploying/gunicorn.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/440900.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用pyqt5实现的滑动开关(有动画效果)

1、效果展示 2、控件源码 import sys from PyQt5.QtCore import Qt, QRect, QPoint, QVariantAnimation from PyQt5.QtGui import QPainter, QColor from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayoutclass SwitchButton(QWidget):def __init__(self, parent=N…

华为设备小型园区网方案(有线+无线+防火墙)

(一)配置有线部分 1.配置LSW2 (1)创建相关vlan [LSW2]vlan batch 10 3000 (2)配置连接LSW1的Eth-Trunk1,透传VLAN 10 3000 [LSW2]int Eth-Trunk 1 [LSW2-Eth-Trunk1]port link-type trunk [LSW2…

关于Linux上的$ORIGIN解说

1、Linux RPATH & $ORIGIN 许多现代C / C 项目都利用Autotools创建GNU构建系统,例如 根据平台生成make文件。 可执行文件(二进制文件)在生成/编译过程中生成,并且可以在执行编译的计算机上本地执行。 但是,如果将…

centos 系统 yum 无法安装(换国内镜像地下)

centos 系统 yum 因为无法连接到国外的官网而无法安装,问题如下图: 更换阿里镜像,配置文件路径:/etc/yum.repos.d/CentOS-Base.repo(如果目录有多余的文件可以移动到子目录,以免造成影响) bas…

【PyTorch][chapter 22][李宏毅深度学习]【无监督学习][ WGAN]【理论一】

简介: 2014年Ian Goodfellow提出以来,GAN就存在着训练困难、生成器和判别器的loss无法指示训练进程、生成样本缺乏多样性等问题。从那时起,很多论文都在尝试解决,但是效果不尽人意,比如最有名的一个改进DCGAN依靠的是对…

B端系统优化,可不是换个颜色和图标,看看与大厂系统的差距。

Hi,我是贝格前端工场,优化升级各类管理系统的界面和体验,是我们核心业务之一,欢迎老铁们评论点赞互动,有需求可以私信我们 一、不要被流于表面的需求描述迷惑。 很多人找我们优化系统界面,对需求总是轻描淡…

开源模型应用落地-工具使用篇-Ollama(六)

一、前言 在AI大模型百花齐放的时代,很多人都对新兴技术充满了热情,都想尝试一下。但是,实际上要入门AI技术的门槛非常高。除了需要高端设备,还需要面临复杂的部署和安装过程,这让很多人望而却步。不过,随着…

设计模式大题做题记录

设计模式大题 09年 上半年: 09年下半年 10年上半年 10年下半年 11年上半年 11年下半年 12年上半年 12年下半年 13年上半年 13年下半年

数据结构——lesson7二叉树 堆的介绍与实现

前言💞💞 啦啦啦~这里是土土数据结构学习笔记🥳🥳 💥个人主页:大耳朵土土垚的博客 💥 所属专栏:数据结构学习笔记 💥对于数据结构顺序表链表有疑问的都可以在上面数据结…

计算机中丢失缺少mfc100.dll文件该如何解决?

当你打开某个应用程序时,有时候会遇到一个“mfc100.dll丢失”或找不到mfc100.dll的错误信息提示。这种情况表明你的计算机缺少一个名为mfc100.dll的动态链接库文件。这个文件是由Microsoft VC 2010 Redistributable Package提供的,它是一组可重用的组件&…

普通专线维护成本太高?不如试试SD-WAN专线

企业数字化转型的加速,对于网络连接的需求变得越来越迫切。然而,传统的普通专线维护成本高、部署周期长等问题逐渐凸显,而SD-WAN(软件定义广域网)专线却因其灵活性和成本效益而备受关注。本文将探讨普通专线和SD-WAN专…

idea2023和历史版本的下载

1.idea中文官网 idea官网历史版本下载(https://www.jetbrains.com.cn/idea/download/other.html)

配置与管理NFS服务器

配置与管理NFS服务器 NFS:即网络文件系统,只提供网络文件共享,不提供数据传输 作用:可以是用户在异构网络操作系统之间进行文件系统共享 概述:客户机与服务器之间可以共享文件,但不可数据传输功能&#…

蓝桥杯-最长递增

思路及代码详解:(此题为容易题) #include <iostream> using namespace std; int main() {int a[1000]{0};int n,temp;int num0;int count0;cin>>n;for(int i0;i<n;i){cin>>a[i];}//输入数据tempa[0];//设置一个临时比较的存储变量for(int i1;i<n;i){i…

md5绕过

文章目录 \\和\\\md5数组绕过科学计数法绕过双md加密md5碰撞Hash长度攻击 下面会以同一道题给大家演示&#xff1a; (题目来源与nssctf) 和 在php代码中我们会看到和&#xff0c;虽然两个都是表示相等&#xff0c;但是在细节上会有所部区别 &#xff1a;是弱比较&#xff0c;只…

C++错误总结(1)

1.定义函数类型时&#xff0c;如果没有返回值&#xff0c;用void void swap(int &x, int &y){ int tem x; x y; y tem; } 2.输入时&#xff0c;不加换行符 cin >> a >> b >> c >> endl ;(红色标记的是错误的部分) 3.【逆序出入…

王道机试C++第 4 章 字符串:字符串内容详解及三个小程序 Day29

第 4 章 字符串 本章介绍一种基础数据类型——字符串&#xff0c;并且介绍一些字符串处理的方法及字符串匹配的方法。虽然字符串的内容非常基础&#xff0c;但是十分重要。希望读者能够好好学习本章的内容&#xff0c;为此后的学习打下良好的基础。 4.1 字符串内容详解 由于 …

Vue事件处理:.passive修饰符与应用场景

.passive修饰符 passive这个修饰符会执行默认方法。你们可能会问&#xff0c;明明默认执行为什么会设置这样一个修饰符。这就要说一下这个修饰符的本意了。 浏览器只有等内核线程执行到事件监听器对应的JavaScript代码时&#xff0c;才能知道内部是否会调用preventDefa…

蓝桥杯练习题——归并排序

1.火柴排队 思路 1.求最小值的时候&#xff0c;可以直接按升序排序&#xff0c;这样得到的值就是最小值 2.求最小交换次数的时候&#xff0c;不能直接排序&#xff0c;因为只能交换相邻的数&#xff0c;只需要知道他们的相对大小&#xff0c;所以可以先用离散化&#xff0c;把…

C及C++每日练习(3)

选择题&#xff1a; 1.以下程序的输出结果是&#xff08;&#xff09; #include <stdio.h> main() { char a[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, *p; int i; i 8; p a i; printf("%s\n", p - 3); } A.6 B. 6789 C. 6 D.789 对于本题&#xff0…