使用waitress与nginx在腾讯云上进行flask项目部署

1.首先介绍一下waitress与nginx是啥,

  1. Waitress:

    • 类别: Waitress 是一个用于 Python Web 应用程序的 WSGI(Web Server Gateway Interface)服务器。WSGI 是 Python Web 应用程序和 Web 服务器之间的标准接口,允许开发人员使用不同的框架编写 Web 应用程序,而不用担心与特定的服务器兼容性问题。
    • 用途: Waitress 主要用于运行 Python Web 应用程序,它可以作为一个独立的服务器来提供 Web 服务。
  2. Nginx:

    • 类别: Nginx 是一个高性能的开源 Web 服务器,也可以用作反向代理服务器、负载均衡器和 HTTP 缓存。
    • 用途: Nginx 主要用于托管静态内容、处理反向代理以及负载均衡。它是一个轻量级、高度可定制的服务器,被广泛用于提高 Web 应用程序的性能和可用性。

简而言之,Waitress 是一个专注于运行 Python Web 应用程序的服务器,而 Nginx 是一个通用的高性能 Web 服务器,适用于托管各种类型的 Web 内容和服务。在一些场景中,你可能会将 Waitress 与 Nginx 结合使用,其中 Nginx 充当反向代理服务器,而 Waitress 处理 Python Web 应用程序的请求。这样的组合可以充分利用 Nginx 的高性能和 Waitress 的专业性。

2.为什么使用Waitress而不是其他的服务器,例如uWSGI,gunicorn

这与我的开发环境与生产环境有关,我使用的环境皆是windows,而当我试图在windows上安装uWSGI,gunicorn时出现了错误,修改到最后还是放弃了这个方案

uWSGI的错误出现在安装它的时候

C:\Users\Administrator>pip install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/si
mple
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting uwsgiUsing cached https://pypi.tuna.tsinghua.edu.cn/packages/79/73/b5def500729e134d
1cb8dfc334e27fa2e9cfd4e639c1f60c6532d40edaed/uwsgi-2.0.23.tar.gz (810 kB)Installing build dependencies ... doneGetting requirements to build wheel ... errorerror: subprocess-exited-with-error× Getting requirements to build wheel did not run successfully.│ exit code: 1╰─> [19 lines of output]Traceback (most recent call last):File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\
site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 353,in <module>main()File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\
site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 335,in mainjson_out['return_val'] = hook(**hook_input['kwargs'])File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\
site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 118,in get_requires_for_build_wheelreturn hook(config_settings)File "C:\Users\Administrator\AppData\Local\Temp\2\pip-build-env-m26e9hf4
\overlay\Lib\site-packages\setuptools\build_meta.py", line 325, in get_requires_
for_build_wheelreturn self._get_build_requires(config_settings, requirements=['wheel'
])File "C:\Users\Administrator\AppData\Local\Temp\2\pip-build-env-m26e9hf4
\overlay\Lib\site-packages\setuptools\build_meta.py", line 295, in _get_build_re
quiresself.run_setup()File "C:\Users\Administrator\AppData\Local\Temp\2\pip-build-env-m26e9hf4
\overlay\Lib\site-packages\setuptools\build_meta.py", line 480, in run_setupsuper(_BuildMetaLegacyBackend, self).run_setup(setup_script=setup_scri
pt)File "C:\Users\Administrator\AppData\Local\Temp\2\pip-build-env-m26e9hf4
\overlay\Lib\site-packages\setuptools\build_meta.py", line 311, in run_setupexec(code, locals())File "<string>", line 3, in <module>File "C:\Users\Administrator\AppData\Local\Temp\2\pip-install-pg6_kfal\u
wsgi_05f18753100a4e25a475b36504fbabe5\uwsgiconfig.py", line 8, in <module>uwsgi_os = os.uname()[0]AttributeError: module 'os' has no attribute 'uname'[end of output]note: This error originates from a subprocess, and is likely not a problem wit
h pip.
error: subprocess-exited-with-error× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> See above for output.note: This error originates from a subprocess, and is likely not a problem with
pip.

 gunicorn的错误出现在我试图使用它运行flask项目的时候

