npm run build后,在docker中使用alpine及nginx作为http服务

npm run build后,在docker中使用alpine及nginx作为http服务

为了实现简单的ci配置,提交代码后自动编译并部署到目标服务器上,部署好gitea及jenkins后,还需要进一步处理才可将此步骤。

如用node.js中使用npm build后,于dist目录中可得纯属html代码,如用npm install http-server -g,其docker镜像颇大,高达100M,故而改用alpine配合nginx进行目标部署,基本容量可降至13M。

mkdir project
cd project
mkdir app
mkdir nginx

将nodejs下所有项目文件放放app后, 再在nginx目录下建立一个文件defaut.conf。

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        location / {
                root /app;
                index index.html;
        }
}

然后在project目录下,建立一个dockerfile

FROM node:12.6.0-buster-slim AS build
ENV PROJECT_ENV production
EXPOSE 80

WORKDIR /app
COPY ./app/ ./
RUN npm config set registry http://registry.npm.taobao.org/
RUN npm install yarn -g
RUN yarn config set registry https://registry.npm.taobao.org/
RUN yarn
RUN npm run build:prod 
COPY ./nginx /nginx

FROM alpine
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
RUN apk add nginx
COPY --from=build /nginx /etc/nginx/conf.d
COPY --from=build /app/dist /app
ENTRYPOINT ["nginx","-g","pid /tmp/nginx.pid; daemon off;"]

在jenkins中,配置好git签出后,建立部署脚本:

docker stop wm || true && docker rm wm || true
docker build -t wm_image .
docker run -d -p 80:80 --restart=always --name wm wm_image
三符风云涌

发表评论