使用 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。

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

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

相关文章

ubuntu切换python版本

在没有安装类似anoconda的管理工具的时候&#xff0c;我们常常会被Ubuntu下的Python版本切换问题所头疼。 可以使用update-alternatives工具进行python版本的任意切换 当使用update-alternatives工具来切换Ubuntu系统上的Python版本时&#xff0c;您实际上是在系统范围内选择…

PyTorch翻译官网教程-NLP FROM SCRATCH: CLASSIFYING NAMES WITH A CHARACTER-LEVEL RNN

官网链接 NLP From Scratch: Classifying Names with a Character-Level RNN — PyTorch Tutorials 2.0.1cu117 documentation 使用CHARACTER-LEVEL RNN 对名字分类 我们将建立和训练一个基本的字符级递归神经网络(RNN)来分类单词。本教程以及另外两个“from scratch”的自然…

【国赛清单】2023全国大学生电赛综合测试【总结】

综合测评简介 &#xff08;1&#xff09;综合测评是全国大学生电子设计竞赛评审工作中非常重要的一个环节&#xff0c;是“一次竞赛二级评审”工作中全国专家组评审工作的一部分。 &#xff08;2&#xff09;测试对象为赛区推荐上报全国评奖的优秀参赛队全体队员&#xff0c;…

轻松转换TS视频为MP4,实现优质视频剪辑体验

如果你是一个视频剪辑爱好者&#xff0c;你一定会遇到各种视频格式之间的转换问题&#xff0c;特别是将TS视频转换为MP4格式。别担心&#xff0c;我们的视频剪辑软件将为你提供最简单、高效的解决方案&#xff01; 首先第一步&#xff0c;我们要进入媒体梦工厂主页面&#xff…

Elasticsearch同时使用should和must

问题及解决方法 must和should组合查询&#xff0c;should失效。使用must嵌套查询&#xff0c;将should组成的bool查询包含在其中一个must查询中。 SearchRequest request new SearchRequest(); request.indices("function_log");SearchSourceBuilder sourceBuilde…

XLua案例学习

下载 xlua 之后把 asset 文件中的全部文件粘贴到项目文件Asset文件下&#xff0c;将tool粘贴到 asset 同级目录下 然后把 HOTFIX_ENABLE 宏打开 之后 编辑 lua 脚本 更改源代码之后先 Generate Code 然后 HotFix inject in Editor 开发过程&#xff1a; 首先开发业务…

C语言预处理命令

编译预处理指令&#xff1a;对源程序编译之前做一些处理,生成扩展C源程序 1、种类&#xff1a; 宏定义 #define文件包含 #include条件编译 #if–#else–#endif等 2、格式&#xff1a; “#”开头占单独书写行语句尾不加分号 3、宏定义 在&#xff23;语言源程序中允许用一…

掌握Python的X篇_32_使用python编辑pdf文件_pdfrw

本篇介绍利用python操作pdf文件&#xff0c;我们平时也会有合并和拆分pdf的需求&#xff0c;此时我们就可以使用本节内容。 文章目录 1. pdfrw的安装2. 切分pdf文件3. pdfrw官网及实现一版四面的实例 1. pdfrw的安装 pip install pdfrw官网地址&#xff1a;https://github.co…

【设计模式】装饰器模式

装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构。这种类型的设计模式属于结构型模式&#xff0c;它是作为现有的类的一个包装。 装饰器模式通过将对象包装在装饰器类中&#xff0c;以便动态地修改其行为…

如何在Linux中查找Nginx安装目录

一、通过which命令查找 $ which nginx /usr/sbin/nginxwhich命令会在系统环境变量PATH中查找nginx可执行文件&#xff0c;并返回路径。因此&#xff0c;通过which命令可以很容易地找到系统中nginx的安装位置。 二、通过whereis命令查找 $ whereis nginx nginx: /usr/sbin/ng…

51单片机(普中HC6800-EM3 V3.0)实验例程软件分析 实验六 静态数码管显示

