使用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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2017-04-28 nginx fastcgi 优化
2014-04-28 转 sql 优化
2014-04-28 ORACLE与SQL SERVER语法区别
2014-04-28 oracle 以及 sql server mysql 空值默认值修改
2014-04-28 Oracle C#处理时间类型的Insert