轻松搭建基于 Serverless 的 Go 应用(Gin、Beego 举例)

简介:

首先介绍下在本文出现的几个比较重要的概念:

函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息 参考。
Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档 参考。

备注: 本文介绍的技巧需要 Fun 版本大于等于 3.6.4。

环境准备

首先按照 Fun 的安装文档里介绍的方法将 Fun 安装到本机。
PS: 本文介绍的方法,不需要安装 Docker,仅仅安装 Fun 即可,最简单的方式就是直接下载可执行的二进制文件。

安装完成后,可以执行 fun --version 检查 Fun 是否安装成功。

示例一:迁移 gin 示例到函数计算

首先我们按照官方示例的步骤,安装 gin(需要 golang 版本在 1.11+ 以上):

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

创建一个 example.go,内容填写如下:

package main

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

func main() {
    r := gin.Default()
    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })
  r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}

使用下面的命令启动应用:

go run example.go

然后访问 [localhost:8080/ping],可以看到返回结果如下:

最后直接使用 fun deploy 即可部署。

fun deploy

我们这里详细介绍下第一次部署流程:

  1. Fun 首先检测到这不是一个 Fun 项目,会提示是否自动创建(按下回车或者输入 y 即可)
  2. 然后 Fun 又会尝试去检测应用的启动端口(函数计算要求必须启动在 0.0.0.0:9000),如果不匹配,则会协助修改:
  3. 按下回车,Fun 会自动检测构建生成的可执行程序,如果检测不到,则提示用户使用指定命令进行编译
  4. 按下回车后,就会自动进行编译了,编译完成后,会自动生成 Fun 所需要的 bootstrap 文件以及 template.yml 文件,然后会进行自动部署操作,在部署前,会首先列出本次部署带来的变更:
  5. 如果确认上面的变更没有问题,再按下回车即可开始资源的部署流程。

部署完成后,可以看到会自动生成一个可以测试访问的临时域名 14118335-1911504709953557.test.functioncompute.com,通过这个临时域名,可以用于开发、测试时预览应用。

使用该临时域名,访问应用的 API 接口 14118335-1911504709953557.test.functioncompute.com/ping 测试,效果如下:

备注:临时域名仅仅用作演示以及开发,是有时效的,如果用作生产,请绑定已经备案的域名。

示例二:迁移 beego 示例到函数计算

首先我们按照官方示例的步骤,搭建 beego 应用:

go get github.com/astaxie/beego

创建一个 hello.go,内容填写如下:

package main

import "github.com/astaxie/beego"

func main(){
    beego.Run()
}

使用下面的命令启动应用:

go run hello.go

然后访问 localhost:8080,可以看到返回结果。

最后部署,直接使用 fun deploy 经历类似示例一的流程后,就可以通过 Fun 返回的临时域名预览应用了。

示例三:迁移 gin 搭建的博客应用到函数计算

示例三我们选择一个稍微复杂一些的应用,我们按照官方帮助文档的步骤,搭建一个基于 gin 的 blog 应用:

1. 克隆项目到本地(直接下载 zip 包也可以):

git clone https://github.com/tanhe123/mdblog.git

2. 修改配置文件

在 config 目录下,有一个配置文件 config.example.toml,将其复制一份,并修改名称为 config.toml,然后修改里面的几个配置:

  • 将 port = 8091 修改为 port = 9000,表示应用启动时,启动在 9000 端口。
  • 将 debug = true 修改为 debug = false,表示使用生产版本
  • 将 dir = "logs" 修改为 dir = "/tmp",表示日志写到 /tmp 目录(不挂载 NAS 的情况下,函数计算只有该目录是可以写的)

3. 编译并运行应用

go build # 会生成一个 mdblog 的二进制可执行程序
./mdblog # 直接运行该可执行程序

如果遇到网络问题,可以使用 https://goproxy.cn/ 加速。

访问 http://localhost:9000 预览效果

4. 部署

