GitLab CI + Docker 自動構建前端項目并部署 — 完整流程文檔

一、環境準備

1. 服務器準備

  • 一臺Linux服務器(CentOS/Ubuntu皆可),推薦至少4核8GB內存

  • 已安裝 Docker(及 Docker 服務已啟動)

  • 已安裝 GitLab Runner

2. 服務器上安裝 Docker (如果沒裝)

# CentOS9以下舉例
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io -y
sudo systemctl start docker
sudo systemctl enable docker# 適用于 CentOS 9 / CentOS Stream 9 安裝 Docker CE# 1. 卸載可能沖突的舊版本
sudo dnf remove -y docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine# 2. 安裝必要的依賴
sudo dnf -y install dnf-plugins-core# 3. 添加 Docker 官方倉庫
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo# 4. 安裝 Docker CE(--nobest 解決可能的版本依賴沖突)
sudo dnf install -y --nobest docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin# 5. 啟動 Docker
sudo systemctl start docker# 6. 設置開機自啟
sudo systemctl enable docker# 7. 查看 Docker 版本
docker --version# 8. 測試運行
sudo docker run hello-world

3. 安裝 GitLab Runner

# 下載二進制文件
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64# 賦予執行權限
sudo chmod +x /usr/local/bin/gitlab-runner# 添加用戶(可選)
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash || true# 安裝 Runner 服務
sudo /usr/local/bin/gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner# 啟動 Runner 服務
sudo /usr/local/bin/gitlab-runner start

4. 將 gitlab-runner 用戶加入 Docker 用戶組

sudo usermod -aG docker gitlab-runner
sudo systemctl restart docker

二、GitLab Runner 注冊

1,登錄你的 GitLab,進入項目設置 > CI/CD > Runners 頁面

2,找到 registration token(注冊令牌)

3,在服務器執行注冊命令(替換 URL 和 token):

sudo /usr/local/bin/gitlab-runner register \--non-interactive \--url "http://你的gitlab地址:端口/" \--registration-token "你的注冊token" \--description "deploy-runner" \--executor "shell" \--tag-list "deploy" \--run-untagged="false" \--locked="false"

4,注冊成功后,用命令檢查 Runner 狀態:

sudo /usr/local/bin/gitlab-runner status

三、準備項目代碼和 Dockerfile

1

2. 示例 Dockerfile

# 使用官方 Nginx 作為基礎鏡像(默認自帶 /usr/share/nginx/html 目錄)
FROM nginx# 設置工作目錄為 Nginx 的默認靜態文件目錄
WORKDIR /usr/share/nginx/html/# 切換到 root 用戶(方便修改配置文件和目錄)
USER root# 將我們自定義的 Nginx 配置文件復制到容器中
# 替換掉默認的 default.conf,讓 Nginx 按我們的配置運行
COPY ./docker/nginx.conf /etc/nginx/conf.d/default.conf# 將打包后的前端 dist 目錄復制到 Nginx 靜態目錄
COPY ./dist  /usr/share/nginx/html/# 暴露容器的 80 端口(HTTP)
EXPOSE 80# 啟動 Nginx 前臺運行(daemon off 表示不以守護進程模式運行)
CMD ["nginx", "-g", "daemon off;"]

四、編寫 GitLab CI 配置 .gitlab-ci.yml

# ===============================
# 全局 before_script
# ===============================
before_script:# 切換 npm 源為淘寶鏡像(國內安裝依賴更快)- npm config set registry https://registry.npmmirror.com# ===============================
# CI/CD 階段定義
# ===============================
stages:- build   # 第一階段:構建階段(編譯前端代碼)- deploy  # 第二階段:部署階段(運行容器)# ===============================
# 構建 Job
# ===============================
build-job:stage: build          # 該 Job 屬于 build 階段tags:- deploy            # Runner 標簽(需和 GitLab Runner 配置一致)script:# 安裝依賴(會使用 before_script 中設置的淘寶源)- npm install# 打包生產環境代碼(Vue/React 等前端項目)- npm run build:prod# 使用 Docker 構建鏡像,命名為 user-center-frontend:latest- docker build -t user-center-frontend:latest .# ===============================
# 部署 Job
# ===============================
deploy-job:stage: deploy         # 該 Job 屬于 deploy 階段tags:- deploy            # Runner 標簽(需和 GitLab Runner 配置一致)script:# 如果已有舊容器,則停止運行(忽略錯誤)- docker stop user-center-frontend || true# 刪除舊容器(忽略錯誤)- docker rm user-center-frontend || true# 啟動新容器,映射宿主機 80 端口到容器 80 端口- docker run -d --name user-center-frontend -p 80:80 user-center-frontend:latest

五,nginx配置

