MyEMS开源能源管理系统核心代码解读015
MyEMS开源能源管理系统适用于建筑、工厂、商场、医院、园区的电、水、气等能源数据采集、分析、报表,还有光伏、储能、充电桩、微电网、设备控制、故障诊断、工单管理、人工智能优化等可选功能。资深专业团队开发维护,保障长期支持。用开源助力企业集团、产业园区、能源运营商低碳发展!
本期解读:
myems-web Dockerfile:myems/myems-web/Dockerfile
源代码链接:https://gitee.com/myems/myems/blob/master/myems-web/Dockerfile?sessionid=261001321
FROM node:latest as build-stageWORKDIR /optCOPY . .
# use this for node v17.x.x or above, note that the default command maybe slow at sometimeRUN npm install --unsafe-perm=true --allow-root --legacy-peer-deps
# use this if above command is slow or unavialiable# RUN npm install --unsafe-perm=true --allow-root --legacy-peer-deps --registry https://registry.npm.taobao.org
# use this (without --legacy-peer-deps) for node v16.x.x# RUN npm install --unsafe-perm=true --allow-root
RUN npm run build
FROM nginx:latest as production-stage
RUN apt update && apt install -y nano telnet
# remove the default configRUN rm /etc/nginx/conf.d/default.conf && rm /etc/nginx/nginx.conf
# create new root folderRUN mkdir -p /var/www/myems-web
COPY nginx.conf /etc/nginx/COPY --from=build-stage /opt/build/ /var/www/myems-webEXPOSE 80CMD ["nginx", "-c", "/etc/nginx/nginx.conf", "-g", "daemon off;"]
这个Dockerfile文件是用于构建一个基于Node.js和Nginx的web应用的Docker镜像。它使用了多阶段构建(multi-stage build)来优化最终镜像的大小和结构。
概要
1.构建阶段:使用Node.js环境来构建前端应用。
2.生产阶段:使用Nginx作为静态文件服务器来部署构建好的前端应用。
详细解析
1.FROM node:latest as build-stage
这行代码指定了构建阶段的基础镜像为最新版本的Node.js。
2.WORKDIR /opt
设置工作目录为/opt。
3.COPY . .
将当前目录下的所有文件复制到工作目录中。
4.RUN npm install --unsafe-perm=true --allow-root --legacy-peer-deps
运行npm安装依赖。这个命令适用于Node.js v17.x.x或更高版本。--unsafe-perm=true和--allow-root参数用于解决权限问题,--legacy-peer-deps用于处理依赖关系。
5.RUN npm run build
执行构建脚本,通常是编译、打包前端资源。
6.FROM nginx:latest as production-stage
开始生产阶段的构建,使用最新版本的Nginx作为基础镜像。
7.RUN apt update && apt install -y nano telnet
更新软件包列表并安装nano和telnet工具。
8.RUN rm /etc/nginx/conf.d/default.conf && rm /etc/nginx/nginx.conf
删除Nginx的默认配置文件。
9.RUN mkdir -p /var/www/myems-web
创建新的根目录用于存放前端应用。
10.COPY nginx.conf /etc/nginx/
将自定义的Nginx配置文件复制到Nginx的配置目录。
11.COPY --from=build-stage /opt/build/ /var/www/myems-web
从构建阶段复制构建好的前端应用到Nginx的根目录。
12.EXPOSE 80 - 暴露80端口,Nginx默认监听此端口。
13.CMD ["nginx", "-c", "/etc/nginx/nginx.conf", "-g", "daemon off;"]
设置容器启动时执行的命令,这里启动Nginx服务器。
MyEMS开源能源管理系统核心代码解读015的更多相关文章
- 优秀开源代码解读之JS与iOS Native Code互调的优雅实现方案
简介 本篇为大家介绍一个优秀的开源小项目:WebViewJavascriptBridge. 它优雅地实现了在使用UIWebView时JS与ios 的ObjC nativecode之间的互调,支持消息发 ...
- Hybrid----优秀开源代码解读之JS与iOS Native Code互调的优雅实现方案-备
本篇为大家介绍一个优秀的开源小项目:WebViewJavascriptBridge. 它优雅地实现了在使用UIWebView时JS与ios 的ObjC nativecode之间的互调,支持消息发送.接 ...
- itest 开源测试管理项目中封装的下拉列表小组件:实现下拉列表使用者前后端0行代码
导读: 主要从4个方面来阐述,1:背景:2:思路:3:代码实现:4:使用 一:封装背景 像easy ui 之类的纯前端组件,也有下拉列表组件,但是使用的时候,每个下拉列表,要配一个URL ...
- 腾讯开源的 Paxos库 PhxPaxos 代码解读---Accept阶段(一)
腾讯开源的 Paxos库 PhxPaxos 代码解读---Accept阶段(一) 在看Accept阶段代码之前, 我们再回想一下 Basic Paxos算法; 1. Basic Paxos 算法是为 ...
- Android MVP模式 谷歌官方代码解读
Google官方MVP Sample代码解读 关于Android程序的构架, 当前(2016.10)最流行的模式即为MVP模式, Google官方提供了Sample代码来展示这种模式的用法. Repo ...
- msysGit管理GitHub代码
msysGit管理GitHub代码 代码的管理,在日常开发中是很重要的环节,程序员的修炼三部曲——版本控制,单元测试,项目自动化. 本篇就简单的说说通过msysGit来管理GitHub中的代码,实 ...
- C/C++ 开源库及示例代码
C/C++ 开源库及示例代码 Table of Contents 说明 1 综合性的库 2 数据结构 & 算法 2.1 容器 2.1.1 标准容器 2.1.2 Lockfree 的容器 2.1 ...
- Google免费的SVN服务器管理VS2010代码
原文:Google免费的SVN服务器管理VS2010代码 前言 Google免费为我们提供了代码管理的SVN服务器.首先我这里用的Win7 64的电脑系统,用VS2010进行的代码开发.这里管理代码需 ...
- spring JdbcTemplate 在itest 开源测试管理项目中的浅层(5个使用场景)封装
导读: 主要从4个方面来阐述,1:背景:2:思路:3:代码实现:4:使用 一:封装背景, 在做项目的时候,用的JPA ,有些复杂查询,比如报表用原生的JdbcTemplate ,很不方便;传参也不方便 ...
- weex官方demo weex-hackernews代码解读(上)
一.介绍 weex 是阿里出品的一个类似RN的框架,可以使用前端技术来开发移动应用,实现一份代码支持H5,IOS和Android.最新版本的weex已默认将vue.js作为前端框架,而weex-hac ...
随机推荐
- Spring Boot 整合Redisson操作Redis基础篇
<Spring Boot 整合Redisson配置篇> <Spring Boot 整合Redisson操作Redis基础篇> <Redisson批量操作类RBuckets ...
- BAPI_OUTB_DELIVERY_CREATE_SLS、BAPI_OUTB_DELIVERY_CONFIRM_DEC 创建交货单,交货单过账
FUNCTION zsd_dn_create1. *"-------------------------------------------------------------------- ...
- RT-Thread 4.0.3 适配 UART_V2 版本
RT-Thread 4.0.3 适配 UART_V2 版本 本文为针对发布版4.0.3 进行 UART_V2 驱动的移植适配操作笔记. 由于使用了 libmodbus 软件包,需要 posix_ter ...
- el-popover无法弹出的问题解决
1.不能再el-popover上⾯使⽤v-if进⾏显⽰隐藏,应该⽤v-show2.在每⼀个el-popover上都增加⼀个ref确定每个el-popover都是唯⼀的,:ref="`node ...
- memcached学习手记1-windows下xampp安装配置memcached-1.4.13-win32-bin, 及php_memcache.dll(php5.4)
1. 下载memcache的windows版, 解压放某个盘下面, 比如在D:\memcached下载地址:http://code.jellycan.com/files/memcached-1.2.6 ...
- CTC蜀道会:第一次线下分享活动圆满结束
近期,成都.NET俱乐部核心成员经过讨论会,我们成立了CTC蜀道会,它是一个专注于创业历程.研发管理.AIGC.副业之路..NET.Vue.微软技术.开源技术等领域的社区,立足于蓉城成都,致力于连接同 ...
- 微信小程序里 wx:for和wx:for-item区别(补充下wx:key)
wx:for 一维数组情况: 在页面上 view wx:for ="{{list}}" {{item.id}} view 是循环list item是List的别名 多维数组情况 ...
- phpstrom (xdebug)远程断点调试 homestead (纯图)
1.本地调试可以参考:https://www.cnblogs.com/LWMLWM/p/8251905.html 2.远程调试:主要是在虚拟机上如何进行 1)打开xshell ->file-&g ...
- 被老板怼后,我为uni-app项目引入环境标志
前情 最近公司在规划一个全新项目,但是又对项目前景有些怀疑,于是想做一个项目获客验证的运营活动,就是为了决定后续项目可行性和投入规模. 注:时间都宝贵,如果不想浪费时间看一些无聊的事情原委的,只想了解 ...
- java 中的函数参数传递方式
简介 值传递. 但是对于基本数据类型, 传递的是就是数值, 如果不是基本数据类型, 传递的就是对象的地址,也就是将对象的地址拷贝了一份传递过去. 参考链接 https://www.cnblogs.co ...