使用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
使用dotenv 管理nodejs 应用的环境变量&&docker-compose 运行的更多相关文章
- nodejs设置NODE_ENV环境变量
看下app.js文件中的一部分代码,如下: //开发环境错误处理 // will print stacktrace if (app.get('env') === 'development') { ap ...
- nodejs设置NODE_ENV环境变量(1)
看下app.js文件中的一部分代码,如下: //开发环境错误处理 // will print stacktrace if (app.get('env') === 'development') { ap ...
- nodejs设置NODE_ENV环境变量(2)
引的人家的,原文地址:http://sorex.cnblogs.com/p/6200940.html 环境变量 环境变量是操作系统运行环境的一些参数.在开发环境或者部署环境中都需要使用到.本文讲述了使 ...
- WePY根据环境变量来改变运行时的参数
WePY根据环境变量来改变运行时的参数 · Tencent/wepy Wiki https://github.com/Tencent/wepy/wiki/WePY%E6%A0%B9%E6%8D%AE% ...
- CentOS7 编译安装nodejs,配置环境变量记录
每次都装,每次都查 阿里云备案了一个域名,续费了好多年,但是没钱买服务器,就挂在github上.今天收到消息:域名解析服务器不在阿里云,要被GG.只能咬牙买了个阿里云乞丐版. 所有服务都装好了,pin ...
- nodejs安装及环境变量的配置
首先,nodejs安装到C盘的 建议安装到其他盘里,这是为了防止电脑出故障后C盘下载的东西会缺失 第一次安装nodejs的,第一步打开“nodejs官网:https://nodejs.org/zh-c ...
- nodeJS安装和环境变量的配置
推荐博客:https://www.cnblogs.com/zhouyu2017/p/6485265.html npm config list 获取npm配置信息 ------------- 主要写一下 ...
- NodeJS学习:环境变量
简介 环境变量(environment variables) 不属于 NodeJS 范畴,它是操作系统用于设定执行环境的参数.会在程序运行时传递给应用程序. NodeJS 获取环境变量,是通过 glo ...
- nodejs安装 及环境变量配置教程 超详细版
------------恢复内容开始------------ ------------恢复内容开始------------ 上篇文件 写到 遇到了两个棘手问题 : @终端进程启动失败: shell ...
随机推荐
- 深入java----java内存区域及对象的创建
看完深入理解jvm之后自己再用图的方式进行一遍梳理,用以加深理解. 第一部分,首先对整体java运行时内存区域有一个整体框架式的了解. 运行时内存区域的划分如上图所示,那么接下里看看一个对象的创建又怎 ...
- spring中ApplicationListener的用法
1.实现ApplicationListener接口,并重写onApplicationEvent方法 @Component public class RSAKeyInitListener impleme ...
- 查询总耗CPU最多与平均耗CPU最多的SQL语句
总耗CPU最多的前20个SQL total_worker_time AS [总消耗CPU 时间(ms)],execution_count [运行次数], qs.total_worker_time AS ...
- servlet操作本地文件汇总: 判断文件是否存在;文件重命名;文件复制; 获取文件属性信息,转成Json对象; 获取指定类型的文件; 查找替换.txt中的文本
package servlet; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; ...
- 每天一点Linux系列之—vim
- ORA-01555快照过旧报错
一.现象 将数据迁移到新库时,执行较大的存过,会报这个错误. 二.原因 产生该报错的原因: (1)sql执行比较久,需要优化sql (2)回滚段过小 (3)undo保存时间过短 三.具体检查及恢复 1 ...
- 安装Python mysqlclient出现“OSError: mysql_config not found”错误
问题: 使用Python3开发一个管理平台,用MySQL数据库存放元数据.使用pip安装mysqlclient模块时出现“OSError: mysql_config not ...
- 左侧 随着页面滚动固定 fixed. scroll .scrollTop
1.图片. 要求:随着页面滚动 . 左侧应该顶着 浏览器顶部, 向上回滚, 就恢复原状. 2. 代码: html <div class="all "> <!-- ...
- MSP430中断的一个细节问题
关于中断标志: 从SPI发送一字节数据: void SPI_Set_SD_Byte(unsigned char txData) { UCB0TXBUF = txData; // 写入发送缓冲区 whi ...
- 学习Git笔记(更新中)
参考网址:https://blog.csdn.net/zmx729618/article/details/52174373 跟着练习一下,写的很好. Git:是一个分布式版本控制系统. GitHub: ...