使用 Cloud66 部署 Node.js 應用程式

在 Cloud66 上使用加密的 .env.vault 檔案部署 Node.js 應用程式。

初始設定

如果尚未建立,請建立一個 index.js 檔案。

index.js

// index.js
const PORT = process.env.PORT || 3000
const http = require('http')
const server = http.createServer((req, res) => {
  res.statusCode = 200
  res.setHeader('Content-Type', 'text/plain')
  res.end(`Hello ${process.env.HELLO}`)
})

server.listen(PORT, () => {
  console.log(`Server running on port:${PORT}/`)
})

新增一個空的 package.json 檔案 (Docker 建置需要)。

package.json

{}

新增一個 Dockerfile

Dockerfile

# Dockerfile
FROM node:16
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD node index.js

將其提交到程式碼中,推送到 GitHub,並將其連線到您的 Cloud66 帳戶。

app.cloud66.com

在下一個畫面中,請務必將本機埠設定為 3000,http 設定為 80,https 設定為 443

app.cloud66.com

確認一切看起來都沒問題,然後按一下「開始部署」。

app.cloud66.com

瀏覽您的應用程式。

您在 cloud66 上執行的應用程式

部署後,您的應用程式將顯示 'Hello undefined',因為它還無法存取環境變數。接下來我們來執行這項操作。

安裝 dotenv

安裝 dotenv

npm install dotenv --save # Requires dotenv >= 16.1.0

在您的專案根目錄中建立一個 .env 檔案。

.env

# .env
HELLO="World"

盡早在您的應用程式中匯入並設定 dotenv。

index.js

// index.js
require('dotenv').config()
console.log(process.env) // remove this after you've confirmed it is working

const PORT = process.env.PORT || 3000
const http = require('http')
...

嘗試在本機執行它。

docker build -t docker-nodejs . && docker run --rm -it -p 3000:3000 --init docker-nodejs
{
  ...
  HELLO: 'World'
}
Server running on port:3000/

完美。現在 process.env 具有您在 .env 檔案中定義的金鑰和值。

本機主機

以上涵蓋了本機開發建置。接下來我們來解決生產環境的問題。

建立 .env.vault

推送您最新的 .env 檔案變更,並編輯您的生產機密。 深入了解同步

npx dotenv-vault@latest push
npx dotenv-vault@latest open production

使用 UI 為每個環境設定這些機密。

www.dotenv.org

然後建置您的加密 .env.vault 檔案。

npx dotenv-vault@latest build

其內容應如下所示。

.env.vault

#/-------------------.env.vault---------------------/
#/         cloud-agnostic vaulting standard         /
#/   [how it works](https://dotenv.org/env-vault)   /
#/--------------------------------------------------/

# development
DOTENV_VAULT_DEVELOPMENT="/HqNgQWsf6Oh6XB9pI/CGkdgCe6d4/vWZHgP50RRoDTzkzPQk/xOaQs="
DOTENV_VAULT_DEVELOPMENT_VERSION=2

# production
DOTENV_VAULT_PRODUCTION="x26PuIKQ/xZ5eKrYomKngM+dO/9v1vxhwslE/zjHdg3l+H6q6PheB5GVDVIbZg=="
DOTENV_VAULT_PRODUCTION_VERSION=2

設定 DOTENV_KEY

擷取您的生產環境 DOTENV_KEY

npx dotenv-vault@latest keys production
# outputs: dotenv://:[email protected]/vault/.env.vault?environment=production

在 Cloud66 上設定 DOTENV_KEY

app.cloud66.com

部署

將這些變更安全地提交到程式碼並進行部署。

就這樣!在部署時,您的 .env.vault 檔案將被解密,其生產環境機密將作為環境變數注入 - 正是時候。

當您在記錄中看到 'Loading env from encrypted .env.vault' 時,您就會知道事情已正確運作。如果未設定 DOTENV_KEY(例如在本機電腦上開發時),它將會回復為標準的 dotenv 功能。

app.cloud66.com