目录 前言 一、原理图及知识点介绍 1.1、数码管原理图&#xff1a; 二、代码分析 前言 第一个实验&#xff1a; 51单片机&#xff08;普中HC6800-EM3 V3.0&#xff09;实验例程软件分析 实验一 点亮第一个LED_ManGo CHEN的博客-CSDN博客 第二个实验&#xff1a;51单片机&am…

计算机竞赛 LSTM的预测算法 - 股票预测 天气预测 房价预测

0 简介 今天学长向大家介绍LSTM基础 基于LSTM的预测算法 - 股票预测 天气预测 房价预测 这是一个较为新颖的竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/postgraduate 1 基于 Ke…

Java进阶-Oracle(二十)(1)

&#x1f33b;&#x1f33b; 目录 一、Oracle 数据库介绍1、Oracle 的概述2、Oracle 的结构2、Oracle的功能 二、安装与卸载1、卸载2、安装 三、使用&#xff08;需要关注得只有下面这两个&#xff09;四、PLSQL 的简单使用五、DBeaver 的简单使用 一、Oracle 数据库介绍 1、O…

【深度学习】遗传算法[选择、交叉、变异、初始化种群、迭代优化、几何规划排序选择、线性交叉、非均匀变异]

目录 一、遗传算法二、遗传算法概述2.1 选择2.2 交叉2.3 变异 三、遗传算法的基本步骤3.1 编码3.2 初始群体的生成3.3 适应度评估3.4 选择3.5 交叉3.6 变异3.7 总结 四、遗传算法工具箱4.1 initializega4.2 ga4.3 normGeomSelect4.4 arithXover4.5 nonUnifMutation 五、遗传算法…

ASL国产CS5213 转VGA信号输出音频 替代AG6200安格芯片 HDMI to VGA(带音频)方案设计原理图

CS5213功能&#xff1a;HDMI转VGA带音频输出&#xff0c;专注于设计HDMI转VGA带音频输出。可替代AG6200 AG6201。 CS5213芯片是一个HDMI&#xff08;高清多媒体接口&#xff09;到VGA桥接芯片。 它将HDMI信号转换为标准VGA信号它可以在适配器、智能电缆等设备中设计。 Capst…

JAVA 实训报告心得体会

一开始想做计算器那个课题&#xff0c;原因很简单&#xff0c;就是因为我感觉那个课题很简 单&#xff0c;在百度里一搜就搜到了一模一样的源程序。只是感觉没什么意思&#xff0c;那个界面也 不是很好看&#xff0c;又不好玩。所以就做了现在这个猜数游戏。一直想编个游戏程序…

【数据结构与算法】分治算法

分治算法 介绍 分治法是一种很重要的算法&#xff0c;字面意思的解释是“分而治之”&#xff0c;就是把一个复杂的问题分成两个或更多的相同或相似的子问题&#xff0c;再把子问题分成更小的子问题…直到最后子问题可以简单的直接求解&#xff0c;原问题的解即子问题解的合并…

前端接口修改工具 Requestly具体操作

更新于2023年8月12日18:17:56&#xff0c;插件版本可能会变&#xff0c;界面可能会有所变化 插件下载地址&#xff1a;https://chrome.google.com/webstore/detail/requestly-open-source-htt/mdnleldcmiljblolnjhpnblkcekpdkpa 注意&#xff0c;必须用谷歌浏览器&#xff0c;…

Mysql压力测试(sysbench)

目录 配置项目环境&#xff1a; 参考&#xff1a;采用sysbench压测mysql详解_dream21st的博客-CSDN博客 实验步骤&#xff1a; 1、安装sysbench工具 2、在master上创建用户和库&#xff0c;配置用户的权限可以使他可以访问库&#xff08;Mysql的主从复制&#xff09; 3、基…

什么是单页应用程序?如何选择及架构、优势和挑战

什么是单页应用程序&#xff08;Single-Page Application&#xff09;&#xff1f; 单页面应用程序(Web应用程序或网站)仅加载单个页面。然后&#xff0c;当用户与Web服务器交互时&#xff0c;它使用从Web服务器获取的新内容重写页面&#xff0c;而不是为每次交互加载新页面。…