我想部署我的应用程序,它使用expressJS作为后端,并在前端使用React。我想部署它并在docker-contatiner中运行。我正在使用http-proxy-middleware来将请求重定向到expressjs后端。我的docker-file是这样的:
Constant
这是我的package.json命令:
=IF(AH15>48,8,IF(AND(AH15>40,AH15<=48),AH15-40,0))
但是我知道我需要构建React。但这是必要的吗?因为此docker运行正常,但对生产服务器有利吗?我认为我需要在部署之前先构建React部分,还需要对expressjs部分做一些事情。有人可以向我解释通过docker-container进行良好的生产部署需要什么吗?
我的应用程序结构如下:
# base image
FROM node:latest
# set working directory
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
# add `/usr/src/app/node_modules/.bin` to $PATH
ENV PATH /usr/src/app/node_modules/.bin:$PATH
# install and cache app dependencies
COPY package.json /usr/src/app/package.json
COPY client/package.json /usr/src/app/client/package.json
WORKDIR /usr/src/app/client
RUN npm install --silent
WORKDIR /usr/src/app
RUN npm install --silent
# start app
CMD ["npm", "run" , "dev"]
答案 0 :(得分:0)
是的,有必要在生产环境中运行npm run构建,因为这将创建您的生产就绪的构建,您需要在package.json文件和docker脚本文件中添加更多命令。
Package.json文件
"prod": "npm run build && npm run dev"
Docker文件
CMD ["npm", "run" , "prod"]
答案 1 :(得分:0)
但这对生产服务器有利吗?
我会提供两个建议:
尽管您可以在容器内构建客户端,但是最好在部署之前安装和构建客户端,然后复制构建结果(.html文件,脚本包,甚至可能是用于生产构建故障排除的源映射) )使用Docker COPY命令。通常,最好保持生产环境尽可能的简洁和合理,并避免安装大量运行时不需要的软件包。
这就是评论中已经建议的内容。因此,如果可以的话,请安装Express及其依赖项,但不要安装客户端。该technique通常用于构建以Javascript和其他语言编写的客户端。
重要的是,不要在生产中运行任何仅可用于开发的软件。 webpack-dev-server属于这种情况。如果这就是npm run client
的意思,那么在开发环境之外运行它不是一个好主意。