如何在 Vercel 部署服务器上的安全位置添加秘密文件?
我正在将 Next.js 项目部署到 Vercel。该项目是一个连接到Google Cloud Platform的上传器。它将文件上传到存储桶。
该文件在本地运行良好。 GCP 的凭据存储在 GPC 提供的本地 JSON 文件中(创建凭据时自动创建)。我正在使用 .env 文件来存储环境变量,包括该本地文件的路径。
在 Vercel 上,我还需要提供一个环境变量,以提供此 json 文件的路径。我可以在 Vercel 部署服务器上的哪里存储此 JSON 文件?
使用我尝试过的cli:
vercel secrets add GOOGLE_CLOUD_KEY_FILE --json path/to/file.json
和
vercel secrets add GOOGLE_CLOUD_KEY_FILE --local-file path/to/file.json
这不起作用。 cli 返回有关参数过多的错误。无论如何,这些选项都没有记录。
我还检查了文档和仪表板以了解添加秘密的方法,但没有成功。
解决此问题的一种方法是将字符串传递给 env 变量,然后在代码中将其解析为 JSON。
从 json 文件中删除换行符(“”内的换行符除外。可能是键的一部分。)。我使用过 textfiler 过去。
创建一个新的 Vercel 环境变量。要通过命令行执行此操作,请运行
vercel env add SECRET_JSON
。它会提示你? What’s the value of SECRET_JSON?
。您可以粘贴步骤 1 中的 json 内容。您也可以通过 Vercel Web ui 执行此操作。如果你是本地开发,你可以像这样添加它SECRET_JSON='JSON file content without line breaks'
到你的.env.local
通过将新的环境变量解析为 json 来使用它。
const secretJSON = JSON.parse( process.env.SECRET_JSON);
// .env.local(格式相同,但值是 Base64 编码的)
JSON_KEYS=ewogICJ0eXBlIjogInNlcnZpY2VfYWNjb3VudCIsCiAgInB...
// src/utils/google.ts 或 .js
const credentials = JSON.parse(
Buffer.from(process.env.JSON_KEYS ? process.env.JSON_KEYS : "", "base64").toString()
);
export const storage: Storage = new Storage({
projectId: credentials.projectId,
credentials: {
client_email: credentials.client_email,
private_key: credentials.private_key
}
})