当前位置:首页 > 编程语言 > 正文内容

用GitHub Codespaces安全地存储环境变量

a811625533年前 (2023-06-03)编程语言22

作为一个开发者的倡导者,我做了很多演示项目来说明我的讲座或内容。另外,作为一个混乱的人,我在演示过程中并没有做好安全存储环境变量的工作。不止一次,我在流媒体或会议演讲中暴露了我的环境变量。幸运的是,像和这样的开发者朋友向我介绍了Cloak,这是一个VS Code扩展,可以在你不小心分享你的屏幕时隐藏你的环境变量的值。

我最近开发了一个小应用程序,住在github域。开发这个应用程序让我想起了我以前作为软件工程师时的所有挣扎。(我并不怀念在最后期限前编码的压力)。我遇到的挣扎之一是与合作者分享我的环境变量。我希望我的队友能在本地试用这个应用程序,这样他们就可以贡献代码或审查用户体验,但我不确定如何告诉他们安全地设置环境变量。

  • 我在Slack中分享环境变量吗?不,那是不安全的。
  • 我可以在密码管理器中分享这些变量吗?当然可以,但现在有些值的格式不好,即RSA密钥。

我过去经历过的其他失误:

  • 我忘了把我的环境文件添加到我的.gitignore文件中,所以我不小心把我的环境变量文件推到了我的版本库。
  • 我不小心删除了我的.env文件,然后不得不生成新的API tokens和secrets。

我相信有很多解决方案可以在沙盒应用程序中安全地存储环境变量,但GitHub Codespaces对我来说是最有效的!

使用GitHub Codespaces的环境变量的好处

使用GitHub Codespaces的体验是无缝的,因为它允许仓库合作者去我的仓库,打开Codespaces,并在本地运行代码。他们不需要填写数值,所以我也不需要明确地分享秘密。在幕后,GitHub Codespaces 从仓库设置中的一个名为 Codespaces Secrets 的存储中提取这些值。

如何在 GitHub Codespaces 中存储你的私钥

为了说明这个例子,我们将使用NASA的API,因为大多数开发者都能访问它。

step 1: 生成一个NASA的API密钥

填写 上的表格,申请一个 API 密钥。你应该在你的电子邮件中收到API密钥。(保存这个密钥,因为我们将在Step 5使用它)。

第2步:使用React Codespaces模板

包括一些最常见的应用程序框架的模板代码,包括Next.js、React.js、Django、Express、Ruby on RAIls、Preact、Flask和Jupyter Notebook。模板为开发者提供了一个沙盒,在Codespaces中构建、测试和调试应用程序。这意味着你不必从头开始进行编码。我们已经有了一个工作项目,你可以将其提升为你所设想的项目。你可以使用模板来了解开发人员如何结构他们用各种编程语言编写的项目。而且你可以用它来了解不同的文件是如何相互沟通的。

例如,我一直想学习更多关于人工智能和机器学习的知识,但我不知道从哪里开始。我使用一个Jupyter Notebooks模板来。该模板已经有了我需要的所有工具;我只需要修改几行代码。

在本教程中,我们将导航到https://github.com/codespaces/templates,并选择React模板。

Step 3: 等待你的Codespace加载

一旦我们的Codespace被完全加载,你会在一个名为 “Simple Browser” 的标签上看到你的 *** 应用的实时预览。(如果你还没有看到 “Simple Browser” 标签,请给它几分钟时间来加载)。它应该看起来像下面的图片:

Step 4: 发布你的Codespace

我们还没有完成。我们的主要目标是在Codespace中存储和引用环境变量。然而,只有当我们的Codespace生活在一个资源库中时,我们才能做到这一点。要做到这一点,我们需要发布我们的Codespace。采取以下步骤来发布当前的Codespace:

  1. 在一个新的标签中,导航到。不要担心离开这个标签或窗口,因为Codespaces会保存你的修改。
  2. 向下滚动到页面的底部,你会看到你创建的Codespaces。它可能有一个很傻的名字。GitHub Codespace 会自动为每个 Codespace 生成名称,作为一种识别形式。我的Codespace被命名为 “ubiquitous acorn”。

  3. 点击右侧的三个点,选择 “Publish to new repository”选项。

  4. 在这里,你可以给你的项目起一个更容易识别的名字,使项目公开,并通过 “See repository” 按钮查看你的资源库。

  5. 这将引导你进入GitHub上的仓库。它也会显示项目中的不同文件。你可以分享仓库的链接,让其他开发者与你合作或探索你的代码库

