nodejs应用程序不同部署环境下的差异配置方案

一、背景

nodejs应用程序,不同于java语言使用分布式配置,当部署于不同的环境里,因为环境的差异,配置项的值也不尽相同。
最常见的差异就是数据库的连接信息,而代码是一份,不能把生产环境的信息暴露在非生产环境。
所以,我们需要把差异值写在不同的配置文件里,比如我们本文要说的项目,它就有以下配置文件。

-rw-r--r-- 1 root root 2474 Nov  1  2022 config.default.js
-rw-r--r-- 1 root root  872 Jan 14  2019 config.local.js
-rw-r--r-- 1 root root  245 Aug 30  2022 config.prod.js
-rw-r--r-- 1 root root   72 Jan 14  2019 config.test.js

这是通过js配置文件的方式。

还有一类配置,通过环境变量的方式。比如很多语言的配置文件都是.env文件。

二、配置环境变量

这种方式比较常见,也比较简单。

docker run -it --name=webplay -p 5175:5174 -e "ALERT_LOG_LEVEL=info" -v /home/xxx/Documents/code/webPlayer/log:/root/logs xxx/webplay:1.0.0

这里的-e “ALERT_LOG_LEVEL=info”,把变量变量ALERT_LOG_LEVEL赋值为info。

如果是k8s,deployment.yaml文件,见下:

apiVersion: apps/v1
kind: Deployment
metadata:name: webplaynamespace: web-service
spec:template:metadata:labels:app: webplayspec:containers:- image: xxx/webplay:1.0.1imagePullPolicy: Alwaysname: webplaycommand:- npm- startenv:- name: TZvalue: Asia/Shanghai- name: ALERT_LOG_LEVELvalue: "info"# 后文略

三、ConfigMap持久化配置文件

接着上文所说,config.prod.js是生产环境的配置文件,其数据库连接地址是生产环境的,不能被暴露于开发环境。所以在构建docker image镜像的时候,该文件是不存在的,或者空的。

所以我们必须把config.prod.js的赋值放在生产,这就是代码和配置分离的原则。

怎么放呢?

这里采用了configMap,如果是docker或者docker-compose,使用-v映射即可。

1、新建configMap

