跳转至正文
GZ Cloudhome Logo

Netlify 与其函数式服务

发布于:2023 年 7 月 15 日 at 12:19

Netlify 是一个能够让我们快速上线网站的平台。我第一次接触 Netlify,还是在校内论坛上的一个介绍自建 ChatGPT 服务的帖子上面。按照帖子上面的教程,我照着样子 fork 了 ChatGPT-API Demo,并且上线了对应的网站。在这个过程中,我发现,原来上线只需要搞定代码就可以——GitHub 上又了代码仓库之后,在 Netlify 上可以直接连接到对应仓库,然后 Netlify 会自动把我们网站上线,完全不需要自己购买服务器或者 SSH 到服务器上开启网络服务!

这和我上线自己的网站(即本站)的流程完全不同。网站初版的时候,我购买了腾讯云的服务器,SSH 到服务器上安装对应的软件(如 Nginx、Node.js),拉取服务代码,build,然后上线;每次代码有更新,都需要重新 SSH 到服务器上,再走一遍拉取代码和 build 的流程。整个流程显然是非常不自动化的,这也是我一下子就被 Netlify 吸引的原因。

另外一个 Netlify 的功能是自动更新。如果上线的网站和某个 GitHub 仓库的分支关联,那么当这个分支更新时,Netlify 会拉取最新 commit 的代码,并在 build 之后上线。这就意味着我们的持续开发会非常方便,本地测试好之后,只需 push 到 GitHub,Netlify 就会自动帮我们更新在线版本。值得一提的是,使用自己的服务器也可以实现这样的功能,但是需要自己配置 GitHub Webhooks 并撰写对应的服务代码,相比之下稍显麻烦。

静态站点

把静态网站部署到 Netlify 尤其方便。只需把网站对应的 HTML、CSS 和 JS 文件放入一个文件夹内,Netlify 即会自动把我们的网站上线。我们可以 把这个文件夹上传到 Netlify 上,或者先 push 到一个 GitHub 仓库再在 Netlify 官网上连接到这个 GitHub 仓库;执行对应的操作后,网站即会立马发布。

动态站点

对动态网站来说,需要在服务端对外界的请求运行逻辑(比如在服务端 fetch 一个资源,再对资源后处理后生成回复),简单的静态站点已经不能满足需求。不过,这个情形也只是稍微复杂一些,我们只需在待发布的文件夹中加入服务端的代码即可。

在 Netlify 中,可以使用 Netlify Functions,即函数功能来实现对应的服务端代码功能。我们可以把后端的逻辑看作是一个一个函数,通过执行不同的函数来实现。编写函数也较为简单,在项目文件夹里新建名为 netlify/functions 的文件夹,在该文件夹内部就可以写对应的后端函数逻辑了。比如,如果我期望写一个后端逻辑,处理带 user 请求参数的请求,并返回 Hello ${user}$,那么可以在 netlify/functions 文件夹下新建名为 hello 的文件夹,内有 hello.js 文件(具体写法可以参考 create functions):

// Docs on event and context https://docs.netlify.com/functions/build/#code-your-function-2
const handler = async (event) => {
  try {
    const subject = event.queryStringParameters.name || 'World'
    return {
      statusCode: 200,
      body: JSON.stringify({ message: `Hello ${subject}` }),
      // // more keys you can return:
      // headers: { "headerName": "headerValue", ... },
      // isBase64Encoded: true,
    }
  } catch (error) {
    return { statusCode: 500, body: error.toString() }
  }
}

module.exports = { handler }

将该代码上传后,Netlify 即会自动发现这个函数,然后把其构建到对应的生产环境中。Netlify 会自动为我们的函数分配服务器。

很多时候,我们的网站是基于框架的。比如,目前本站使用的就是 Astro 框架。这些框架一般也会提供方便的一件部署构建工具(如 Astro 的 Netlify Adapter),让我们免去了基于 Netlify 的设定编写函数代码的工作。这样一来,我们可以只专注于对应网站的框架代码的编写,释放很多精力到其它事情上面去。

总结

如果你厌倦了搭建网站时需要做的各种服务器运维、服务搭建工作,只想专注于网站代码并快速上线你的网站,那么 Netlify 将会是一个非常好的选择。