你知道,前端工程部署有哪些方式嘛?

herryLo發表於2023-01-12

你知道,前端工程部署有哪些方式嘛?

本文原文地址;

此文章是回答知乎問題總結而來

我將其分為四個階段:手動部署命令工具部署docker映象部署平臺化部署
這幾個階段,越往後越複雜,越往後越友好,畢竟平臺化部署有備份還可回退,那是相當安全的。

手動部署

// 打包檔案,生產dist目標檔案 
npm run build

將dist下的檔案使用 _FTP檔案傳輸工具 _,上傳到伺服器上去,就可以直接訪問最新檔案了。

前提:伺服器上已有web伺服器,類似nginx服務、Apache服務,服務代理已經啟動

流程:本地build構建打包 ——> FTP檔案上傳 ——> 透過域名訪問最新檔案

命令工具部署

命令工具部署其實和 手動部署是一樣,只是簡化而已。

命令工具部署就是將本地build構建 和 FTP檔案上傳,直接透過程式來實現。例如我們透過gitlab的CI/CD工具 或 github action上傳前端檔案。

gitlab CI/CD或github action透過監聽master分支push操作,進行執行你的配置命令,下面我以github action配置作為例子:

// .github/workflows/main.yml
# name: deploy to aliyun
# on:
#   push:
#     branches:
#       - master
# jobs:
#   build:
#     runs-on: ubuntu-latest
#     steps:
#       # 切換分支
#       - name: Checkout
#         uses: actions/checkout@master
#       - name: work around permission issue
#         run: git config --global --add safe.directory /github/workspace
#       # 使用 node:10
#       - name: use Node.js 10
#         uses: actions/setup-node@v1
#         with:
#           node-version: 10
#       # npm install 同時 build 打包
#       - name: npm install and build
#         run: |
#           npm install
#           npm run build
#         env:
#           CI: true
#       # Deploy 上傳到阿里雲, secrets.ACCESS_TOKEN為配置token
#       - name: Deploy aliyun
#         uses: easingthemes/ssh-deploy@v2.0.7
#         env:
#           SSH_PRIVATE_KEY: ${{ secrets.ACCESS_TOKEN }}
#           ARGS: "-avz --delete"
#           SOURCE: "./docs/.vuepress/dist/"
#           REMOTE_HOST: "47.111.149.160"
#           REMOTE_USER: "root"
#           TARGET: "/var/www/HerryLo.github.io"

具體細節可以參考下面的文章↓

真香!GitHub Action一鍵部署;

前提:伺服器上已有web伺服器,類似nginx服務、Apache服務,服務代理已經啟動

流程:git push程式碼到程式碼倉庫 ——> gitlab CI/CD或github action 依賴配置檔案打包並構建上傳 ——> 透過域名訪問最新檔案

Docker映象部署

docker部署是平臺化部署的基礎,算是命令工具部署,如果說便捷程度,其實**命令工具部署 和 docker部署 **差不多,但是它有個好處:docker映象可備份;

// 打包檔案,生產dist目標檔案 
npm run build

打包構建之後,就可以透過docker構架映象啦,下面是docker映象的Dockerfile檔案和配置:

FROM node:latest
COPY package.json /
RUN npm i --registry=https://registry.npm.taobao.org
RUN npm run build

FROM nginx:latest
# 這裡的dist/目錄是你的專案打包後的檔案目錄
COPY ./dist/ /usr/share/nginx/html/
COPY ./nginx.conf /etc/nginx/conf.d/

EXPOSE 80

nginx配置檔案:

server {
    listen 80 default_server;
    server_name _;

    location / {
      root   /usr/share/nginx/html/web;
      index  index.html index.htm;
      try_files $uri $uri/ /index.html;
    }

    # 介面代理示例
    # location /api {
    #     proxy_pass http://xxx.com;
    #     proxy_set_header Host $host:$server_port;
    #     proxy_set_header X-Real-IP $remote_addr;
        #     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    #     proxy_set_header Cookie $http_cookie;
    #     proxy_buffering off;
    #     proxy_cache off;
    # }
  }

之後 透過 docker build 、docker push 映象名 將映象打包並推到遠端倉庫(一般是自己公司專案的私庫),然後在伺服器上拉取更新最新的映象,然後將最新的映象啟動即可。

提示:docker 映象一般會直接把nginx服務打包在一起,所以不用再在伺服器上開啟單獨的服務,只需要將docker埠開放即可。當然,如果是為了統一管理埠,也是可以透過專門的代理服務管理。

流程:本地 build打包檔案** ——> **docker打包映象_ ——> 伺服器更新映象並開啟最新映象 ——> 透過域名訪問最新檔案_

具體細節可以參考下面的文章↓

Docker構建前端專案;

平臺化部署

平臺化部署其實就是全流程: 命令工具部署+ docker映象的組合版。

只需要將程式碼push提交,之後透過網頁訪問構建打包平臺,例如:阿里雲效流水線 或 jekins打包構建 等平臺,可以透過點選按鈕,下一步下一步的方式,完成打包構建,映象上傳。

至於更新,我是使用rancher平臺來進行,服務的管理或更新,映象上傳完之後,可以在rancher平臺配置好相關的負載服務,剩下就只是點選更新按鈕就可以。

下面是以 阿里codeup流水線 + rancher作為流程示例:

提示:_阿里codeup流水線 或 jekins打包構建 就類似於docker映象打包,rancher部署就類似於我們將最新映象上傳到伺服器上,然後開啟服務。(rancher部署可能更加複雜,因為還涉及到k8s叢集知識

流程:git push程式碼到程式碼倉庫 ——> 透過_codeup_流水線構建打包上傳映象 ——> rancher等平臺更新映象 ——> 透過域名訪問最新檔案

具體細節可以參考下面的文章↓

知識擴充套件-Rancher前端服務釋出

總結

前端應用部署變化到現在的階段,也是專案眾多不便於管理導致,實際的業務情況,進而推動部署方式的發展。
前端部署的流程每個公司都有一套自己的流程,學習它,適應它,就好了,沒有太多疑難問題。

使用工具沒有什麼難度,難度可能就是你用的不太熟。

你的點贊、收藏是我的更新的動力!!

相關文章