apiVersion: v1
kind: ConfigMap
metadata:name: webplay-conf
data:config.prod.js: |/*** 生产环境配置** 最终生效的配置为 prod + default(前者覆盖后者)*/module.exports = app => {const exports = {};exports.mongoose = {client: {url: 'mongodb://{用户名}:{密码}@{host}:3717/webplay',options: {},},};exports.static = {maxAge: 0 // maxAge 缓存,默认 1};return exports;};

在这里插入图片描述
在这里插入图片描述

2、k8s deployment.yaml

添加一个卷(volume)来引用ConfigMap,并在容器的卷挂载(volume mount)部分指定挂载路径。

spec:selector:matchLabels:app: webplaytemplate:metadata:labels:app: webplayspec:containers:- command:- npm- startenv:- name: TZvalue: Asia/Shanghaiimage: >-xxx/webplay:1.0.1imagePullPolicy: Alwaysname: webplayvolumeMounts:- mountPath: /etc/localtimename: volume-localtime- mountPath: /opt/configname: configmap-volumevolumes:- hostPath:path: /etc/localtimetype: ''name: volume-localtime- configMap:defaultMode: 420items:- key: config.prod.jspath: config.prod.jsname: webplay-confname: configmap-volume

3、进入容器查看config.prod.js

在这里插入图片描述

如果你想只对config.prod.js进行差异配置,关于volume修改如下:

# 修改前volumeMounts:- mountPath: /opt/configname: configmap-volume
# 修改后volumeMounts:- mountPath: /opt/config/config.prod.jsname: configmap-volumesubPath: config.prod.js

对比修改前,/opt/config目录下的挂载有差异。修改前,config目录下只有configmap配置了的才挂载;而修改后,按需挂载文件,只有config.prod.js挂载,其他保持容器里的配置不变。

在这里插入图片描述

四、总结

因为涉及环境的差异,如何部署的时候指定不同的配置,是有状态部署必然需要解决的问题。

这里使用了环境变量和configmap两种方式,当然还可以使用分布式配置的方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/798565.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html+css+js编程入门----使用TitanIDE制作可切换主题的简单网页

在学习编程的时候,最重要的就是直接动手尝试,从实际挑战中逐渐作出调整。这个网站制作教程将根据以下几个步骤,手把手带你制作一个简易的网站,让你了解 HTML、CSS 和 JS 之间的关系与基本操作: 当我们从建筑的角度来理…

Unity学习笔记 - 第一个Hello World都算不上的项目

一、Unity安装 这里不细说安装了,首先需要Visual Studio,然后要安装Unity Hub,Unity Hub就像一个管理平台,安装完它之后,可以在它的界面上选择安装各个版本的编辑器。 开始您的创意项目并下载 Unity Hub | Unity通过 …

lv17 CGI移植 5-1

简介 CGIC是一个支持CGI开发的开放源码的标准C库,可以免费使用,只需要在开发的站点和程序文档中有个公开声明即可,表明程序使用了CGIC库,用户也可以购买商业授权而无需公开声明。 CGIC能够提供以下功能: 分析数据&a…

【第十二篇】使用BurpSuite实现CSRF(实战案例)

CSRF存在前提:简单的身份验证只能保证请求是发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的 业务场景:新增、删除、收藏、编辑、保存使用Burp发现CSRF漏洞的过程如下。 1、如图,存在修改邮箱的功能点如下: 2、修改邮箱的流量包,此时邮箱已被修改: 思路:是…

【leetcode】将x减到0的最小操作数/水果成篮/找到字符串中所有字母异位词{史上最容易懂的解析}

文章目录 1.将x减到0的最小操作数2.水果成篮3.找到字符串中所有字母异位词 1.将x减到0的最小操作数 分析题目 x不断地减去数组两端的值 看能否减到0;是不是就是在问:nums数组中存不存在【左端右端】组成的连续区间,区间上数的和为x 继续分析 …

【三十七】【算法分析与设计】STL 练习,凌波微步,栈和排序,吐泡泡,[HNOI2003]操作系统,优先队列自定义类型

凌波微步 链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 时间限制:C/C 1 秒,其他语言 2 秒 空间限制:C/C 32768K,其他语言 65536K 64bit IO Format: %lld 题目描述 小 Z 的体型实在是太胖了&…

小程序如何通过公众号发送新订单提醒

当客户在小程序上下单后,公众号会发送订单通知,这可以让管理员及时获知用户下单情况,方便及时处理订单和提供服务。下面是具体介绍如何设置公众号来发送订单服务通知。 方式一:通过采云公众号发送订单通知 此种方式是默认的通知…

vulhub打靶记录——Corrosion2

文章目录 主机发现端口扫描ssh—22search openssh EXP web服务—8080目录扫描登录tomcat后台 提权切换用户查看用户权限寻找SUID命令破解登录密文 总结 主机发现 使用nmap扫描局域网内存活的主机,命令如下: nmap -sP 192.168.151.0/24192.168.151.1&am…

真实对比kimi、通义千问、文心一言的写代码能力,到底谁强?

🤖AI改变生活:最近都在说月之暗面的kimi的各项能力吊打国内其他大模型,今天我们真实感受下 kimi、通义千问、文心一言的根据需求写代码的能力。 测评结果让人震惊! kimi kimi编程过程 我们先看一下热捧的月之暗面的kimi模型。 …

【PyQt5篇】和子线程进行通信

文章目录 &#x1f354;使用QtDesigner进行设计&#x1f6f8;和子线程进行通信&#x1f388;运行结果 &#x1f354;使用QtDesigner进行设计 我们首先使用QtDesigner设计界面 得到代码login.ui <?xml version"1.0" encoding"UTF-8"?> <ui …

Win10 桌面上应用程序的图标快捷键失效都变成白色图标 怎么修复?

环境&#xff1a; Win10 专业版 问题描述&#xff1a; Win10 桌面上应用程序的图标快捷键失效都变成白色图标 怎么修复 解决方案&#xff1a; 1.资源管理器&#xff0c;把“隐藏的项目”的打钩去掉,打开隐藏文件 2.在文件资源管理器的地址栏输入%localappdata%快速访问这…

C顺序表:通讯录

目录 前言 通讯录数据结构 通讯录初始化 查找名字 增加联系人 删除联系人 展示所有联系人 查找联系人 修改信息 销毁通讯录 完整通讯录代码 前言 数据结构中的顺序表如果已经学会了&#xff0c;那么我们就可以基于顺序表来完成一个通讯录了 通讯录其实我们使用前…

Coding and Paper Letter(八十八)

系列重启之CPL。 1 Coding: 1.一个Python库用来分析城市路网的工具箱&#xff0c;城市形态分析工具。 Madina 2.SkyPilot&#xff1a;在任何云上运行 LLM、AI 和 Batch。 通过简单的界面即可实现最大程度的节省性能、最高的 GPU 可用性和托管执行。 skypilot 3.探索美国卫…

creo扫描杯子学习笔记

creo扫描杯子学习笔记 扫描2要素&#xff1a; 轨迹&#xff0c; 截面。 多用于曲线扫描&#xff0c;区别于拉伸命令。 大小自定 旋转扫描 抽壳 草绘把手 扫描把手 复制曲面 实例化切除 成型

08 | Swoole 源码分析之 Timer 定时器模块

原文首发链接&#xff1a;Swoole 源码分析之 Timer 定时器模块 大家好&#xff0c;我是码农先森。 引言 Swoole 中的毫秒精度的定时器。底层基于 epoll_wait 和 setitimer 实现&#xff0c;数据结构使用最小堆&#xff0c;可支持添加大量定时器。 在同步 IO 进程中使用 seti…

今年过去了多少天?(switch)

//今年已经过去了几天&#xff1f; #include <stdio.h> int monthday(int year,int month){switch(month){case 1:return 31;case 2:if ((year % 4 0 && year % 100 ! 0)||year % 400 0){return 29;}else{return 28;}break;case 3:return 31;case 4:return 30;…

C语言进阶课程学习记录-第24课 - #pragma 使用分析

C语言进阶课程学习记录-第24课 - #pragma 使用分析 #pragma实验-#pragma messagecmd窗口运行 实验-pragma oncebcc编译报错gcc编译成功global.h代码优化 #pragma pack实验BCC编译器输出 小结 本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程&#xff0c;图片全部来源于课程…

k8s1(1),Linux运维基础开发与实践

#设置主机名 hostnamectl hostnameXXX #配置免密(包括操作机) ssh-keygen ssh-copy-id master*/slave* #传输hosts cat > /etc/hosts <<EOF 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain loca…

【Qt 学习笔记】Qt 中出现乱码的解释及讨论

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt 中出现乱码的解释及讨论 文章编号&#xff1a;Qt 学习笔记 / 06 文…

工单派单-saas工单处理软件效益分析,智能解决企业管理痛点亿发

企业对引入工单管理系统是有迫切需求的&#xff0c;工单管理系统可以有效地管理任务和工作流程&#xff0c;提高工作效率和客户满意度。 在没有工单管理系统之前&#xff0c;许多企业可能面临着诸如任务分配不清晰、信息不透明、工作流程混乱等管理挑战。举例来说&#xff0c;…