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