Step 5: 存储你的环境变量

在你的新版本库中,导航到Settings > Secrets and variables > Codespaces。你也可以通过导航到一个类似这样的URL来找到正确的页面: ​​https://github.com/REPLACE_WITH_GITHUB_OWNER/REPLACE_WITH_GITHUB_REPO/settings/secrets/codespaces

你登陆的页面应该如下图所示:

让我们创建两个版本库的私钥:

      • REACT_app_NASA_ENDPOINT=https://api.nasa.gov/
      • REACT_APP_NASA_API_KEY= This is where you will add your NASA API key

现在,我们可以使用惯例在我们的代码库中引用这些变量: process.env.{ENVIRONMENT_VARIABLE_NAME}

Step 6: 重新加载你的Codespace

一旦你添加了新的API密钥,你的Codespaces应该 “Auto” 认识到你向你的Codespaces添加了新的秘密。如果是这样,你的Codespaces将弹出一个通知,说:”Your codespace secrets have changed. Reload to apply。”

按下 “Reload to apply” 按钮,这些变化就会生效。

Step 7: 安装axios

Axios是我们用来调用NASA API的npm包。在你的Codespace的终端运行这个命令来安装axios:

npm install --save axios

Step 8: 创建一个新文件

(这一步我使用了Wayne Fornworth在Medium上的。我过去曾使用过NASA的API,但在建立这个文件时,我觉得有点偷懒。谢谢你,韦恩,谢谢你的博文! )

在你的src目录下创建一个文件,名为 HttpClient.js ,然后在该文件中添加以下几行代码:

(注意:第2行和第3行是指我们通过使用 process.env.{ENVIRONMENT_VARIABLE_NAME} 创建的私钥。)

import axios from "axios"
const nasaEndpoint = process.env.REACT_APP_NASA_ENDPOINT
const nasaApiKey = process.env.REACT_APP_NASA_API_KEY
axios.interceptors.request.use(
config => {
config.params = config.params ? config.params : {}
const configUrl = config.url
if (configUrl.includes(nasaEndpoint)) {
config.params["api_key"] = nasaApiKey
}
return config
},
error => {
return Promise.reject(error)
}
)
export default {
getApod() {
return axios.get(`${nasaEndpoint}planetary/apod`)
},
}

Step 9: 更新你的App.js文件

删除 src/App.js 文件的当前内容,用以下几行代码替换它:

import React, { useState, useEffect } from "react"
import HttpClient from "./HttpClient"
const App = () => {
const [apod, setApod] = useState({})
useEffect(() => {
HttpClient.getApod().then(apodData => {
setApod(apodData.data)
})
}, [])
return (
<div style={{ maxWidth: 900, padding: 30 }}>
<h1>NASA API</h1>
<h2>Astronomy Picture of the Day</h2>
{apod && (
<article>
<header>
{apod.title} - <i>{apod.date}</i>
</header>
<img src={apod.url} alt="APOD" width="800" height="auto" />
<p>{apod.explanation}</p>
<pre
style={{
overflowX: "auto",
whiteSpace: "pre-wrap",
wordWrap: "break-word",
}}
>
<hr />
{json.stringify(apod, null, 2)}
</pre>
</article>
)}
</div>
)
}
export default App

Step 10: 检查你的创作

如果成功的话,你的简单的浏览器标签应该呈现出与下面类似的图像:

Step 11: 让其他人也能访问它!

任何人都可以打开你的Codespace,但环境变量不会对所有人都有效。为了让人们看到同样的结果(比如,为了让API调用发挥作用),你需要把用户添加为版本库合作者。如果他们不是版本库的合作者,他们会说页面上有一个破碎的图像。查看,了解如何为你的版本库添加合作者。

