← 返回卷宗
編程筆記

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

本文由 三符道長 撰於 2021年4月23日。轉載請註明出處。