MyEMS开源能源管理系统核心代码解读015

简介: 这段Dockerfile用于构建一个基于Python的API应用容器,依托`python:slim`镜像实现轻量化部署。它安装了必要工具(如nano、telnet),创建文件上传目录,复制应用代码并安装依赖(支持阿里云PyPI镜像加速)。通过暴露8000端口和Gunicorn服务器配置(4个工作进程、600秒超时),确保API服务高效稳定运行。此配置适用于Python API应用的容器化部署,提升跨环境一致性与可移植性。

MyEMS开源能源管理系统适用于建筑、工厂、商场、医院、园区的电、水、气等能源数据采集、分析、报表,还有光伏、储能、充电桩、微电网、设备控制、故障诊断、工单管理、人工智能优化等可选功能。资深专业团队开发维护,保障长期支持。用开源助力企业集团、产业园区、能源运营商低碳发展!

官网 :https://myems.io

MyEMS开源社区版下载:https://gitee.com/myems/myems

本期解读:
myems-web Dockerfile:myems/myems-web/Dockerfile

源代码链接:https://gitee.com/myems/myems/blob/master/myems-web/Dockerfile?sessionid=264191869

FROM node:latest as build-stage
WORKDIR /opt
COPY . .

# use this for node v17.x.x or above, note that the default command maybe slow at sometime
RUN 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 config
RUN rm /etc/nginx/conf.d/default.conf && rm /etc/nginx/nginx.conf

# create new root folder
RUN mkdir -p /var/www/myems-web

COPY nginx.conf /etc/nginx/
COPY --from=build-stage /opt/build/ /var/www/myems-web
EXPOSE 80
CMD ["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服务器。

补充说明

  • 这个Dockerfile使用了多阶段构建,可以减少最终镜像的大小,因为它只包含了运行应用所必需的文件。
  • 在构建阶段,使用了Node.js环境来处理前端资源的构建。
  • 在生产阶段,使用了Nginx作为静态文件服务器,更适合在生产环境中提供服务。
相关文章
|
存储 Cloud Native Ubuntu
音视频 ffmpeg命令直播拉流推流
音视频 ffmpeg命令直播拉流推流
|
Java 数据库连接 Spring
Spring Boot命令行启动添加参数
Spring Boot命令行启动添加参数
859 0
|
安全 机器人 API
简单几步,钉钉机器人秒变通义千问对话机器人
通过阿里云计算巢AppFlow平台,无需编码,只需简单几步,即可将钉钉机器人转化为通义千问对话机器人。首先在灵积模型服务平台获取API Key,然后在AppFlow中配置连接器,授权并保存Webhook Url。在钉钉中创建自定义机器人,选择Outgoing功能,填写签名和Webhook地址。最后,@机器人即可开始对话。此外,还提供了通过钉钉开放平台创建机器人的步骤。AppFlow简化了集成过程,加速了企业自动化服务流程。
825 0
安装JDK18没有JRE环境的解决办法
安装JDK18没有JRE环境的解决办法
1005 61
|
Java Android开发 iOS开发
深入探讨移动操作系统的性能优化:安卓与iOS的对比分析
在现代移动设备中,操作系统的性能优化至关重要。本文从系统架构、内存管理、电池续航和应用程序运行效率等多个维度,深入探讨了安卓(Android)和iOS两大主流移动操作系统的优化策略及其实际效果,旨在为开发者和用户提供更清晰的了解和选择依据。
995 27
|
9月前
|
Java Maven
Maven编译报错:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.13.0:compile 解决方案
在执行Maven项目中的`install`命令时,遇到编译插件版本不匹配的错误。具体报错为:`maven-compiler-plugin:3.13.0`要求Maven版本至少为3.6.3。解决方案是将Maven版本升级到3.6.3或降低插件版本。本文详细介绍了如何下载、解压并配置Maven 3.6.3,包括环境变量设置和IDEA中的Maven配置,确保项目顺利编译。
10662 5
Maven编译报错:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.13.0:compile 解决方案
|
Linux Nacos 数据库
【微服务】生产部署nacos集群(三个节点)
【微服务】生产部署nacos集群(三个节点)
346 1
|
Kubernetes 关系型数据库 MySQL
k8s部署nacos集群
k8s部署nacos集群
1144 1
|
XML Java 数据格式
基于Java+freemarker实现动态赋值以及生成Word文档
使用Java和Freemarker技术实现动态数据填充到Word文档模板并生成新的Word文档。
951 0
基于Java+freemarker实现动态赋值以及生成Word文档
|
监控 Oracle 数据可视化
深度解析JVM性能监控工具:推荐与详细用法
深度解析JVM性能监控工具:推荐与详细用法
1523 0