使用docker+nginx发布angular项目

前言

在做一个自己的项目的时候,前端使用的angular,在发布的时候遇到了点麻烦。由于angular编译好就是一堆静态文件,所以之前采用的方式是先编译好,然后将编译好的文件放到spring项目中,但是感觉这样搞不太优雅,而且打镜像也不方便,于是采用了前端单独部署的方式。

前端镜像

由于angular编译好的静态文件实际上没有依赖,但是build的node环境很大,所以我们先在一个容器中进行编译,然后将编译好的文件拷贝到一个干净的nginx容器中,build成一个比较小的镜像

编译

在项目中根目录新增Dockerfile文件

FROM node:16-bullseye as build
WORKDIR /app
COPY . /app
RUN npm i \
    && npm i @angular/cli -g \
    && ng build

这一步会进行编译,然后在dist/project_name目录下生成编译好的文件,然后将编译好的文件拷贝到nginx容器中。在Dockerfile中增加内容

FROM nginx:alpine
COPY --from=build /app/dist/project_name /usr/share/nginx/html
ENTRYPOINT ["nginx", "-g", "daemon off;"]

由于nginx的默认配置只认/的path,其他path会返回404,所以这里还需要修改下nginx的配置。新增nginx.conf文件

server {
    listen       80;
    server_name  localhost;
    location / {
        root   /usr/share/nginx/html;
        try_files $uri $uri/ /index.html =404;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

然后修改Dockerfile

COPY nginx.conf /etc/nginx/conf.d/default.conf
ENTRYPOINT ["nginx", "-g", "daemon off;"]

最终的Dockerfile

FROM node:16-bullseye as build
WORKDIR /app
COPY . /app
RUN npm i \
    && npm i @angular/cli -g \
    && ng build

FROM nginx:alpine
COPY --from=build /app/dist/project_name /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
ENTRYPOINT ["nginx", "-g", "daemon off;"]
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容