-
npm install,安裝依賴
-
npm run build,編譯,打包,生成靜態資源
-
服務化靜態資源
FROM node:alpine
# 代表生產環境
ENV PROJECT_ENV production
WORKDIR /code
ADD . /code
RUN npm install && npm run build && npm install -g http-server
EXPOSE 80
CMD http-server ./public -p 80
-
使用 Nginx 或者 Traefik 做反向代理
-
使用 Kubernetes 或者 Compose 等做編排
-
使用 GitLab CI 或者 Drone CI 等做 CI/CD
-
構建映象時間過長
-
構建映象大小過大,1G+
FROM node:alpine
ENV PROJECT_ENV production
WORKDIR /code
ADD . /code
RUN npm install --production && npm run build && npm install -g http-server
EXPOSE 80
CMD http-server ./public -p 80
FROM node:alpine
ENV PROJECT_ENV production
# http-server 不變動也可以利用快取
RUN npm install -g http-server
WORKDIR /code
ADD package.json /code
RUN npm install --production
ADD . /code
RUN npm run build
EXPOSE 80
CMD http-server ./public -p 80
-
在構建伺服器構建映象
-
把映象推至映象倉庫伺服器
-
在生產伺服器拉取映象,啟動容器
FROM node:alpine as builder
ENV PROJECT_ENV production
# http-server 不變動也可以利用快取
WORKDIR /code
ADD package.json /code
RUN npm install --production
ADD . /code
RUN npm run build
# 選擇更小體積的基礎映象
FROM nginx:alpine
COPY --from=builder /code/public /usr/share/nginx/html
-
/static,此類檔案在專案中直接取用根路徑,打包時複製進 /public 下,需要被打入映象。
-
/build,此類檔案需要 require 取用,會被 webpack 打包並加 hash 值,並透過 publicPath 修改資源地址。可以把此類檔案上傳至 CDN,並加上永久快取,不需要打入映象。
FROM node:alpine as builder
ENV PROJECT_ENV production
# http-server 不變動也可以利用快取
WORKDIR /code
ADD package.json /code
RUN npm install --production
ADD . /code
# npm run uploadCdn 是把靜態資源上傳至 cdn 上的指令碼檔案
RUN npm run build && npm run uploadCdn
# 選擇更小體積的基礎映象
FROM nginx:alpine
COPY --from=builder code/public/index.html code/public/favicon.ico /usr/share/nginx/html/
COPY --from=builder code/public/static /usr/share/nginx/html/static