我正在尝试将angular5应用程序固定,并将其部署在AWS实例上。
DockerFile:
FROM mhart/alpine-node:8.9.4
ENV REFRESHED_AT 2017-10-01
WORKDIR /opt/
# install dependencies
COPY package*.json ./
RUN npm install
COPY . .
# expose server ports
EXPOSE 4200 49153
CMD ["npm", "start"]
泊坞窗 - 撰写:
version: '2.1'
services:
my-app:
image: my/app:latest
build: .
ports:
- "4200:4200"
- "49153:49153"
的package.json
{
...
"scripts": {
"ng": "ng",
"start": "ng serve -H 0.0.0.0 --disable-host-check true --prod",
"build": "ng build --prod"
},
"dependencies": {
...
},
"devDependencies": {
...
}
}
"ng serve -H 0.0.0.0 --disable-host-check true --prod"
是我在Internet上找到的命令,它可以帮助我在AWS实例上成功运行应用程序。在我将"@angular/cli": "1.6.1"
,"@angular/compiler-cli": "^5.0.0"
从devDependencies
添加到dependencies
之后,当前设置非常奇怪。我想知道为什么需要dev-dependencies与--prod
一起运行?我应该如何改进或纠正我的设置?
首先,--prod
开关只意味着你的应用程序将是optimized for production。
据说ng serve
不是生产级服务器(使用或不使用prod开关 - 它只适用于输出)。以下是docs的一段摘录:
ng serve命令从本地CLI开发服务器构建,监视和提供应用程序。
现在我们知道它是一个仅开发服务器,我们需要找到一个生产服务器。有很多选项,例如你可以使用nginx或Apache。
最后,您可以使用多阶段Docker镜像来构建和捆绑您的应用程序。这种图像的Dockerfile可能如下所示:
# build stage
FROM node:carbon as build
# print npm version
RUN npm -v
# copy just package.json to leverage caching
COPY ./package.json /app/package.json
WORKDIR /app
# install dependencies and cache them
RUN npm install
# copy the rest of the project
COPY . /app
RUN npm run build
# deploy stage
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html