说明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

 
 
 
 

使用dotenv 管理nodejs 应用的环境变量&&docker-compose 运行的更多相关文章

  1. nodejs设置NODE_ENV环境变量

    看下app.js文件中的一部分代码,如下: //开发环境错误处理 // will print stacktrace if (app.get('env') === 'development') { ap ...

  2. nodejs设置NODE_ENV环境变量(1)

    看下app.js文件中的一部分代码,如下: //开发环境错误处理 // will print stacktrace if (app.get('env') === 'development') { ap ...

  3. nodejs设置NODE_ENV环境变量(2)

    引的人家的,原文地址:http://sorex.cnblogs.com/p/6200940.html 环境变量 环境变量是操作系统运行环境的一些参数.在开发环境或者部署环境中都需要使用到.本文讲述了使 ...

  4. WePY根据环境变量来改变运行时的参数

    WePY根据环境变量来改变运行时的参数 · Tencent/wepy Wiki https://github.com/Tencent/wepy/wiki/WePY%E6%A0%B9%E6%8D%AE% ...

  5. CentOS7 编译安装nodejs,配置环境变量记录

    每次都装,每次都查 阿里云备案了一个域名,续费了好多年,但是没钱买服务器,就挂在github上.今天收到消息:域名解析服务器不在阿里云,要被GG.只能咬牙买了个阿里云乞丐版. 所有服务都装好了,pin ...

  6. nodejs安装及环境变量的配置

    首先,nodejs安装到C盘的 建议安装到其他盘里,这是为了防止电脑出故障后C盘下载的东西会缺失 第一次安装nodejs的,第一步打开“nodejs官网:https://nodejs.org/zh-c ...

  7. nodeJS安装和环境变量的配置

    推荐博客:https://www.cnblogs.com/zhouyu2017/p/6485265.html npm config list 获取npm配置信息 ------------- 主要写一下 ...

  8. NodeJS学习:环境变量

    简介 环境变量(environment variables) 不属于 NodeJS 范畴,它是操作系统用于设定执行环境的参数.会在程序运行时传递给应用程序. NodeJS 获取环境变量,是通过 glo ...

  9. nodejs安装 及环境变量配置教程 超详细版

    ------------恢复内容开始------------ ------------恢复内容开始------------ 上篇文件 写到  遇到了两个棘手问题  : @终端进程启动失败: shell ...

随机推荐

  1. case when 和 decode 的比较分析

    一.case when 与 if - else 类似,语句如下:CASE expr WHEN expr1 THEN return_expr1         [WHEN expr2 THEN retu ...

  2. 零基础IDEA整合SpringBoot + Mybatis项目,及常见问题详细解答

    开发环境介绍:IDEA + maven + springboot2.1.4 1.用IDEA搭建SpringBoot项目:File - New - Project - Spring Initializr ...

  3. 【转】QT 添加外部库文件

    转自:Qt 添加外部库文件 LIBS += D:\Code\Opengltest\OpenGL32.Lib D:\Code\Opengltest\GlU32.Lib # 直接加绝对路径 LIBS += ...

  4. PAT B1013

    PAT B1013 标签(空格分隔): PAT 解法:埃氏筛法 注意点: 1. 由于不知道第n个素数有多大,所以要用一个大的数组来储存结果. 2. 注意输出格式,末尾不能有多余空格 #include ...

  5. JS的作用域链与原型链

    来一波,好记性不如烂笔头. 这两条链子可是很重要的. 作用域链 当执行一段JS代码(全局代码或函数)时,JS引擎会创建为其创建一个作用域又称为执行上下文(Execution Context),在页面加 ...

  6. python基础学习之文件操作&函数

    1.文件处理相关 1.编码问题 ①python2与python3中的默认编码: py2默认使用ASCII码,py3默认使用utf-8 ②为什么会出现中文乱码,中文乱码的情况有哪些? #sys.stdo ...

  7. 信息技术手册可视化进度报告 基于BeautifulSoup框架的python3爬取数据并连接保存到MySQL数据库

    老师给我们提供了一个word文档,里面是一份信息行业热词解释手册,要求我们把里面的文字存进数据库里面,然后在前台展示出来. 首先面临的问题是怎么把数据导进MySQL数据库,大家都有自己的方法,我采用了 ...

  8. Promise学习使用

    Promise是承诺的意思,“承诺可以获取异步操作的消息”,是一种异步执行的方案,Promise有各种开源实现,在ES6中被统一规范,由浏览器直接支持. Promise 对象有三种状态:pending ...

  9. 互动科技 快乐分享 X/Open DTP——分布式事务模型

    这一几天一直在回顾事务相关的知识,也准备把以前了解皮毛的知识进行一些深入总结,虽然这一些知识并没有用到,但是了解其实现原理还是很有必要的,因为知道了原理,你也能把它实现出来. 在上一节事务的编程模型里 ...

  10. 2018-2019-2 《网络对抗技术》Exp2 后门原理与实践 Week3 20165326

    Exp2 后门原理与实践 目录 1. 实验原理 2. 实验内容 3. 问题回答 4. 心得体会 实验原理简介 后门:不经过正常流程而访问系统的通道 ncat:底层工具,进行基本的TCP UDP数据收发 ...