摘要:引言本期精讀的文章是如何在使用環(huán)境變量。介紹了開發(fā)與生產(chǎn)環(huán)境如何管理環(huán)境變量。本地通過調(diào)試環(huán)境變量既方便又安全。更多討論討論地址是精讀如何在使用環(huán)境變量如果你想?yún)⑴c討論,請點擊這里,每周都有新的主題,周末或周一發(fā)布。
1 引言
本期精讀的文章是:如何在 nodejs 使用環(huán)境變量。
介紹了開發(fā)與生產(chǎn)環(huán)境如何管理環(huán)境變量。
這里環(huán)境變量指的是數(shù)據(jù)庫密碼等重要數(shù)據(jù),而不是指普通變量傳參。
2 概述環(huán)境變量歷史悠久,在運(yùn)行第一行 JAVA 代碼之前,你就得將環(huán)境變量設(shè)置好。
可問題是,系統(tǒng)變量并不易用,比如結(jié)尾是否要使用分號,JAVA_HOME 與 PATH 在哪些程序中功能相同?而且與操作系統(tǒng)綁定,在操作系統(tǒng)級別設(shè)置的變量,給 JAVA 級別的程序用還好,但用來存數(shù)據(jù)庫密碼就不合適了。
在 Node 中,我們怎樣使用環(huán)境變量呢?作者給出了如下的建議:
通過命令行傳遞PORT=65534 node bin/www
這是最基本、最常用的方式,可是當(dāng)變量數(shù)量過多,不免覺得很崩潰:
PORT=65534 DB_CONN="mongodb://react-cosmos-db:swQOhAsVjfHx3Q9VXh29T9U8xQNVGQ78lEQaL6yMNq3rOSA1WhUXHTOcmDf38Q8rg14NHtQLcUuMA==@react-cosmos-db.documents.azure.com:19373/?ssl=true&replicaSet=globaldb" SECRET_KEY=b6264fca-8adf-457f-a94f-5a4b0d1ca2b9 node bin/www
作者提到,這種代碼沒有拓展性。作者認(rèn)為,對工程師來說,可拓展性甚至比能正確運(yùn)行更為重要。
使用 .env 文件很顯然,命令行寫不下了就寫到文件里:
PORT=65534 DB_CONN="mongodb://react-cosmos-db:swQOhAsVjfHx3Q9VXh29T9U8xQNVGQ78lEQaL6yMNq3rOSA1WhUXHTOcmDf38Q8rg14NHtQLcUuMA==@react-cosmos-db.documents.azure.com:10255/?ssl=true&replicaSet=globaldb" SECRET_KEY="b6264fca-8adf-457f-a94f-5a4b0d1ca2b9"
通過 dotenv 這個 npm 包可以讀取 .env 文件的配置到 Nodejs 程序中。
npm install dotenv --save
安裝后,直接調(diào)用它解析,就可以從環(huán)境變量中拿到 .env 文件的配置信息了:
require("dotenv").config(); var MongoClient = require("mongodb").MongoClient; // Reference .env vars off of the process.env object MongoClient.connect( process.env.DB_CONN, function(err, db) { if (!err) { console.log("We are connected"); } } );
這有個問題,不要將配置文件發(fā)送到 Git 倉庫,可能會泄漏隱私數(shù)據(jù)。然而 VSCode 幫你解決了這個問題(什么,你不用 VSCode?)
VSCode 啟動配置VSCode 可以配置 Node 啟動配置,在這里可以設(shè)置環(huán)境變量:
為了和 .env 文件打通,我們可以在配置里設(shè)置 envFile 屬性:
{ "envFile": "${workspaceFolder}/.env" }
程序中依然使用 dotenv 讀取環(huán)境變量。這么做將配置保留在 VSCode 中,而不是代碼中,不用再擔(dān)心不小心上傳了配置文件啦!
使用 Npm Scripts作者推薦了一個良好的習(xí)慣:使用 npm start 運(yùn)行項目,而不是暴露出 Node 命令。那么首先在 VSCode launch.json 中配置 Npm 模式:
記住,需要給 Node 腳本添加 --inspect 參數(shù),才能觸發(fā) VSCode debugger 的鉤子:
這樣一來,通過 npm start 就可以啟動 Node,并讀取配置在 VSCode 的環(huán)境變量。
生產(chǎn)環(huán)境的環(huán)境變量上面介紹了本地開發(fā)如何使用環(huán)境變量,但在生產(chǎn)環(huán)境,環(huán)境變量必須得換個方式管理。
不知道作者與微軟是什么關(guān)系,這塊推薦了微軟的 Azure 管理環(huán)境變量。
主要思路是通過一個不賺差價的中間商提供環(huán)境變量管理服務(wù)。通過 Azure CLI 啟動你的 Node 項目,就可以從云服務(wù)平臺拿到環(huán)境變量信息。
3 精讀環(huán)境變量管理是非常重要的問題,以前還看到將公司數(shù)據(jù)庫密碼提交到 Github 的例子,反面教材非常多。
本文介紹了許多本地開發(fā)使用環(huán)境變量的方式,筆者補(bǔ)充一下生產(chǎn)環(huán)境使用環(huán)境變量的經(jīng)驗。
私有部署如果你在一個高自動化運(yùn)維水平的公司,這個問題已經(jīng)被私有 Git + 私有云服務(wù)器天然解決了。
是的,部署私有 Git,把數(shù)據(jù)庫密碼提交到 Git 倉庫才是最完美的方案!
持久化配置服務(wù)通過自建,或者開源的 Azure 持久化配置服務(wù)存儲環(huán)境變量,在服務(wù)器利用 SDK 獲取它。
一般云服務(wù)商都會打包這項服務(wù),因為只有服務(wù)器和持久化配置服務(wù)都由一個供應(yīng)商提供,供應(yīng)商才能將持久化配置與服務(wù)器權(quán)限形成關(guān)聯(lián),讓第三方服務(wù)器即便拿到 Token 也無法訪問配置。
加密服務(wù)如果安全級別特別高,內(nèi)部 Git 都不允許提交,又要防止第三方(比如某寬帶運(yùn)營商)攔截到信息,就要使用加密服務(wù)了。
流程一般是:
在加密平臺注冊,拿到密鑰。
在加密平臺設(shè)置環(huán)境變量,加密平臺會對內(nèi)容進(jìn)行加密。
利用 Node SDK 獲取到加密平臺輸出的密文。
利用 SDK 和密鑰解密成明文。
4 總結(jié)對待在基礎(chǔ)設(shè)施完備公司的同學(xué),可能不需要關(guān)心環(huán)境變量安全性問題。對于自己搭建博客,或者使用第三方服務(wù)器的同學(xué),這篇文章告訴我們?nèi)齻€注意點:
不要將重要環(huán)境變量提交到公開的 Git 倉庫。
本地通過 VSCode 調(diào)試環(huán)境變量既方便又安全。
生產(chǎn)環(huán)境通過云服務(wù)商提供的環(huán)境變量配置服務(wù)拿到環(huán)境變量。
5 更多討論討論地址是:精讀《如何在 nodejs 使用環(huán)境變量》 · Issue #89 · dt-fe/weekly
如果你想?yún)⑴c討論,請點擊這里,每周都有新的主題,周末或周一發(fā)布。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/95358.html
摘要:舉例來說即便某個失敗了,也不會導(dǎo)致的發(fā)生,這樣在不在乎是否有項目失敗,只要拿到都結(jié)束的信號的場景很有用。對于則稍有不同只要有子項,就會完成,哪怕第一個了,而第二個了,也會,而對于,這種場景會直接。 1. 引言 本周精讀的內(nèi)容是:Google I/O 19。 2019 年 Google I/O 介紹了一些激動人心的 JS 新特性,這些特性有些已經(jīng)被主流瀏覽器實現(xiàn),并支持 polyfill...
摘要:更好的安全性隨著的發(fā)布,從升級到了,更安全且更易配置。通過使用,程序可以減少握手所需時間來提升請求性能。提供診斷報告有一項實驗功能,根據(jù)用戶需求提供診斷報告,包括崩潰性能下降內(nèi)存泄露使用高等等。前端精讀幫你篩選靠譜的內(nèi)容。 1. 引言 Node12 發(fā)布有幾個月了,讓我們跟隨 Nodejs 12 一起看看 Node12 帶來了哪些改變。 2. 概述 Node12 與以往的版本不同,帶來...
摘要:引言本期精讀的文章是,探討如何監(jiān)聽文件的變化。概述使用使用內(nèi)置函數(shù)似乎可以解決問題但你可能會發(fā)現(xiàn)這個回調(diào)執(zhí)行有一定延遲,因為是通過輪詢檢測文件變化的,它并不能實時作出反饋,而且只能監(jiān)聽一個文件,存在效率問題。 1 引言 本期精讀的文章是:How to Watch for Files Changes in Node.js,探討如何監(jiān)聽文件的變化。 如果想使用現(xiàn)成的庫,推薦 chokida...
摘要:我是這一期的主持人黃子毅本期精讀的文章是。模塊化需要保證全局變量盡量干凈,目前為止的模塊化方案都沒有很好的做到這一點。精讀本次提出獨(dú)到觀點的同學(xué)有流形,黃子毅,蘇里約,,楊森,淡蒼,留影,精讀由此歸納。 這次是前端精讀期刊與大家第一次正式碰面,我們每周會精讀并分析若干篇精品好文,試圖討論出結(jié)論性觀點。沒錯,我們試圖通過觀點的碰撞,爭做無主觀精品好文的意見領(lǐng)袖。 我是這一期的主持人 ——...
摘要:前端框架總是帶入后端思維,而則是把前端思維帶入了后端運(yùn)維。前端同學(xué)對應(yīng)該尤為激動。而帶來了進(jìn)一步優(yōu)化的空間。當(dāng)服務(wù)器面臨攻擊重啟磁盤故障時,打開復(fù)雜的工作臺或登陸后一通操作才能恢復(fù)。 1. 引言 Serverless 是一種 無服務(wù)器架構(gòu),讓用戶無需關(guān)心程序運(yùn)行環(huán)境、資源及數(shù)量,只要將精力 Focus 到業(yè)務(wù)邏輯上的技術(shù)。 現(xiàn)在公司已經(jīng)實現(xiàn) DevOps 化,正在向 Serverles...
閱讀 3870·2021-09-10 11:22
閱讀 2325·2021-09-03 10:30
閱讀 3660·2019-08-30 15:55
閱讀 1873·2019-08-30 15:44
閱讀 840·2019-08-30 15:44
閱讀 582·2019-08-30 14:04
閱讀 3042·2019-08-29 17:18
閱讀 1262·2019-08-29 15:04