当前位置: 首页 > news >正文

使用 Flask 部署 Next.js

原文 使用 Flask 部署 Next.js

Flask 和 Next.js 是两个独特的开源 Web 框架,分别构建在 Python 和 JavaScript 编程语言之上。

您可以在没有 Next.js 的情况下构建 Flask 应用程序,也可以在没有 Flask 的情况下构建 Next.js 应用程序。但是,您可能会发现自己使用 Flask 构建了一个应用程序,然后决定使用 Next.js 进行服务器端渲染。

那么,此时你会怎么做?

您可以尝试的一件事是逐步采用 Next.js 或 Flask。在本文中,我将向您展示如何使用 Next.js 增量采用设计使 Next.js 与 Flask API 无缝协作,以及如何在 Ubuntu 服务器上使用 Nginx 部署它。

要在本文中继续前进:

  • 在 Next.js 和 Flask 中构建应用程序

  • 使用重写将 Flask API 集成到 Next.js

  • 设置 Nginx

  • 将 Flask API 和 Next.js API 作为服务运行

  • 使用 PM2 运行 Next.js 应用程序

在 Next.js 和 Flask 中构建应用程序

需求_

  • 节点.js v12

  • Python

让我们从构建一个示例 Next.js 应用程序开始。按照官方Next.js 文档,运行以下命令在您的计算机上安装 Next.js :. 按照说明设置基本应用程序。npx create-next-app@latest

这个装置会给我们一个“Hello, World!” 应用程序,准备部署。如果一切顺利,您可以yarn run dev在终端上运行并访问您的浏览器以确认它可以正常工作。您应该看到如下内容:localhost:3000

这就是现在的全部内容。接下来,让我们构建一个基本的 Flask API。我假设您已经安装了 Python,但如果您没有安装,您可以按照操作系统官方文档中的说明进行安装。

首先,让我们创建并激活一个虚拟环境来包含 Python 应用程序。

python3 -m venv env & source ./env/bin/activate _ _ _ _

接下来,通过在终端中运行以下命令来安装 Flask 。我们将使用 Flask-RESTful 创建一个 RESTful API:

pip install Flask flask -宁静

然后,创建一个名为的文件并将以下代码添加到其中:hello.py

from flask import Flask from flask_restful import reqparse , Api , Resource 
app = Flask ( __name__ ) 
api = Api ( app ) ​
解析器= reqparse 。RequestParser ()
解析器。add_argument ('task')类消息(资源):def get (self ):return { “message”:'Hello World' } 
api 。add_resource (消息, '/api/hello' )​
如果__name__ == '__main__':应用程序。运行(调试=真) 

现在,我们已经设置了 Flask 和 Next.js 应用程序。让我们继续让它们一起工作。

使用重写将 Flask API 集成到 Next.js

Next.js 重写允许您将传入请求路径映射到不同的目标路径。

进入我们刚刚创建的 Next.js 应用的目录,打开文件,将内容替换为以下代码:next.config.js

模块。export = () => { const rewrites = ( ) = > { return [ { source : " / hello / :path*" , destination : "http://localhost:5000/hello/:path*" , }, ] ; }; 返回{重写, }; };   

通过这种集成,我们可以直接从 Next.js 访问我们所有的 API 路由,就好像 API 与 Next.js 客户端在同一个域和端口中一样。这意味着我们只需要调用,就可以间接访问端口的 API。http://localhost:3000/api/``5000

让我们看一个例子。

打开文件并将其组件替换为“Hello, World!” 下面的组件:/pages/index.js

从'../styles/Home.module.css'导入样式从' react'导入{ useEffect ,useState } ​
导出默认功能Home (   ) { const [ message , setMessage ] = useState ( "" ); const [加载, setLoading ] = useState ( true ); ​useEffect ( () => { fetch ( '/hello/' ) . then ( res => res . json ()) . then ( data => { setMessage ( data . message ); setLoading ( false ); }) }, [])  ​return ( < div className = { styles.container } > < p > { ! loading ? message : " Loading .." } </ p > </ div > ) } 

上面的代码是一个简单的 Next.js 组件,它使用 Fetch 与 Flask API 对话。分身有术App,微信无限多开神器,支持虚拟定位和机型模拟等!如您所见,我们不必将确切的 URL 放入 API 调用中。Next.js 根据我们最初设置的设置来理解它。

