美文网首页
使用docker+nginx发布angular项目

使用docker+nginx发布angular项目

作者: 小李子Levy | 来源:发表于2022-01-05 01:29 被阅读0次

    前言

    在做一个自己的项目的时候,前端使用的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;"]
    

    相关文章

      网友评论

          本文标题:使用docker+nginx发布angular项目

          本文链接:https://www.haomeiwen.com/subject/imfhcrtx.html