服务器冇得了,只能白嫖了,就这样。
基础命令
安装
npm i -g vercel # npm
yarn global add vercel # yarn
使用
vercel init # 选择一个示例项目(初始化)
# 可以根据模板初始化创建,不复杂的话也可以自己弄,功能简单的话几个文件就差不多了
cd <PROJECT> # 进入目录
vercel dev --debug # 本地开发测试
vercel # 部署到云服务
vercel -prod # 部署到云服务生产环境
支持语言
- 官方支持
Node.js
、Go
、Python
、Ruby
。 - 社区支持php。在配置里面做好相应配置即可。例如:
{ "functions": { "api/test.php": { "runtime": "[email protected]" } } }
配置
详情可以参考https://vercel.com/docs/configuration。
在这里以一个简单的配置vercel.json
为例,解释一下比较有用的参数。
{
"version": 2,
"builds": [ // 这里需要注意,没有罗列到builds的资源是无法访问或使用的
{ "src": "*.html", "use": "@vercel/static" }, // 静态资源
{ "src": "api/*.py", "use": "@vercel/python" } // 因为是python写的云函数,所以...
],
"routes": [
{ "src": "/", "dest": "/index.html" }, // 这里把主页定位到相应的网页,不然默认会是访问目录
{ "src": "/api/date", "dest": "/api/date.py" }, // 一个官方的基于BaseHTTPRequestHandler简单例子,返回当前时间
{ "src": "/api/ip/(.*)", "dest": "/api/ip_query.py" }, // 一个更加复杂的例子,获取域名对应的ip
{ "src": "/api/(.*)", "dest": "/api/web.py" }, // 一个基于Flask的简单例子,返回访问的路径和参数
{ "src": "/(.*)", "status": 404, "dest": "/404.html" } // 把其它的访问路径定位到自定义的404页面
]
}
简单例子
这里以Python为例,与上一节的配置相对应。
基于BaseHTTPRequestHandler
date.py
from http.server import BaseHTTPRequestHandler
from datetime import datetime
class handler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type', 'text/plain')
self.end_headers()
self.wfile.write(str(datetime.now().strftime('%Y-%m-%d %H:%M:%S')).encode())
return
ip_query.py
from http.server import BaseHTTPRequestHandler, HTTPServer
import socket
class handler(BaseHTTPRequestHandler):
def do_GET(self):
path = str(self.path)
try:
domain = path[path.rindex("/")+1:]
print(domain)
ip = socket.gethostbyname(domain)
except:
text = 'path is: %s, \n Error happens\n'%(path)
else:
text = 'domain is: %s \n ip is: %s\n'%(domain, ip)
self.send_response(200)
self.send_header('Content-type', 'text/plain')
self.end_headers()
self.wfile.write(text.encode())
return
if __name__ == "__main__":
http_server = HTTPServer(('', int(8888)), handler)
http_server.serve_forever()
基于Flask
这里需要注意,在requirements.txt中加入依赖flask==1.0.2
web.py
from flask import Flask, Response, request
app = Flask(__name__)
@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def catch_all(path):
print(request.args)
key = request.args.get('key')
return Response("<h1>Flask</h1><p>You visited: /%s</p><p>key=%s</p>" % (path,key), mimetype="text/html")
if __name__ == "__main__":
app.run(debug = True)
其它
测试地址
https://test-feql0j31g.vercel.app
https://test-feql0j31g.vercel.app/api/ip/github.com
https://test-feql0j31g.vercel.app/api/test?key=tt123