• 使用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

  • 相关阅读:
    Spring mvc配置
    css选择器
    网页全屏背景设计
    2018年的第一篇
    总结2016,规划2017
    Jenkins上Git ssh登陆配置
    Jenkins构建项目,JAVA_HOME is not defined correctly
    运行Jmeter.bat出错:Not able to find java executor or version. Please check your installation. errorlevel=2
    Selenium获取input值的两种方法:WebElement.getAttribute("value")和WebElement.getText()
    Jmeter
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/10783341.html
Copyright © 2020-2023  润新知