当然,你也可以选择直接调用 Flask API。

设置 Nginx

现在我们有了一个有效的集成,让我们继续在 Nginx 中进行部署。在你的服务器酷我音乐车机版App,专为汽车开发的听歌软件,所有歌曲免登无限制畅听和下载!(在我们的例子中是一个 Ubuntu 服务器)上安装 Nginx,为你的 Nginx 配置创建一个配置文件,我们将调用它nextflask,并将以下代码添加到文件中:

/**
/etc/nginx/sites-available/nextflask
**/ 
server { server_name yourdomainname . com www 。你的域名。com ; 听80 ;
​location / hello / { proxy_pass http://127.0.0.1:5000/hello/ ; proxy_http_version 1.1 ; proxy_set_header连接“升级”;proxy_set_header主机$host ; proxy_set_header升级$http_upgrade ; proxy_set_header X -真实- IP $remote_addr ; proxy_set_header X -转发-对于$proxy_add_x_forwarded_for ;}位置/ {  proxy_pass http://0.0.0.0:3000 ; proxy_http_version 1.1 ; proxy_set_header连接“升级”;proxy_set_header主机$host ; proxy_set_header升级$http_upgrade ; proxy_set_header X -真实- IP $remote_addr ; proxy_set_header X -转发-对于$proxy_add_x_forwarded_for ;} } 

上面的 Nginx 配置将在根域上为您的 Next.js 应用程序提供服务,并在.yourdomainname.com``yourdomainname.com/api/hello


超过 20 万开发人员使用 LogRocket 来创造更好的数字体验了解更多 →


添加此配置后,通过运行以下命令启动 Nginx:

sudo systemctl 启动 nginx 。服务

这就是设置 Nginx 来为我们的 Flask API 和 Next.js 服务器提供服务。将 Flask 和 Next.js 代码推送到服务器,安装依赖项,然后分别运行它们。分享5个比较有趣独特的网站,全是小众宝藏级别,建议收藏起来备用!哦,等等,我们需要对它们进行守护。

您可以使用Supervisor或Gunicorn来守护 Flask 应用程序,这两种流行的 Python 应用程序部署工具。

我们将在 Flask 中使用 Gunicorn,在 Next.js 中使用 PM2。

将 Flask API 和 Next.js API 作为服务运行

让我们从使用 Gunicorn 运行 Flask API 开始。确保您的服务器上安装了正常工作的 Python,然后创建一个虚拟环境来安装 Gunicorn。

创建虚拟环境:

python3 - m venv 环境

然后,安装 Gunicorn 和 Flask:

pip 安装 gunicorn 烧瓶

设置 Gunicorn 以服务于 Flask 应用程序

首先,在根目录下创建一个文件。这将作为应用程序的入口点。将以下代码添加到文件中:wsgi.py

// wsgi . pyfrom hello import app如果__name__ == "__main__":应用程序。运行() 

接下来,为 Gunicorn 创建配置文件并将以下配置添加到其中:sudo vim /etc/systemd/system/hello.service

[单位]描述= Gunicorn实例服务于你好
之后=网络。目标[服务] User = ezeGroup = www - dataWorkingDirectory =/ path / to / your / app / directoryExecStart = / path / to / gunicorn / bin / gunicorn --workers 3 --bind unix :你好。袜子-m 007 wsgi :应用程序[安装] WantedBy =多用户。_ 目标

注意参考路径。最后,通过在终端中运行以下命令来启动并启用 Gunicorn:

sudo systemctl start hello & sudo systemctl enable hello

要检查操作是否成功,请运行以下命令查看状态:

须藤系统控制状态

如果一切顺利,我们的 Flask 应用程序应该在端口500和根域中启动并运行,.yourdomainname.com

使用 PM2 运行 Next.js 应用程序

PM2是 Node.js 应用程序的进程管理工具。要使用它,请使用以下命令全局安装 PM2:

pm2 安装- g pm2

接下来,在包含 Next.js 代码的目录中运行此命令:

pm2 start "npm run start" --命名 nextapp 

您的 Next.js 应用程序将开始在端口3000和根域中工作,.yourdomainname.com

恭喜!您已经使用 Flask API 成功部署了 Next.js 前端。起初它可能看起来很复杂,但您不必在未来的部署中重复此过程,解析机器人App,支持国内外短视频平台解析下载,支持下载音乐MV!因为这为您的应用程序正常工作设置了基本环境。您可能只需要推送您的代码并重新启动您的服务器,这可以通过您的CI/CD 管道进行管理。

结论

新技术总是来来去去,现在可能是您选择使用 Flask 部署 Next.js 以改进应用程序的一般工程的时候了。我希望你觉得这篇文章有帮助。

就个人而言,我有一个旧的 Flask API,但我想继续使用 Next.js 进行开发,同时保留一些 Python 后端实现。我发现它很容易切换而不会中断或破坏我现有的 API。

相关文章:

使用 Flask 部署 Next.js

原文 使用 Flask 部署 Next.js Flask 和 Next.js 是两个独特的开源 Web 框架&#xff0c;分别构建在 Python 和 JavaScript 编程语言之上。 您可以在没有 Next.js 的情况下构建 Flask 应用程序&#xff0c;也可以在没有 Flask 的情况下构建 Next.js 应用程序。但是&#xff0…...

网络安全--iptables

总结&#xff1a; iptables 的关键概念和功能&#xff1a; 规则&#xff08;Rules&#xff09;&#xff1a; iptables 使用规则来定义特定的操作&#xff0c;例如允许或拒绝特定类型的网络流量。每条规则都由条件和操作组成。条件可以是源 IP 地址、目标 IP 地址、端口号等&a…...

【猿灰灰赠书活动 - 02期】- 【Java从入门到精通2023年7月最新(第7版)】

说明&#xff1a;博文为大家争取福利&#xff0c;与清华大学出版社合作进行送书活动 图书&#xff1a;《Java从入门到精通》 一、好书推荐 图书介绍 Java入门经典&#xff0c;95万Java程序员的入行选择。配备升级版Java开发资源库&#xff0c;在线大咖课在线答疑&#xff0c;学…...

Springboot 设置统一的请求返回格式

现在开发过程中主要采用前后端分离的方式进行开发测试&#xff0c;也就是前端封装请求&#xff0c;后端提供标准的API接口服务。一般现在json 格式受到开发者们的青睐&#xff0c;学习过程中我们可以设置接口的返回类型&#xff0c;那么怎么做到设置统一的返回格式呢&#xff1…...

logstash日志换行处理小解

logstash主用于日志实时数据收集、解析&#xff0c;并将数据转发的工具&#xff0c;内置的功能也相当强大。但&#xff0c;同时意味着&#xff0c;他可能接收到各种情况的数据。 此处&#xff0c;我们主要讲解我实际使用中&#xff0c;碰到的一个小问题&#xff0c;换行(\n)。…...

openpnp - 做一个抛料盒

文章目录 openpnp - 做一个抛料盒概述效果图零件 - 抛料盒主体零件 - 磁铁仓盖板END openpnp - 做一个抛料盒 概述 8mm散料飞达做回来了, 上面用的长方形磁铁(4x6x10mm)透过0.8mm的3D打印薄壁, 和固定铁板的吸力很大, 用磁力固定的非常好. 正好缺一个抛料盒, 就按照散料飞达的…...

数据结构——单链表的实现(c语言版)

前言 单链表作为顺序表的一种&#xff0c;了解并且熟悉它的结构对于我们学习更加复杂的数据结构是有一定意义的。虽然单链表有一定的缺陷&#xff0c;但是单链表也有它存在的价值&#xff0c; 它也是作为其他数据结构的一部分出现的&#xff0c;比如在图&#xff0c;哈希表中。…...

【计算机组成原理】24王道考研笔记——第四章 指令系统

第四章 指令系统 一、指令系统 指令是指示计算机执行某种操作的命令&#xff0c;是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该 机的指令系统&#xff0c;也称为指令集。 指令格式&#xff1a; 1.1分类 按地址码数目分类&#xff1a; 按指令长度分类&…...

C#使用FileInfo和DirectoryInfo类来执行文件和文件夹操作

System.IO.FileInfo 和 System.IO.DirectoryInfo 是C#中用于操作文件和文件夹的类&#xff0c;它们提供了许多有用的方法和属性来管理文件和文件夹。 System.IO.FileInfo&#xff1a; FileInfo 类用于操作单个文件的信息和内容。以下是一些常用的方法和属性&#xff1a; Exi…...

每日一学——TCP/IP参考模型

TCP/IP参考模型是一个用于网络通信的分层架构&#xff0c;它定义了一组协议&#xff0c;这些协议实现了计算机之间的数据传输。TCP/IP参考模型分为四层&#xff1a; 应用层&#xff08;Application Layer&#xff09;&#xff1a;应用层是网络应用程序与网络之间的接口层。它提…...

LAXCUS分布式操作系统:技术创新引领高性能计算与人工智能新时代

随着科技的飞速发展&#xff0c;高性能计算、并行计算、分布式计算、大数据、人工智能等技术在各个领域得到了广泛应用。在这个过程中&#xff0c;LAXCUS分布式操作系统以其卓越的技术创新和强大的性能表现&#xff0c;成为了业界的佼佼者。本文将围绕LAXCUS分布式操作系统的技…...

两只小企鹅(Python实现)

目录 1 和她浪漫的昨天 2 未来的旖旎风景 3 Python完整代码 1 和她浪漫的昨天 是的,春天需要你。经常会有一颗星等着你抬头去看&#xff1b; 和她一起吹晚风吗﹖在春天的柏油路夏日的桥头秋季的公园寒冬的阳台&#xff1b; 这世界不停开花&#xff0c;我想放进你心里一朵&am…...

Linux | 使用wget命令调用服务接口

关注wx&#xff1a; CodingTechWork 引言 在docker容器中&#xff0c;想要调用某个服务接口&#xff0c;发现没有安装curl命令&#xff0c;但是有wget命令。本次总结一下wget的使用。 wget命令实践 容器访问 查看容器 docker ps进入容器 docker exec -it <container_id&…...

POJ Prime Path 埃氏筛法+广度优先搜索

思路&#xff1a;用埃氏筛法打个表&#xff0c;然后bfs即可 #include <iostream> #include <queue> using namespace std; typedef long long ll; ll inf 0x3f3f3f3f3f3f3f3f; bool isPrime[10007]; ll d[10007]; int tenPow[10]; int mint; void initTenPow() {…...

React React Native

文章目录 ReactReact vs Vue快速上手React&#xff0c;核心知识点JSX例子 组件虚拟DOM基于 React 的 UI 库跟Java、ObjectC交互 React Native基于 React Native 的 UI 库 React && React NativeReact && React Native 框架 React React 是一个用于构建用户界面…...

分布式定时任务系列5:XXL-job中blockingQueue的应用

传送门 分布式定时任务系列1&#xff1a;XXL-job安装 分布式定时任务系列2&#xff1a;XXL-job使用 分布式定时任务系列3&#xff1a;任务执行引擎设计 分布式定时任务系列4&#xff1a;任务执行引擎设计续 Java并发编程实战1&#xff1a;java中的阻塞队列 引子 这篇文章的…...

QT网络编程之TCP

QT网络编程之TCP TCP 编程需要用到俩个类: QTcpServer 和 QTcpSocket。 #------------------------------------------------- # # Project created by QtCreator 2023-08-...

《游戏编程模式》学习笔记(四) 观察者模式 Observer Pattern

定义 观察者模式定义了对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。 这是定义&#xff0c;看不懂就看不懂吧&#xff0c;我接下来举个例子慢慢说 为什么我们需要观察者模式 我们看一个很简…...

前端一键升级 package.json里面的依赖包管理

升级需谨慎 前端一键升级 package.json里面的依赖包管理 安装&#xff1a;npm-check-updates npm i npm-check-updates -g缩写 ncu 在项目根目录里面执行 ncu 如图&#xff1a;...

当速度很重要时:使用 Hazelcast 和 Redpanda 进行实时流处理

在本教程中&#xff0c;了解如何构建安全、可扩展、高性能的应用程序&#xff0c;以释放实时数据的全部潜力。 在本教程中&#xff0c;我们将探索 Hazelcast 和 Redpanda 的强大组合&#xff0c;以构建对实时数据做出反应的高性能、可扩展和容错的应用程序。 Redpanda 是一个流…...

Z-Image-Turbo问题解决:手把手教你配置Gradio WebUI并映射本地端口

Z-Image-Turbo问题解决&#xff1a;手把手教你配置Gradio WebUI并映射本地端口 1. 为什么选择Z-Image-Turbo 如果你正在寻找一款既快速又高质量的AI图像生成工具&#xff0c;Z-Image-Turbo绝对值得考虑。这个由阿里通义实验室开源的高效文生图模型&#xff0c;在速度和质量的…...

三步打造个性化Windows任务栏:TranslucentTB效率工具完全指南

三步打造个性化Windows任务栏&#xff1a;TranslucentTB效率工具完全指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 你是否曾觉得Wi…...

DevOps工具链集成:GitLab CI、Jenkins与Argo CD如何选?

DevOps工具链集成&#xff1a;GitLab CI、Jenkins与Argo CD如何选&#xff1f; 在DevOps实践中&#xff0c;工具链的选型直接影响交付效率与系统稳定性。GitLab CI、Jenkins和Argo CD作为主流工具&#xff0c;分别覆盖持续集成&#xff08;CI&#xff09;、持续交付&#xff0…...

Unity渲染流水线中的NDC空间:从齐次裁剪到屏幕坐标的完整转换指南

Unity渲染流水线中的NDC空间&#xff1a;从齐次裁剪到屏幕坐标的完整转换指南 在Unity引擎的渲染流水线中&#xff0c;理解NDC&#xff08;归一化设备坐标&#xff09;空间的作用至关重要。这个看似抽象的概念&#xff0c;实际上决定了3D场景如何最终呈现在2D屏幕上。对于想要深…...

【C语言】memmove()函数实战:如何安全高效地处理内存重叠拷贝

1. 为什么需要memmove()函数&#xff1f; 在C语言中处理内存拷贝时&#xff0c;我们经常会遇到一个棘手的问题&#xff1a;当源内存块和目标内存块存在重叠区域时&#xff0c;使用memcpy()函数可能会导致数据被意外覆盖。想象一下你在整理书架&#xff0c;想把第三层到第五层的…...

你的文件真的‘上传’了吗?聊聊阿里云盘‘秒传’背后的隐私与安全考量

你的文件真的“上传”了吗&#xff1f;揭秘秒传技术背后的隐私博弈 第一次在阿里云盘体验“秒传”功能时&#xff0c;那种近乎魔法的速度确实令人惊叹——几个GB的文件眨眼间就完成了“上传”。但惊喜之余&#xff0c;一个更根本的问题浮现出来&#xff1a;我的文件真的被上传了…...

别再手动敲命令了!用PyCharm自带功能一键创建Linux桌面快捷方式(附手动配置备份方案)

告别终端&#xff1a;PyCharm内置工具3秒生成Linux桌面快捷方式&#xff08;附应急手动方案&#xff09; 每次打开PyCharm都要在终端输入一长串路径&#xff1f;作为开发者&#xff0c;我们的时间应该花在创造价值上&#xff0c;而不是重复输入命令。JetBrains早就为Linux用户准…...

GLM-4-9B-Chat-1M模型推理加速方案

GLM-4-9B-Chat-1M模型推理加速方案 1. 引言 如果你正在使用GLM-4-9B-Chat-1M这个支持百万级上下文的大模型&#xff0c;可能会发现推理速度有时候不太理想。特别是在处理长文本时&#xff0c;生成响应需要等待较长时间。这其实是很正常的现象&#xff0c;毕竟模型参数量达到9…...

seo文章生成工具的原理是什么

SEO文章生成工具的原理是什么&#xff1f; 随着互联网的发展&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;在网站运营中的重要性愈加凸显。在这个过程中&#xff0c;SEO文章生成工具逐渐成为许多网站管理者的利器。这些工具究竟是如何运作的呢&#xff1f;本文将详细解…...

WMatrix 7语料库分析工具上线:隐喻识别高效精准,语言学研究利器

温馨提示&#xff1a;文末有联系方式WMatrix 7&#xff1a;专为语料库驱动隐喻分析优化的实用工具 WMatrix 7是当前广受语言学研究者青睐的语料库分析平台&#xff0c;内置强大词性标注、搭配提取与语义域分类功能&#xff0c;尤其在隐喻识别&#xff08;如MVU框架适配&#xf…...