server {listen 80;  # 監聽 80 端口(HTTP 默認端口)# ===============================# gzip 壓縮配置(開啟傳輸壓縮以減少流量)# ===============================gzip on;  # 開啟 gzip 壓縮gzip_min_length 1k;  # 文件大于 1KB 才會壓縮gzip_comp_level 9;  # 壓縮級別,范圍 1-9,數字越大壓縮率越高,但消耗更多 CPUgzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;  # 指定需要壓縮的文件類型gzip_vary on;  # 啟用 Vary: Accept-Encoding 響應頭,告訴緩存服務器區分壓縮和未壓縮的版本gzip_disable "MSIE [1-6]\.";  # 針對 IE6 以下瀏覽器禁用 gzip,避免兼容性問題# ===============================# 站點根目錄# ===============================root /usr/share/nginx/html;  # 指定網站的根目錄(靜態文件所在位置)include /etc/nginx/mime.types;  # 引入 MIME 類型映射(讓瀏覽器正確識別文件類型)location / {# 當請求的路徑找不到對應文件時,返回 index.html# 適用于 SPA(單頁應用)前端路由,防止刷新 404try_files $uri /index.html;}
}

六、執行流程

  1. 提交代碼到 GitLab(包括 Dockerfile 和 .gitlab-ci.yml

  2. GitLab CI 自動觸發流水線

  3. Runner 會執行安裝依賴、構建項目、構建 Docker 鏡像

  4. 部署階段會停止舊容器、刪除容器并重新運行最新鏡像

  5. 訪問服務器 IP 或綁定域名的 80 端口即可訪問最新前端頁面

七、常用排查命令

查看鏡像:

docker images

查看運行中的容器:

docker ps

查看容器日志:

docker logs user-center-frontend

八、注意事項

  1. 構建命令(如 npm run build:prod)需在 .gitlab-ci.yml 中正確填寫,確保能生成 dist

  2. 確保服務器 Docker 服務正常,GitLab Runner 有權限操作 Docker

  3. 構建上下文路徑和 Dockerfile 中的 COPY 路徑必須匹配,否則復制文件失敗

  4. GitLab Runner 用戶需加入 docker 組,避免權限問題

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/918635.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/918635.shtml
英文地址,請注明出處:http://en.pswp.cn/news/918635.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LCP 17. 速算機器人

目錄 題目鏈接: 題目: 解題思路: 代碼: 總結: 題目鏈接: LCP 17. 速算機器人 - 力扣(LeetCode) 題目: # LCP 17. 速算機器人 小扣在秋日市集發現了一款速算機器人。…

Spring cloud集成ElastictJob分布式定時任務完整攻略(含snakeyaml報錯處理方法)

ElasticJob 是一款輕量級、可擴展的分布式定時任務解決方案,基于 Quartz 二次開發,支持任務分片、失效轉移、任務追蹤等功能,非常適合在 Spring Cloud 微服務場景中使用。我將帶你完成 Spring Cloud 集成 ElasticJob 的全過程,并分…

了解 Linux 中的 /usr 目錄以及 bin、sbin 和 lib 的演變

Linux 文件系統層次結構是一個復雜且引人入勝的體系,其根源深植于類 Unix 操作系統的歷史之中。在這一結構的核心,/usr 目錄是一個至關重要的組成部分,隨著時間的推移,它經歷了顯著的演變。與此同時,/bin、/sbin、/lib…

高級IO(五種IO模型介紹)

文章目錄一、IO為什么慢?一、阻塞IO二、非阻塞IO三、信號驅動IO四、IO多路復用五、異步IO一、IO為什么慢? IO操作往往都是和外設交互,比如鍵盤、鼠標、打印機、磁盤。而最常見的就是內存與磁盤的交互,要知道磁盤是機械設備&#…

第十二節:粒子系統:海量點渲染

第十二節:粒子系統:海量點渲染 引言 粒子系統是創造動態視覺效果的神器,從漫天繁星到熊熊火焰,從魔法特效到數據可視化,都離不開粒子技術。Three.js提供了強大的粒子渲染能力,可輕松處理百萬級粒子。本文將…

LeetCode Day5 -- 二叉樹

目錄 1. 啥時候用二叉樹? (1)典型問題 (2)核心思路 2. BFS、DFS、BST 2.1 廣度優先搜索BFS (1)適用任務 (2)解決思路??:使用隊列逐層遍歷 2.2 深度…

<c1:C1DateTimePicker的日期時間控件,控制日期可以修改,時間不能修改,另外控制開始時間的最大值比結束時間小一天

兩個時間控件 <c1:C1DateTimePicker Width"170" EditMode"DateTime" CustomDateFormat"yyyy-MM-dd" CustomTimeFormat"HH:mm:ss" Style"{StaticResource ListSearch-DateTimePicker}" x:Name"dateTimePicker"…

文件完整性監控工具:架構和實現

文件完整性監控(FIM)作為一道關鍵的防御層&#xff0c;確保系統和網絡中文件及文件夾的完整性與安全性。文件完整性監控工具通過監控關鍵文件的變更并檢測未經授權的修改&#xff0c;提供關于潛在安全漏洞、惡意軟件感染和內部威脅的早期警報。為了使文件完整性監控工具發揮實效…

Linux信號量和信號

1.溫故知新上一篇博客&#xff0c;我們又知道了一種進程間通信的方案&#xff1a;共享內存。它是在物理內存中用系統調用給我們在物理內存開辟一個共享內存&#xff0c;可以由多個進程的頁表進行映射&#xff0c;共享內存不和管道一樣&#xff0c;它的生命周期是隨內核的&#…

騰訊測試崗位面試真題分析

以下是對騰訊測試工程師面試問題的分類整理、領域占比分析及高頻問題精選&#xff08;基于??92道問題&#xff0c;總出現次數118次??&#xff09;。問題按??7大技術領域??劃分&#xff0c;高頻問題標注優先級&#xff08;1-5&#x1f31f;&#xff09;&#xff1a; 不…

全面解析遠程桌面:功能實現、性能優化與安全防護全攻略

遠程桌面技術已成為工作與生活中不可或缺的協作工具&#xff0c;但在實際應用中&#xff0c;用戶常遇到連接失敗、卡頓延遲、安全隱患等問題。本文從遠程桌面功能原理、網絡與性能優化、安全防護策略、跨平臺兼容性等角度&#xff0c;詳細解析常見問題的解決方案&#xff0c;并…

【問題】Mybatis-plus框架使用@Select注解編寫查詢SQL,json字段查詢轉換失敗

問題描述在使用mybaits-plus的時候定義的Mapper接口實現了BaseMapper&#xff0c;沒有編寫Mapper對應的xml&#xff0c;大部分查詢使用框架的接口進行查詢基本屬性返回都是正常&#xff0c;復雜對象在sql中會進行查詢&#xff0c;但是返回對象中卻未包含相關屬性。問題原因 沒有…

Python多線程實現大文件下載

Python多線程實現大文件下載 在互聯網時代&#xff0c;文件下載是日常操作之一&#xff0c;尤其是大文件&#xff0c;如軟件安裝包、高清視頻等。然而&#xff0c;網絡條件不穩定或帶寬有限時&#xff0c;下載速度會變得很慢&#xff0c;令人抓狂。幸運的是&#xff0c;通過多線…

【R語言】RStudio 中的 Source on Save、Run、Source 辨析

RStudio 中的 Source on Save、Run、Source 辨析 在使用 RStudio 進行 R 語言開發時&#xff0c;我們會在主界面左上角看見三個按鈕&#xff1a;Source on Save、Run、Source 。 本文將帶你從概念、使用方法、快捷鍵、使用場景以及注意事項等方面詳細解析這三個功能。 文章目錄…

藍橋杯算法之搜索章 - 4

目錄 文章目錄 前言 一、記憶化搜索 二、題目概略 三、斐波拉契數 四、Function 五、天下第一 六、滑雪 總結 親愛的讀者朋友們&#xff0c;大家好啊&#xff01;不同的時間&#xff0c;相同的地點&#xff0c;今天又帶來了關于搜索部分的講解。接下來我將接著我前面文章的內容…

抗量子加密技術前瞻:后量子時代的密碼學革命

目錄抗量子加密技術前瞻&#xff1a;后量子時代的密碼學革命1. 量子計算威脅現狀1.1 量子霸權里程碑1.2 受威脅算法1.3 時間緊迫性2. 抗量子密碼學體系2.1 技術路線對比2.2 數學基礎革新3. 標準化進程3.1 NIST PQC標準化時間線3.2 當前推薦算法4. 技術實現方案4.1 Kyber密鑰交換…

基于STM32設計的礦山環境監測系統(NBIOT)_262

文章目錄 一、前言 1.1 項目介紹 【1】開發背景 【2】研究的意義 【3】最終實現需求 【4】項目硬件模塊組成 1.2 設計思路 【1】整體設計思路 【2】上位機開發思路 1.3 項目開發背景 【1】選題的意義 【2】摘要 【3】國內外相關研究現狀 【5】參考文獻 1.4 開發工具的選擇 【1】…

電腦如何安裝win10專業版_電腦用u盤安裝win10專業版教程

電腦如何安裝win10專業版&#xff1f;電腦還是建議安裝win10專業版。Win分為多個版本&#xff0c;其中家庭版&#xff08;Home&#xff09;和專業版&#xff08;Pro&#xff09;是用戶選擇最多的兩個版本。win10專業版在功能以及安全性方面有著明顯的優勢&#xff0c;所以電腦還…

多語言文本 AI 情感分析 API 數據接口

多語言文本 AI 情感分析 API 數據接口 AI / 文本處理 AI 模型快速分析文本情感傾向 多語言文本 / 情感分析。 1. 產品功能 支持多語言文本情感分析&#xff1b;基于特定 AI 模型&#xff0c;快速識別文本情感傾向&#xff1b;適用于評論分析、輿情監控等場景&#xff1b;全接…

【R語言】R語言的工作空間映像(workspace image,通常是.RData)詳解

R語言的工作空間映像&#xff08;.RData&#xff09;詳解 在使用 R 語言時&#xff0c;你可能會注意到&#xff0c;每次退出 R 會彈出一個提示&#xff1a; Save workspace image? [y/n/c] 如果你使用的是 Rstudio 這個 IDE 來進行R語言的開發&#xff0c;那么可能彈出的提示…