vercel无服务部署Go函数
准备
Vercel是一个用于静态站点和无服务器功能的云平台,非常适合您的工作流程。 它使开发人员可以托管静态网站和Web服务,这些网站和Web服务可以立即部署,自动扩展并且不需要监督,且无需配置。
使用命令行工具可以即可云部署和进行本地开发
npm i -g now
# 或者
yarn global add now
常用命令
# 查看命令行工具版本
now --version
# 初次使用需要登录
now login
# 直接部署当前文件夹
now
# 本地开发测试 打开调试 监听8080端口
now dev --debug --listen 8080
# 生产环境部署
now --prod
代码规范
创建项目文件夹后,在文件夹下创建 api
目录和 now.json
配置文件
$ ls -lah
total 38K
drwxr-xr-x 1 xuthu 197609 0 4月 18 08:30 ./
drwxr-xr-x 1 xuthu 197609 0 4月 28 11:57 ../
drwxr-xr-x 1 xuthu 197609 0 4月 18 08:30 api/
-rw-r--r-- 1 xuthu 197609 312 4月 18 08:29 now.json
-rw-r--r-- 1 xuthu 197609 607 4月 5 19:30 README.md
Vercel
使用 Go Runtime
会从从项目的 api
目录中的.go
文件中编译暴露的单个HTTP处理程序。
例如,index.go
在/api
目录内定义一个文件,如下所示:
package handler
import (
"fmt"
"net/http"
)
func Handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "<h1>Hello from Go!</h1>")
}
我们访问 /api
即可输出 Hello from Go!
当我们需要暴露多个函数怎么办?/api
路由已被占用。此时我们需要使用到路由功能,路由在配置文件中被定义。
配置文件
一个配置文件Demo:
{
//version:now的第二版本 '强制'不建议使用第一版本
"version": 2,
//functions: serverless的无服务函数功能
"functions": {
// 暴露 api/version_go.go 文件 指定该函数运行时资源
"api/version_go.go": {
"maxDuration": 5,
"includeFiles": "data/data.db"
}
},
// routes 指定路由 src为访问时路由 dest为真实处理文件
"routes": [
{ "src": "/api/version", "dest": "api/version_go.go" },
{ "src": "/", "dest": "index.html" },
{ "src": "/api", "dest": "index.html" }
]
}
注意
- 部署后文件无写权限,类似sqlite数据库将会只读
- 创建
.nowignore
可屏蔽无需部署资源 规则与.gitignore
一致 - 包含文件在配置文件中定义,
includeFiles
选项使用相对路径