需要准备的东西
- 非虚拟卡的 Visa。我使用 ZA 会报风控,但汇丰蓝狮子是 ok 的
- 服务器(也可能非必须,用 render 应该也 ok)
领取谷歌赠金
进入 Google Cloud,如果没有薅过赠金会提示可以领取 300¥ 的赠金,但是要绑卡
三月份我第一次薅的时候,绑的是 ZA 的卡,但是随后被验卡(扣除了几块钱然后又返还回来),并且要求交 100 hkd 押金(因为地区选的是 hk),并且最后开通额度的时候又卡了,绑 ZA 一直不能开通第一层级的付费,查了半天发现因为 ZA 是虚拟卡,所以被风控了。无奈之下只能换绑了汇丰蓝狮子,这次是直接过了
六月份薅第二次赠金的时候,直接用了汇丰蓝狮子,结果并没有要求交押金
以及因为我是半夜 11 点操作的,发现赠金起始日期就是今天……亏了一天。感觉下次薅得过了零点再操作(
导出 JSON key
(以下命令部分来自 xhs 分享,但是本人执行命令时卡在了创建 JSON key 没有权限上,所以在解决后决定把这个教程写出来)
首先打开赠金所在的 project,点击左侧导航栏的 IAM

点击主账号继承的这个 org 的链接,添加 org 下主账号的角色。此时可以搜索到
Organization policy administrator 的角色并加入权限
然后再点击左侧导航栏的“组织政策”,搜索
disableServiceAccountKeyCreation,把新版旧版两个政策都修改为“覆盖父资源的政策”-“添加规则”-“关闭”-“完成”-“设置政策”,即可在后续导出 JSON 形式的 vertex key接下来在拥有赠金额度的 project 下,点击网页右上方的图标打开在线终端,进入后执行如下命令:
bash# 1. 查看项目 ID gcloud projects list # 2. 设置项目 ID。此处的 <PROJECT_ID> 需要更换成上一步显示的 project id,该 id 会以 project 开头 export PROJECT_ID="<PROJECT_ID>" gcloud config set project $PROJECT_ID # 3. 启用 Vertex AI API gcloud services enable aiplatform.googleapis.com --project=$PROJECT_ID # 4. 创建服务账号 gcloud iam service-accounts create vertex-openrouter \ --display-name="Vertex OpenRouter" \ --project=$PROJECT_ID # 5. 给服务账号添加 Vertex AI User 权限 gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:vertex-openrouter@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/aiplatform.user" # 6. 尝试创建 JSON key gcloud iam service-accounts keys create vertex-key.json \ --iam-account=vertex-openrouter@$PROJECT_ID.iam.gserviceaccount.com \ --project=$PROJECT_ID
创建完成后,点击终端右上方的下载按钮,输入
vertex-key.json,即可下载 JSON 形式的 key使用 HuggingFace + CloudFlare 部署 API
没有 huggingface 的需要先注册一个账号,以下简称 huggingface 为 hf
然后需要选择一个可以用来部署 API 的应用,我这里选了 LiteLLM
配置 HuggingFace
首先需要先点击右上角自己的头像,然后选 new space
随便取个名字,比如
my-litellm-proxy。Space SDK 选 Docker,Gradio template 选 Blank,仓库可见性最好从 public 改成 private 防止 GCP 的秘钥泄露最后点
Create Space 完成创建进入自己刚刚创建的这个 space,点击右上方导航栏的 Files,再点击
+contribute - Create a new file,名字写 Dockerfile,然后文件内容填写如下:dockerfileFROM ghcr.io/berriai/litellm:main-stable WORKDIR /app COPY config.yaml /app/config.yaml CMD ["--config", "/app/config.yaml", "--port", "7860", "--host", "0.0.0.0"]
再仿照上面的方法,再次新建一个 file,名字写
config.yaml,内容如下:yamlmodel_list: - model_name: vertex-ai/* litellm_params: model: vertex_ai/* vertex_project: "os.environ/VERTEX_PROJECT" vertex_location: "os.environ/VERTEX_LOCATION" vertex_credentials: "os.environ/VERTEX_CREDENTIALS_JSON"
然后再点击右上方导航栏的
Settings,往下滑看到 Variables and secrets,点击右边的 New secret 依次设置三个秘钥第一个秘钥名字是
VERTEX_CREDENTIALS_JSON,内容填入你的 vertex-key.json 的内容,但是需要是单行 JSON,也就是把空格和换行都去掉。这个可以搜索网上现成的工具进行格式化第二个秘钥名字是
VERTEX_PROJECT,内容填入之前 vertex 配置的 project_id,不记得的话 vertex-key.json 里也有这个字段,可以直接复制第三个秘钥名字是
VERTEX_LOCATION,内容填入 us-central1等 space 的运行状态变成绿色的 running,就可以通过链接来访问这个 space 上挂载的服务了
链接可以通过以下方式拼接出来:
https://[用户名]-[Space名].hf.space。其中,所有字母必须是小写,且所有的下划线 (_) 和斜杠 (/) 都要替换成连字符 (-)拿到 HF 的身份认证 token
因为前面我们设置了 HF 仓库为 private,所以如果要让 Cloudflare 访问仓库,需要你生成 HF 的身份认证令牌
点击右上头像,并点击
Settings,进入新页面后点击左侧导航栏的 Access Tokens,然后点击 Create new token,将 Token Type 改成 Read 然后随便取个名字,点击确认,复制好弹出来的 token(这个 token 不会显示第二遍,所以最好存起来),后面在 Cloudflare 要用配置 Cloudflare Worker
然后点进我们刚刚创建好的 worker,点击右上方的“编辑代码”,填写如下代码:
(注意下面代码有个
targetHost 的变量,需要把变量值改成上面拼出来的形如 https://[用户名]-[Space名].hf.space 的链接。另外注意这个代码没有限制请求的域名,如果有自己的域名,这里可以发给 AI 改一下,变成只有你的域名能访问的话会更安全)jsexport default { async fetch(request, env) { const origin = request.headers.get("origin"); const authHeader = request.headers.get("Authorization"); // 从绑定的 Cloudflare 环境变量中安全地读取密钥 const masterKey = env.LITELLM_MASTER_KEY; const hfToken = env.HF_TOKEN; // 处理浏览器的 OPTIONS 跨域预检请求 if (request.method === "OPTIONS") { return new Response(null, { status: 204, headers: { "Access-Control-Allow-Origin": origin || "*", "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS", "Access-Control-Allow-Headers": "Content-Type, Authorization", } }); } // 1. 门禁校验:检查客户端是否带上了你自定义的 LITELLM_MASTER_KEY if (!authHeader || authHeader !== `Bearer ${masterKey}`) { return new Response( JSON.stringify({ error: "Unauthorized: 接口密钥无效或缺失" }), { status: 401, headers: { "Content-Type": "application/json" } } ); } // 2. 重写请求的目标地址为你的私有 Space 域名 const targetHost = "你的用户名-你的项目名.hf.space"; const url = new URL(request.url); url.host = targetHost; // 3. 重构请求头:将客户端传来的自定义 Key 擦除,替换为敲开 HF 私有空间所需的 hfToken const newHeaders = new Headers(request.headers); newHeaders.set("Authorization", `Bearer ${hfToken}`); // 重构完整的请求,安全转发给私有 Space const modifiedRequest = new Request(url.toString(), { method: request.method, headers: newHeaders, body: request.body, redirect: "follow" }); try { let response = await fetch(modifiedRequest); // 4. 复制响应,并安全注入跨域头,确保客户端网页能正常跨域接收数据流 const responseHeaders = new Headers(response.headers); responseHeaders.set("Access-Control-Allow-Origin", origin || "*"); responseHeaders.set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); responseHeaders.set("Access-Control-Allow-Headers", "Content-Type, Authorization"); return new Response(response.body, { status: response.status, statusText: response.statusText, headers: responseHeaders }); } catch (e) { return new Response(JSON.stringify({ error: "Gateway Error", details: e.message }), { status: 502 }); } } };
然后点击右上方的“部署”进行保存
接下来点击上方导航栏的“设置”,在“变量和密钥”的地方添加两个密钥
第一个秘钥名字是
HF_TOKEN,内容填写我们刚刚在 HF 申请的个人令牌,也就是 hf 开头的那个第二个秘钥名字是
LITELLM_MASTER_KEY,内容自定义,但是需要记住,这个在之后你请求 API 的时候需要作为对应的 secret 使用此时访问 cloudflare 给的 worker.dev 后缀的域名已经可以看到部署的服务了。但是这个 API 我自己测试的时候只能在有挂梯子的时候访问
有自己域名的话,可以点击上方导航栏的“域名”,点击“添加域名”,然后选择自己 cloudflare 绑定好的域名,并给 worker 一个子域名的 cname。用自己域名配的 API 我是可以不挂梯子访问的
测试
然后就可以对 API 进行测试啦。没有配自己域名的话,url 填 cloudflare 提供的那个 workers.dev 结尾的 url,key 填刚刚在 cloudflare 环境变量配的
LITELLM_MASTER_KEY注意这里的 url 不要有斜杠结尾
Article Index