如何将您的gin go应用程序转换为severless Vercel

chhkpiq4  于 2023-08-01  发布在  Go
关注(0)|答案(3)|浏览(188)

我有main.go
看起来像这样

func main() {
    app := config.App()
    env := app.Env
    gin := gin.Default()
    gin.Use(CORSMiddleware())
    db := app.Db
    route.Setup(env,db, gin)
    gin.Run(":" + env.Port)
}

func CORSMiddleware() gin.HandlerFunc {
    return func(c *gin.Context) {
        c.Writer.Header().Set("Access-Control-Allow-Origin", "http://localhost:3000")
        c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
        c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With")
        c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT, DELETE")

        if c.Request.Method == "OPTIONS" {
            c.AbortWithStatus(204)
            return
        }
        c.Next()
    }
}

字符串
我想部署这个vercel
我使用了一些资源:

但我仍然不确定如何做到这一点。有人能帮帮我吗?

jecbmhm3

jecbmhm31#

首先创建一个文件夹并将main.go文件移动到其中,然后在此处创建另一个文件,api/index.go,其内容如下:

package handler

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

func CORSMiddleware() gin.HandlerFunc {
    return func(c *gin.Context) {
        c.Writer.Header().Set("Access-Control-Allow-Origin", "http://localhost:3000")
        c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
        c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With")
        c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT, DELETE")

        if c.Request.Method == "OPTIONS" {
            c.AbortWithStatus(http.StatusNoContent)
            return
        }
        c.Next()
    }
}

func Handler(c *gin.Context) {
    gin.SetMode(gin.ReleaseMode)
    app := config.App()
    env := app.Env
    gin := gin.Default()
    gin.Use(CORSMiddleware())
    db := app.Db
    route.Setup(env, db, gin)
    gin.ServeHTTP(c.Writer, c.Request)
}

字符串
现在你需要在项目的根目录下创建两个文件,第一个是vercel.json,内容如下:

{
    "version": 2,
    "routes": [
        {
            "src": "/api/(.*)",
            "dest": "/api/index.go"
        }
    ]
}


第二,创建go.mod文件,并尝试运行此命令来初始化Go模块!

go mod init


最后尝试运行此命令以安装所有必需的文件和依赖项

go get -u github.com/gin-gonic/gin


好了,现在要部署你的应用程序,只需在终端中运行以下命令:

$ vercel


你的应用现在应该部署在Vercel上作为无服务器,你可以在生成的URL访问它!
祝你好运!

iecba09b

iecba09b2#

以下是在Vercel上部署Gin API服务器的关键步骤:
1.使用Go代码创建一个API/文件夹。
1.添加一个go.mod文件来指定依赖项。
1.创建一个API/go.mod文件:

module example.com/api

go 1.20

require (
  github.com/gin-gonic/gin v1.8.2
)

字符串
1.添加一个API/main.go文件和你的服务器代码:

package main

import (
  "github.com/gin-gonic/gin"
)

func main() {
  r := gin.Default()
  // routes here 
  
  r.Run() 
}


1.创建api/vercel.json配置文件:

{
  "builds": [{
    "src": "./main.go",
    "use": "@vercel/go",
    "config": { "maxLambdaSize": "15mb" }
  }]
}


1.推送到GitHub/GitLab仓库
1.将存储库导入Vercel并部署
1.在Vercel上为DATABASE_URL等设置ENV变量
这将把你的Go服务器构建成Vercel上的无服务器函数应用程序。然后,您可以像普通Gin一样添加路由、中间件等。

am46iovg

am46iovg3#

你的main.go代表了一个基于Go中Gin框架的完全运行的应用程序,你想要deploy it on Vercel。但是,Vercel并不是为托管传统的Web服务器(例如您的Gin应用程序)而设计的。这意味着您需要将应用程序重构为无服务器函数来实现这一点。
首先将每个Handler分隔到自己的文件中:无服务器函数被设计成简单的、单一用途的代码片段。在当前的设置中,gin示例可能处理了多个路由。这些都应该提取到自己的无服务器函数中,每个都在一个单独的.go文件中。
例如,如果您有一个路由/api/users的处理程序,则可以创建一个名为api-users.go的文件。

// api-users.go
package handler

import (
    "net/http"
    "github.com/gin-gonic/gin"
)

func Handler(w http.ResponseWriter, r *http.Request) {
    // Creating new gin engine
    g := gin.New()
    // Your handler logic
    g.GET("/api/users", func(c *gin.Context) {
        // ... your handler logic here ...
        c.JSON(200, gin.H{
            "message": "Hello from /api/users",
        })
    })

    // running gin engine
    g.ServeHTTP(w, r)
}

字符串
然后更新您的vercel.json configuration file:您需要告诉Vercel这些新的.go文件是无服务器函数,它们应该被这样对待。

{
    "functions": {
        "api/users.go": {
            "runtime": "vercel/go@0.2.0"
        }
        // add other routes here
    }
}


"api/users.go"应该匹配无服务器函数文件的文件名和位置。调整它以匹配您存储无服务器函数文件的位置。
您还需要将go.mod文件添加到目录的根目录中,以告知Vercel需要安装哪些依赖项。

module YOUR_MODULE_NAME

go 1.20

require github.com/gin-gonic/gin v1.9.1


最后,将你的代码推送到你的GitHub/GitLab/Bitbucket存储库,并将其连接到Vercel。Vercel将部署你的Go无服务器函数。
如何在本地运行?
要在本地运行Vercel无服务器函数,您可以使用Vercel's own command-line interface (CLI),其中包含一个开发命令(vercel dev)来模拟本地计算机上的Vercel环境。

npm install -g vercel
vercel dev


您可以在http://localhost:3000(或终端中显示的任何端口)访问无服务器功能。无服务器函数的路径将与项目中的函数文件路径相对应。
例如,如果你在api/users.go中有一个无服务器的函数,你可以通过转到http://localhost:3000/api/users来访问这个函数。
其他示例:“#DevHack: Specifying what to run on Vercel dev",来自Elio Struyf

相关问题