nginx 从使用NextJS Web服务器发送的命令在本地运行Python脚本

qxsslcnc  于 12个月前  发布在  Nginx
关注(0)|答案(1)|浏览(143)

我有一个用NextJS建的网站。我还有一个本地Python脚本,我在不同的服务器上运行。由于多种原因,Python脚本无法在网站服务器上运行。现在我根据网站上的一些信息手动运行Python脚本。
我想通过允许网站触发Python脚本在另一台机器上运行来自动化这一点。我不知道该怎么做。是否存在这样的机制?我应该采取什么样的协议或方法来做这件事?
我在想,我需要在Python服务器上设置一个Web服务器,它只需要'启动',然后网站服务器会向Python服务器发送一个命令,启动Python脚本需要运行。现在的问题是Python NextJS服务器如何向Python发送命令来实际运行脚本??

x9ybnkn6

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 envvirtualenv -p pythonpipenv shell),这样您就可以隔离将在后续步骤中安装的依赖项,而不是在全局OS Python环境中安装依赖项。
1.在项目的根目录中创建一个Python requirements.txt,其中包含您首选的Python Web Framework的依赖项。在这个例子中,我使用FastAPI(例子中指定的版本在将来肯定会过时,所以尽可能使用最新的稳定版本):

fastapi==0.100.1
uvicorn[standard]==0.23.2

1.在您的终端中,从项目的根目录安装requirements.txt文件中列出的Python依赖项。确保您的终端会话位于已激活的虚拟Python环境中(请参见步骤1),以将依赖项仅隔离到项目,从而避免在全局操作系统级别安装依赖项。

pip install -r requirements.txt

1.更新项目根next.config.js文件,重写标准Next.js API路由的Map,以指向开发时的Python Web API服务器(和匹配路径),或者指向部署后将托管Python Web服务器的目录。

/** @type {import('next').NextConfig} */
const nextConfig = {
  rewrites: async () => {
    return [
      {
        source: "/api/:path*",
        destination:
          process.env.NODE_ENV === "development"
            ? "http://127.0.0.1:8000/api/:path*"
            : "/api/",
      },
    ];
  },
};

module.exports = nextConfig;

1.在示例文件/api/index.py下为端点/api/python创建一个简单的Python(FastAPI)GET路由处理程序:

from fastapi import FastAPI

app = FastAPI()

@app.get("/api/python")
def hello_world():
    return {"message": "Hello World"}

1.更新位于项目根目录中的package.json文件,使用脚本同时运行Next.js前端和Python后端服务器,其中fastapi-dev将运行Python后端FastAPI服务器,next-dev将运行前端客户端Web服务器,dev为您提供了同时运行两个服务器的选项,尽管您还需要安装单独的npm依赖项concurrently以使用dev命令(例如,npm run dev):

{
  "name": "nextjs-fastapi",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "fastapi-dev": "pip3 install -r requirements.txt && python3 -m uvicorn api.index:app --reload",
    "next-dev": "next dev",
    "dev": "concurrently \"npm run next-dev\" \"npm run fastapi-dev\"",
    ...
  },
}

1.在CLI / terminal / shell中,将当前工作目录设置为项目的根目录,使用以下命令运行Next.js前端和Python后端服务器:

npm run dev

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中)。也许其他平台也会支持这种方法。

相关问题