User
C:\Users\Administrator\Desktop\******>gunicorn -w 4 -t 30 -b 0.0.0.0
:5000 app:index
Traceback (most recent call last):File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\runpy.
py", line 197, in _run_module_as_mainreturn _run_code(code, main_globals, None,File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\runpy.
py", line 87, in _run_codeexec(code, run_globals)File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\Scripts\gu
nicorn.exe\__main__.py", line 4, in <module>File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-p
ackages\gunicorn\app\wsgiapp.py", line 9, in <module>from gunicorn.app.base import ApplicationFile "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-p
ackages\gunicorn\app\base.py", line 11, in <module>from gunicorn import utilFile "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-p
ackages\gunicorn\util.py", line 8, in <module>import fcntl
ModuleNotFoundError: No module named 'fcntl'

它们的运行或安装无一例外都是需要UNIX/Linux,都是默认在 UNIX/Linux 上运行,因此选择 Waitress作为windows上的服务器是最好的选择

3.nginx命令

先来了解一点nginx命令方便下面操作

nginx.exe 启动nginx
nginx.exe -t 检查conf配置有没有问题
nginx.exe -s stop 停止nginx
nginx.exe -s reload 更新nginx

4. Waitress命令

waitress-serve --host=0.0.0.0 --port=5000 myapp:application

修改成与flask项目配置有关的端口号与地址

如果您的 Flask 应用程序在名为 的文件中定义myapp.py,并且 WSGI 应用程序对象名为application

5.开始!

1.准备好你的flask项目

2.启动它

3.使用 Waitress与它绑定并监视来自nginx的请求

waitress-serve --host=0.0.0.0 --port=5000 myapp:application

4.修改nginx配置文件,使其适用于你的项目

server {listen       8080;  # 修改为您的所需端口server_name  localhost;location / {# 允许所有请求方法,包括 POSTallow all;proxy_pass ****;  # 更改为您的Flask应用程序的主机和端口}location /static/ {root ******;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}
}

5.启动nginx

nginx.exe 启动nginx
nginx.exe -t 检查conf配置有没有问题
nginx.exe -s reload 更新nginx
nginx.exe -s stop 停止nginx
nginx.exe 启动nginx

6.通过域名访问,大工告成!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是Ros(一)- 名词解释和架构概述

目录 1.概述 2.名词解释 2.1节点&#xff08;Node&#xff09; 2.2节点管理器&#xff08;Master&#xff09; 2.3消息&#xff08;Message&#xff09; 2.4话题&#xff08;Topic&#xff09; 2.5服务&#xff08;Service&#xff09; 2.6动作&#xff08;Action&#…

基于Logistic回归实现二分类

目录 Logistic回归公式推导&#xff1a; Sigmoid函数&#xff1a; Logistic回归如何实现分类&#xff1a; 优化的方法&#xff1a; 代码&#xff1a; 1.创建一个随机数据集&#xff0c;分类直线为y2x&#xff1a; 为什么用np.hstack()增加一列1&#xff1f; 为什么返回…

Spring | Spring的基本应用

目录: 1.什么是Spring&#xff1f;2.Spring框架的优点3.Spring的体系结构 (重点★★★) :3.1 Core Container (核心容器) ★★★Beans模块 (★★★) : BeanFactoryCore核心模块 (★★★) : IOCContext上下文模块 (★★★) : ApplicationContextContext-support模块 (★★★)SpE…

