使用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 减少容器的大小