Vercel
https://vercel.com/docs/getting-started-with-vercel
是什么
“无服务”前端部署,serverless
其实是你提供
- “前端源代码”
- “构建过程” 有的在vercel页面配置,也可以你的命令行脚本
- “edge/serverless function”
它负责:
- 源代码的构建(可以与github等平台关联,自动触发,也可以cli触发)
- 并服务构建后的静态内容
- 所有对edge/serverless function的请求再运行零时的后台代码
用处
支持常见的流行框架: Angular,Next.js,Nuxt.js,Hexo, https://vercel.com/docs/frameworks
基于现成模板: https://vercel.com/templates
或者 仓库或者vercel cli
进阶: https://vercel.com/docs/getting-started-with-vercel/next-steps
锐评一下
- 如果只是简单的个人静态博客, github-pages其实就够用了(而如果没有这类网站,则需要自己买服务器,域名,SSL证书,CDN加速等)
- 而这里的serverless另一个概念就是,没有核心服务(计算资源的调度、弹性伸缩、负载均衡、运维等),而可以有一些”还是需要服务器”的edge/serverless function(当用户的请求到来的时候会触发云服务为它分配一个容器运行,然后用完即毁,不会保留状态), 不过它也提供了DB,其实类似的产品,微信小程序算一个
- 然后作为配套工具,提供了vercel cli,vercel for git
- 然而现实是,例如private submodule(https://github.com/orgs/vercel/discussions/44),这些你总需要静态脚本一类的去处理,而到头来"所谓的框架支持"并不现实,你自定义的很多最终还是脚本,这样它做一半,你做一半的责任分散,还不如本地完成(或者本地docker里)完成,只需要推 静态内容更符合 唯一责任.
Vercel cli
node依然建议使用nvm管理, 用yarn取代npm
1 | add cli |
Edge Function
https://vercel.com/blog/edge-functions-generally-available
https://vercel.com/docs/functions/edge-functions/quickstart
- 创建 edge function
- 用vercel cli部署
和serverless function相比
- 相同点:
- 都是在vercel提供的服务器里执行而不是用户端
- 不同点:
- serverless function是早期方案,有冷启动问题,不少基于docker的方案,Edge function会在尽量靠近用户的服务器中执行,甚至可以Next.js的SSR
- edge function支持ESM,wasm 而 serverless function 支持Node.js,Go, Ruby, Python
- edge function global-first,而 serverless function region-specific,
文件 ./src/app/api/edge-function-example/route.ts
1 | import { NextResponse } from 'next/server'; |
本地测试, 启动服务
1 | yarn run next dev |
访问 http://localhost:3000/api/edge-function-example?query=123 不是404基本就是成功了
可以干嘛呢, 例如ChatGPT中中间转发, 但是可能还需要学一下Edge Streaming
edge middleware https://vercel.com/docs/functions/edge-middleware/quickstart
价格上 目前看起来 Hobby免费的, 1million的量
https://vercel.com/docs/functions/edge-middleware/usage-and-pricing
Serverless Function
文件 src/app/api/serverless-example/route.ts
1 | import { NextResponse } from 'next/server'; |
其实可以看到主要的区别就是 runtime 不一样
本地测试 yarn run next dev
, 访问 http://localhost:3000/api/edge-function-example?query=123 不是404基本就是成功了
而serverless还支持python/go/ruby
python的例子./api/index.py
(注意不在 ./src/app
下,而是直接最顶层)
1 | from http.server import BaseHTTPRequestHandler |
本地 测试
1 | vercel dev |
然而 报错了Error: spawn ~/.cache/com.vercel.fun/runtimes/python3/bootstrap EACCES
解决方案: chmod +x ~/.cache/com.vercel.fun/runtimes/python3/bootstrap
, https://github.com/orgs/vercel/discussions/2524
再访问http://localhost:3000/api非404即可
然后 如果你的python有依赖,可以requirements.txt
里写,也可以Pipfile
Flask 的例子
文件requirements.txt
1 | Flask==2.2.2 |
同样文件 ./api/index.py
1 | from flask import Flask |
在非Next的python项目中 可能还需要 vercel.json
1 | { |
于是乎, 就可以用vercel+flask+bs4等等来做一个自己用的小爬虫了,虽然在有自己服务器情况下不需要,有本地电脑也可以做,但是android/ios上想做个简单自用的带服务的网页,vercel目前的Hobby免费用量还是非常充足的, https://vercel.com/dashboard/usage
国内腾讯有个Webify,但看上去还是只有静态支持, https://webify.cloudbase.net/docs/migrating/vercel ,并不支持edge/serverless function, 再不然就还是自己买服务器了, 所以国内的核心问题还是监管问题,而不是技术问题