[传智杯 #3 练习赛] 直角三角形

题目描述 一个直角三角形的两个直角边是a,b(a≤b)&#xff0c;其斜边是 c&#xff0c;且 a,b,c 都是正整数。 现在我们已经知道了斜边长度 c&#xff0c;请问这个直角三角形的两个直角边的长度是什么&#xff1f; 输入格式 输入一个整数 c(1≤c≤1.41104)。 输出格式 输出…

【Erlang进阶学习】4、进程与消息传递

在Erlang系统中&#xff0c;进程都是轻量级的&#xff0c;意味着创建进程只需要花费微不足道的时间和极少的内存。 1、进程间不共享内存&#xff0c;而是通过消息传递来通信。 2、消息从发送进程的栈上复制到接收进程的堆上。 3、由于多个进程并发地在独立的内存空间执行&#…

RocketMQ- 深入理解RocketMQ的消息模型

1、RocketMQ客户端基本流程 ​ RocketMQ基于Maven提供了客户端的核心依赖&#xff1a; <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId><version>4.9.5</version> </dependency&…

PyQt6 QCheckBox复选框按钮控件

​锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计33条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话…

Three.js的THREE.LOD如何加载gltf模型

要在Three.js中使用THREE.LOD加载gltf模型&#xff0c;可以按照以下步骤操作&#xff1a; 1、首先&#xff0c;确保已经引入了Three.js库和GLTFLoader插件。可以通过以下方式引入&#xff1a; <script src"https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/thre…

idea通过remote远程调试云服务器

引用了第三方的包&#xff0c;调试是看不到运行流程&#xff0c;于是想到了idea的remote方法 -agentlib:jdwptransportdt_socket,servery,suspendn,address9002 写一个.sh文件并启动 nohup java -jar -agentlib:jdwptransportdt_socket,servery,suspendn,address9002 ./demo.j…

【Socket】Unix环境下搭建局域网内TCP服务端

本文搭建一个简单的、Unix环境下的、局域网内的TCP服务端&#xff1a;每当有客户端连接时&#xff0c;打印一下对方的ip地址及端口号。 本文要学习的Unix网络IPC的套接字函数&#xff1a; socketbindlistenaccept 本文要学习的一些工具函数&#xff1a; inet_ptonhtonsgets…

基本面选股的方法

基本面选股是一种投资策略&#xff0c;主要关注公司的财务状况、盈利能力、行业地位等因素&#xff0c;以判断公司的价值并做出投资决策。以下是基本面选股的具体分析方法和重点&#xff1a; 财务状况分析&#xff1a; 利润表分析&#xff1a;关注公司的净利润、毛利率、营业…

思维模型 韦伯-费希纳定律

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。感觉与刺激成对数关系。 1 韦伯-费希纳定律的应用 1.1 韦伯-费希纳定律在工业设计中的应用 1 苹果公司的 iPhone 设计 苹果公司的 iPhone 设计是韦伯-费希纳定律在工业设计中的经典应用之…

Android 13.0 默认授予app获取序列号SerialNo权限

1. 概述 在13.0的系统rom定制化中,在一些第三方app开发中,会获取序列号等属性,而在10.0以后的高版本对于获取系统属性的相关信息要求严格 必须有权限才可以,10.0以前的Android版本中,可以直接通过调用Build.SERIAL来获取序列号,在高版本中,为了保护个人隐私, 不让第三…

Uniapp

UniApp是一个强大的跨平台应用开发框架 随着移动互联网的快速发展&#xff0c;跨平台应用开发成为了一个重要的需求。UniApp就是一个能够满足这一需求的强大框架。本文将介绍UniApp的基本概念、优势、使用方法和未来发展。 一、UniApp概述 UniApp是一个基于Vue.js开发的跨平…

剑指 Offer(第2版)面试题 15:二进制中1的个数

剑指 Offer&#xff08;第2版&#xff09;面试题 15&#xff1a;二进制中1的个数 剑指 Offer&#xff08;第2版&#xff09;面试题 15&#xff1a;二进制中1的个数解法1&#xff1a;位运算解法2&#xff1a;n & (n - 1)相关题目 剑指 Offer&#xff08;第2版&#xff09;面…

详解SpringAop开发过程中的坑

&#x1f609;&#x1f609; 学习交流群&#xff1a; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 &#x1f96d;&#x1f96d;3&#xff1a;QQ群&#xff1a;583783…

1-算法基础-编程基础

1.基本数据类型 char ch A; char s[] "hello";2.const定义常量 const int N 1e5 9;//const定义常量&#xff0c;后续不可被修改 int a[N];3.万能头文件 C11等可用 #include<bits/stdc.h> using namespace std;4.typedef typedef long long kk; kk a[20…

手敲MyLinkedList,简单了解其运行逻辑

1.LinkedList的介绍和结构 LinkedList的底层是双向链表结构&#xff0c;相对于之前的单向无头非循环链表来说&#xff0c;LinkedList最大的区别就是该链表可以增加了一条链接逻辑&#xff0c;可以从最后一个节点通过地址访问来到整个链表的头结点。 通过以下集合框架&#xff0…

计算机毕业设计 基于Web的铁路订票管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…