需要记住的事情

  1. 这是一个针对NASA每日天文图片的API调用,所以图片可能会根据你进行这个API调用的那一天而有所不同。上图中的图片是针对.net的日期的。
  2. 现在,如果有版本库合作者权限的人在 Codespace 中打开你的版本库,他们可以得到同样的结果,而不需要填写环境变量,因为你已经在版本库的 Codespaces 秘密中存储了正确的值。
  3. 看一下我的,仔细检查你的代码。请记住,如果你在 Codespace 中打开这个版本库,你会看到一个破碎的网页,因为你不是这个版本库的合作者。
  4. 这种 *** 最适合在 Codespace 内的本地开发。如果你把代码部署到另一个环境,你需要用你的服务器提供商建议的 *** 来定义环境变量。
  5. 你可以在Codespaces构建和运行之后在Codespaces中使用秘密。例如,可以使用一个秘密:
    (1)当从集成终端或ssh会话中启动一个应用程序时。
    (2)在codespace运行后运行的开发容器生命周期脚本中。有关开发容器生命周期脚本的更多信息,请参阅开发容器网站上的文档:。
  6. 不能使用Codespace的私钥:
    (1)在codespace构建时间(即在docker文件或自定义入口点内)。
    (2)在开发容器特性内。欲了解更多信息,请参阅开发容器网站上的中的特征属性。

(via )

扫描二维码推送至手机访问。

版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。

本文链接:http://www.2345hao.cn/blog/index.php/post/8034.html

分享给朋友:

“用GitHub Codespaces安全地存储环境变量” 的相关文章

15种最佳编程字体以帮助您更愉悦地敲代码

15种最佳编程字体以帮助您更愉悦地敲代码

经过几个小时的努力工作后,您是否感到眼睛疲劳或难以阅读代码?许多程序员在开始头疼之前从没想过要切换字体。 如果您经常发现在尝试扫描一千行代码时眼睛模糊不清,或者在停止编码数小时后头疼,那么可能是时候尝试一种新字体了。即使您没有遇到这些症状,设计良好的字体通常也比默认系统字体具有更好的可读性。...

27个学习PHP的最佳教程(免费和付费资源)

27个学习PHP的最佳教程(免费和付费资源)

对于初学者和那些刚刚进入WordPress开发的人来说,PHP是您可以开始的最佳起点之一。这是一种超级简单直接的语言,使其成为之一,因此相当容易上手,它构成了在线开发的支柱。另外,如果你想在WordPress后端工作,你肯定需要学习它。 但是,如果您不想在昂贵的大学课程上花费数月或数年时间怎么...

2022年Web开发人员的平均工资统计报告

2022年Web开发人员的平均工资统计报告

想成为一名网络开发人员或好奇工作的哪些子类型的薪水最高?Web开发是一个竞争激烈、多样化的行业,随着新语言和框架的出现而不断发展。 询问Web开发人员的薪水是一个难以解决的问题(尽管我们尝试)。有太多的因素需要考虑。 无论您是自由开发者还是有兴趣从事更传统的工作、喜欢前端或后端工作,或者想知...

正面对比Node.js与PHP

正面对比Node.js与PHP

Node.js和PHP是Web开发工作中常用的两种基本Web技术。两者都为服务器端开发做出了贡献,Node.js甚至同时服务于客户端和服务器端开发。 PHP已经为开发人员服务了近3年,现在它为78%的网络提供支持。相比之下,Node.js相对较新,但扩展速度非常快,由于其全栈开发能力而成为流行...

深入了解什么是函数即服务 (FaaS)

深入了解什么是函数即服务 (FaaS)

您可能听说过SaaS,您可能听说过PaaS和IaaS,但您听说过函数即服务 (FaaS) 吗? FaaS市场正在快速增长。根据Allied Market Research的数据,2018年市场价值 。预计到2026年,这一数字将增长到240亿美元——这意味着该行业将从2020年到2026年以2...

什么是NGINX网络服务器?

什么是NGINX网络服务器?

Web服务器负责使浏览器和用户可以访问您的网站。您可能以前听说过,但您可能不知道它是什么或它是如何工作的。幸运的是,我们为这个流行的服务器软件整理了一份快速指南。 在这篇文章中,我们将介绍NGINX的基础知识。我们将看看它是什么,它与其他Web服务器有何不同,以及它是如何工作的。我们还将讨论它...