You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Gin Go应用转换为Vercel无服务器部署?

部署Gin应用到Vercel的完整步骤

1. 改造Gin代码适配Vercel Serverless规则

Vercel的Go Serverless函数要求导出Handler作为入口,而非传统的gin.Run()启动方式,需要调整代码结构:

步骤1.1 抽离Gin初始化逻辑

创建app/setup.go(替换原有main.go的初始化逻辑):

package app

import (
    "your-module-name/config" // 替换为你的go mod模块名
    "your-module-name/route"
    "github.com/gin-gonic/gin"
)

func SetupRouter() *gin.Engine {
    app := config.App()
    env := app.Env

    // 生产环境切换Gin到发布模式
    if env.IsProduction {
        gin.SetMode(gin.ReleaseMode)
    }

    r := gin.Default()
    // 动态配置CORS允许的Origin,建议从环境变量读取
    r.Use(CORSMiddleware(env.AllowedOrigin))
    
    db := app.Db
    route.Setup(env, db, r)
    return r
}

func CORSMiddleware(allowedOrigin string) gin.HandlerFunc {
    return func(c *gin.Context) {
        c.Writer.Header().Set("Access-Control-Allow-Origin", allowedOrigin)
        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()
    }
}

步骤1.2 创建Vercel入口函数

在项目根目录新建api/index.go(Vercel自动识别api目录下的Serverless函数):

package api

import (
    "net/http"
    "your-module-name/app"
)

// Handler是Vercel要求导出的标准入口
var Handler = app.SetupRouter().Handler()

2. 添加Vercel配置文件

在项目根目录创建vercel.json,指定路由规则和运行时:

{
  "functions": {
    "api/*.go": {
      "runtime": "@vercel/go@1.0.0"
    }
  },
  "routes": [
    {
      "src": "/(.*)",
      "dest": "/api/index.go"
    }
  ]
}

3. 部署操作

  1. 安装Vercel CLI:
    npm install -g vercel
    
  2. 登录Vercel账号:
    vercel login
    
  3. 初始化并部署项目:
    vercel
    
    按照终端提示完成项目配置(如项目名称、关联Git仓库等),首次部署会生成预览地址。
  4. 部署到生产环境:
    vercel --prod
    

关键注意事项

  • 环境变量:所有敏感配置(如数据库连接、AllowedOrigin)需在Vercel控制台的「项目设置-环境变量」中添加,本地的.env文件不会被部署。
  • 数据库访问:本地数据库需替换为公网可访问的云数据库(如AWS RDS、阿里云RDS等),Serverless函数无法访问本地资源。
  • 模块名替换:代码中的your-module-name需替换为你go mod init时设置的模块名称。

内容的提问来源于stack exchange,提问作者Alwaysblue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 16:06:21