我有一个用NextJS建的网站。我还有一个本地Python脚本,我在不同的服务器上运行。由于多种原因,Python脚本无法在网站服务器上运行。现在我根据网站上的一些信息手动运行Python脚本。
我想通过允许网站触发Python脚本在另一台机器上运行来自动化这一点。我不知道该怎么做。是否存在这样的机制?我应该采取什么样的协议或方法来做这件事?
我在想,我需要在Python服务器上设置一个Web服务器,它只需要'启动',然后网站服务器会向Python服务器发送一个命令,启动Python脚本需要运行。现在的问题是Python NextJS服务器如何向Python发送命令来实际运行脚本??
1条答案
按热度按时间x9ybnkn61#
这是可能的,并且在单个Next.js项目中设置为全栈Web应用程序相对容易。
Vercel自己(Next.js的创建者)有一些文档描述了如何使用Next.js作为前端和Python Web框架(例如,Django,Flask,FastAPI)作为后端,两者都可以托管在同一个Next.js全栈项目应用程序中。
因此,您应该能够从单个Next.js项目中导入,访问和运行Python脚本,从后端API服务器目录中(或者可能从您可能希望在API服务器目录之外创建的自定义后端相关目录,例如。项目根)。
Vercel文档、GitHub示例项目和托管演示
用于在单个项目中设置组合Next.js前端和Python API后端服务器的文档链接,如下所示:
示例代码
关键的代码片段(如下所示)来自上述文档链接和一个示例工作项目,该项目托管在一个Next.js GitHub project上,并带有Python FastAPI Web服务器后端。示例全栈应用程序托管在Vercel上,您可以从Python后端查看JSON response。
下面的代码片段假设您已经在系统上安装了Node.js和Python,并且还安装了Next.js项目scaffolded / setup。
1.首先,通常建议在项目中创建并激活Python虚拟环境(例如:
pip -m venv env
或virtualenv -p python
或pipenv shell
),这样您就可以隔离将在后续步骤中安装的依赖项,而不是在全局OS Python环境中安装依赖项。1.在项目的根目录中创建一个Python
requirements.txt
,其中包含您首选的Python Web Framework的依赖项。在这个例子中,我使用FastAPI(例子中指定的版本在将来肯定会过时,所以尽可能使用最新的稳定版本):1.在您的终端中,从项目的根目录安装
requirements.txt
文件中列出的Python依赖项。确保您的终端会话位于已激活的虚拟Python环境中(请参见步骤1),以将依赖项仅隔离到项目,从而避免在全局操作系统级别安装依赖项。1.更新项目根
next.config.js
文件,重写标准Next.js API路由的Map,以指向开发时的Python Web API服务器(和匹配路径),或者指向部署后将托管Python Web服务器的目录。1.在示例文件
/api/index.py
下为端点/api/python
创建一个简单的Python(FastAPI)GET
路由处理程序:1.更新位于项目根目录中的
package.json
文件,使用脚本同时运行Next.js前端和Python后端服务器,其中fastapi-dev
将运行Python后端FastAPI服务器,next-dev
将运行前端客户端Web服务器,dev
为您提供了同时运行两个服务器的选项,尽管您还需要安装单独的npm依赖项concurrently
以使用dev
命令(例如,npm run dev
):1.在CLI / terminal / shell中,将当前工作目录设置为项目的根目录,使用以下命令运行Next.js前端和Python后端服务器:
1.一旦前端和后端服务器都被服务并准备就绪,打开浏览器,并导航到从运行的CLI /终端输出提供的给定前端服务器URL(例如,
http://localhost:3000/
),并且您应该能够从那里测试一个工作的Python后端API JSON响应(例如,http://localhost:3000/api/python
)如果您仍然遇到问题,请参阅上面提供的Vercel文档和GitHub存储库链接。
特殊注意事项
我相信这样的设置目前适用于托管在Vercel平台上的Next.js应用程序,因为Vercel为Python运行时托管无服务器函数(截至2023年8月25日,目前在Beta中)。也许其他平台也会支持这种方法。