nrs*_*olf 10 firebase firebase-hosting
随着Divshot最近关闭,我已将许多应用程序切换到Firebase托管.其中一些应用程序连接到外部API,因此我需要一种方法来存储Firebase托管上的私有环境变量(例如,S3访问的密钥) - 任何人都有任何想法?这篇文章是https://www.firebase.com/blog/2015-10-29-managing-development-environments.html - 但这仅适用于非私有环境变量.
谢谢!
Dyl*_*lan 12
Firebase 托管无法存储私有环境变量。它仅用于静态托管。如果要使用私有变量,则需要在服务器端执行。
如果您想要一种“Firebase 方式”来处理机密,您可以使用 Firebase 云函数,并在云函数中设置一个环境变量。这是有关如何执行此操作的文档的链接:https : //firebase.google.com/docs/functions/config-env
如果您没有将云功能添加到您的 Firebase 托管,您可以通过 Firebase cli 工具添加:
firebase init functions
npm install --save firebase-functions@latest
npm install -g firebase-tools
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请访问:https : //firebase.google.com/docs/hosting/functions
为了在云函数中设置环境变量,您可以从命令行执行此操作,如下所示:
firebase functions:config:set someservice.key="THE API KEY" someservice.id="THE CLIENT ID"
Run Code Online (Sandbox Code Playgroud)
然后,您可以像这样从函数访问变量:
firebase init functions
npm install --save firebase-functions@latest
npm install -g firebase-tools
Run Code Online (Sandbox Code Playgroud)
a.f*_*iin 12
如果您希望使用 GitHub 操作部署到 Firebase,可以考虑.env在构建和部署之前创建变量。
只需在 GitHub 存储库设置下将环境变量设置为机密,然后在 中.github/workflows/{action}.yml添加此步骤
...
- name: Create env file
run: |
touch .env
echo API_ENDPOINT=${{ secrets.API_ENDPOINT }} >> .env
echo API_KEY=${{ secrets.API_KEY }} >> .env
cat .env
...
Run Code Online (Sandbox Code Playgroud)
在您的代码库中,只需调用process.env.API_KEY即可使用该变量!
您可以尝试 Google 的Secret Manager API。
这比将其存储为 Firebase Cloud Functions 中的环境变量更安全的原因是:
有关源代码的更多示例,您可以在此处查看 Google Cloud 的 Secret Manager NPM 包文档。
希望有帮助!
基于这篇文章,我有一个适合我的解决方案: https://victorbruce82.medium.com/how-to-deploy-a-react-app-to- Different-firebase-hosting-environments-dev-and-产品-da3f4cae9a1e
它使用env-cmd,并且您不需要云函数来在当前运行的 firebase 托管站点上获取正确的环境变量(因为部署在 firebase 上时NODE_ENV总是返回production)
基于使用两个独立的 firebase 项目,一个用于生产,一个用于开发。因此,添加第二个 firebase 项目后,用于开发:
使用以下命令将开发项目添加到当前项目:firebase use --add,并使用 alias dev。
创建两个.env文件:.env.production每个.env.development文件都有一个变量,例如:
APP_ENV="production"
Run Code Online (Sandbox Code Playgroud)
development(在.env.development文件中将其更改为)
(您还可以将 API 密钥添加到这些 .env 文件中,确保.gitignore它们,这样您的代码库中就没有秘密)
现在,在您的代码中,您可以通过以下方式引用它process.env.APP_ENV:
const websiteConfig = process.env.APP_ENV=== 'production' ? {
themeColor: '#fff'
} : {
themeColor: '#ccc'
}
Run Code Online (Sandbox Code Playgroud)
(您也可以选择APP_THEME_COLOR在 .env 文件中包含 a 并直接访问它,具体取决于您的偏好)
安装env-cmd
npm i -D env-cmd
现在将 2 个脚本添加到您的package.json:
APP_ENV="production"
Run Code Online (Sandbox Code Playgroud)
现在,您可以将代码部署到两个不同的环境/域/主机,但也可以让它们使用不同的环境变量。
(注意:NODE_ENV在 .env 文件中使用不起作用,production部署在 firebase 托管上时它将始终返回)
| 归档时间: |
|
| 查看次数: |
5918 次 |
| 最近记录: |