最后,本地测试没问题后,我们需要发布到函数计算上,虽然这个示例比起上面两个代码层面要复杂很多,但部署流程是一样的,直接执行 fun deploy 然后一路回车即可。

本示例生成的临时域名为:https://14118335-1911504709953557.test.functioncompute.com

打开可以看到如下效果:

打开具体的一篇博客,效果如下:

总结

我们通过三个示例介绍了如何部署一个 go 应用到函数计算上,从这三个例子我们可以发现,迁移一个 go 应用到函数计算是非常容易的,主要精力还是放在了如何在本地配置并启动应用,然后部署只需要简单的通过 fun deploy 命令即可。部署完成后,即可享受到函数计算带来的弹性伸缩、按量付费、免运维等特性。

更多参考

  1. 轻松搭建基于 Serverless 的 ThinkPHP 应用
  2. Funcraft
相关实践学习
【玩转ComfyUI】基于函数计算一键部署AI生图平台ComfyUI
本次实验将带大家通过使用阿里云产品函数计算FC,快速使用ComfyUI实现更高质量的图像生成。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
目录
相关文章
|
11月前
|
缓存 前端开发 Java
深入理解 Java 类加载器:双亲委派机制的前世今生与源码解析
本文深入解析Java类加载器与双亲委派机制,从Bootstrap到自定义加载器,剖析loadClass源码,揭示类加载的线程安全、缓存机制与委派逻辑,并探讨SPI、Tomcat、OSGi等场景下打破双亲委派的原理与实践价值。(238字)
1110 8
深入理解 Java 类加载器:双亲委派机制的前世今生与源码解析
|
安全 网络安全
别慌!浏览器提示证书风险这样解决
不少朋友用 360 浏览器时遇到过这种情况,其实很多时候是电脑系统设置 “闹脾气” 啦。比如电脑时间设置错了,证书和系统时间对不上号,浏览器自然就发出警报。这时,只需简单几步,点击更改日期和时间设置,重新打开网页,说不定风险提示就消失得无影无踪。
5049 6
|
数据采集 人工智能 前端开发
【AI Agent系列】【MetaGPT多智能体学习】2. 重温单智能体开发 - 深入源码,理解单智能体运行框架
【AI Agent系列】【MetaGPT多智能体学习】2. 重温单智能体开发 - 深入源码,理解单智能体运行框架
1375 1
|
Java Python
python ThreadPoolExecutor线程池使用
最近用上ThreadPoolExecutor, 用来代替celery的方式。 主要是用在celery上的时间太少, 没有吃透, 还有,我们的应用没有复杂到那地步, 多开几个服务器,也可以实现线程池的扩展。
7593 57
|
缓存 Java Go
Go mod包依赖管理工具使用详解
Go mod包依赖管理工具使用详解
1080 0
Go mod包依赖管理工具使用详解
|
移动开发
微信h5扫码接口范例:使用localStorage防止扫码后表单其他内容丢失
微信h5扫码接口范例:使用localStorage防止扫码后表单其他内容丢失
495 0
|
20天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
8846 25
|
18天前
|
人工智能 并行计算 PyTorch
秋叶 ComfyUI 2026 整合包 v3.2 完整部署教程:Python 3.13 + Torch 2.13 全栈升级
秋叶aaaki ComfyUI 2026年8月整合包v3.2正式发布!全面升级Python 3.13.11、PyTorch 2.13.0+cu130及ComfyUI v0.30.2,原生支持MiniMax H3、Wan 2.2、Qwen-Image-2.1等2026主流音视频/图像模型,解压即用,无需环境配置。
3633 16
|
18天前
|
人工智能 测试技术 API
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
Jev是TypeSafe AI推出的“系统一模型”,不生成文本,专做毫秒级结构化决策:Choice(多选)、Score(打分)、Noul(是非概率)。响应快193倍、成本低444倍,适合工单路由、内容审核、测试定级等高频判断场景。
2222 4
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!

热门文章

最新文章

相关产品

  • 函数计算