使用dotenv 管理nodejs 應用的環境變量&&docker-compose 運行


說明dotenv 是一個很方便的符合12 factor 的環境變量管理工具,使用很方便,實際上里面的代碼也不是很多

測試使用docker 進行環境部署,為了方便分發使用pkg 進行打包,使用alpine制作比較小的容器鏡像

環境准備

  • nodejs 項目初始化
mkdirdotenv-app
cd dotenv-app && yarn init -y
  • 添加依賴dotenv
yarn add dotenv
  • 添加構建依賴(pkg 包)
yarn add pkg --dev
  • 修改package.json 添加構建script
{
  "name": "dotenv-app",
  "version": "1.0.0",
  "main": "app.js",
  "license": "MIT",
  "dependencies": {
    "dotenv": "^7.0.0"
  },
  "bin": "app.js",
  "pkg": {
    "scripts": [
      "app.js"
    ]
  },
  "scripts": {
    "app": "node app",
    "package": "pkg .",
    "package:alpine":"pkg . --targets=alpine"
  },
  "devDependencies": {
    "pkg": "^4.3.7"
  }
}
  • 使用dotenv 代碼
require('dotenv').config()
let {name,age,platform} = {
   ...process.env
}
console.log(`userinfo is name: ${name}, age: ${age},platform: ${platform}`)
  • 代碼說明
    代碼很簡單,主要是package.json 的script 構建說明,添加了特定平台的處理

啟動&&測試

  • 啟動
node app.js
  • 添加.env 配置文件
    內容如下:
name = dalong
age =33
platform = userlogin-app

效果

node app.js 
userinfo is name: dalong, age: 33,platform: userlogin-app

添加docker 運行說明

  • docker-compose 文件
version: "3"
services:
  app:
    image: dalongrong/dotenv-alpine-demo
    build: ./
  • Dockerfile

    使用了node:10-alpine 鏡像,為了減少鏡像的大小,使用多階段構建,注意需要libstdc++ 包

FROM node:10-alpine as build
LABEL AUTHOR="dalongrong"
LABEL EMAIL="1141591465@qq.com"
WORKDIR /app
COPY app.js /app
COPY package.json /app
COPY .env /app
RUN yarn && yarn package:alpine && ls .

FROM alpine
WORKDIR /app
COPY --from=build /app/dotenv-app /app
COPY --from=build /app/.env /app
RUN apk add --update && apk add libstdc++ && \
    chmod +x /app/dotenv-app
ENTRYPOINT [ "./dotenv-app" ]
  • 構建&&使用
docker-compose build
docker-compose up 

效果

docker-compose up 
Creating dotenv-app_app_1 ... done
Attaching to dotenv-app_app_1
app_1 | userinfo is name: dalong, age: 33,platform: userlogin-app
dotenv-app_app_1 exited with code 0
  • 單獨使用容器運行方法

    使用數據卷掛載,但是需要先創建.env 文件

docker run -it -v $PWD/.env:/app/.env dalongrong/dotenv-alpine-demo

說明

主要是使用pkg, 簡化nodejs 應用的分發,同時使用docker 進行部署,使用alpine 減少容器的大小

參考資料

https://github.com/rongfengliang/dotenv-pkg-demo
https://github.com/zeit/pkg
https://www.npmjs.com/package/dotenv
https://12factor.net/config


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM