当前位置: 首页 > news >正文

【GitLab/CD】前端 CD

前端 CD(持续部署) + Nginx 服务器 + Docker 部署 的整体流程

🏗️ 全局架构

flowchart LRDev[开发 push 代码到 GitLab] --> CI[GitLab CI: 构建前端产物]CI --> Image[构建 Docker 镜像]Image --> Registry[推送到镜像仓库(内置 GitLab Registry/阿里云/AWS ECR)]Registry --> Server[服务器 docker pull 拉取镜像]Server --> Container[容器运行 Nginx 服务]Container --> User[用户访问网站]

一句话说明:

持续部署 = CI 产物 → 打包成 Docker 镜像 → Nginx 容器托管静态资源。


project/
├─ Dockerfile
├─ nginx.conf
└─ .gitlab-ci.yml

相关配置

🧱 第一步:Dockerfile

Dockerfile 负责:

  • 构建前端代码(stage1)
  • 用 Nginx 运行(stage2)

Dockerfile

# ===== Build Stage =====
FROM node:18 AS build
WORKDIR /appCOPY package.json package-lock.json ./
RUN npm ciCOPY . .
RUN npm run build# ===== Run Stage =====
FROM nginx:stable-alpine
COPY ./nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=build /app/dist /usr/share/nginx/htmlEXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

重点:使用两阶段构建避免把 node_modules 打包到最终镜像。


🧱 第二步:Nginx 配置

nginx.conf

server {listen 80;server_name _;root /usr/share/nginx/html;index index.html;# 前端 history 模式(Vue/React/SPA 必备)location / {try_files $uri $uri/ /index.html;}
}

🧱 第三步:GitLab CI/CD 配置(自动构建 + 自动部署)

.gitlab-ci.yml

stages:- build- deployvariables:# 镜像名:GitLab 内置 RegistryIMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHAcache:paths:- node_modules/# -------- CI: 构建镜像 --------
build:stage: buildimage: docker:latestservices:- docker:dindscript:- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY- docker build -t $IMAGE_TAG .- docker push $IMAGE_TAGonly:- master# -------- CD: 部署到服务器 --------
deploy:stage: deployimage: alpine:latestbefore_script:- apk add --no-cache openssh-client- mkdir -p ~/.ssh- echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa- chmod 600 ~/.ssh/id_rsascript:- ssh -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_HOST "docker pull $IMAGE_TAG && docker stop web || true && docker rm web || true && docker run -d --name web -p 80:80 $IMAGE_TAG"only:- master

CI/CD Secrets(在 GitLab 设置)

GitLab → Project → Settings → CI/CD → Variables

变量名用途
SSH_PRIVATE_KEYRunner 通过 SSH 登录服务器
SERVER_HOST部署服务器 IP
SERVER_USERssh 登录用户名
CI_REGISTRY_USERGitLab 自动提供,用于镜像推送
CI_REGISTRY_PASSWORDGitLab 自动提供,用于镜像推送

🖥️ 服务器操作(一次性)

✅ 安装 docker

curl -fsSL https://get.docker.com | bash

✅ 允许 docker 开机启动

systemctl enable docker
systemctl start docker

✅ 为 GitLab CI 提供 SSH 权限(复制公钥到服务器)

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

🔄 部署流程(自动化)

本地 push:

git push origin master

GitLab Pipeline 自动执行:

  1. CI:构建、编译、生成静态资源
  2. CI:构建 Docker 镜像 & push 到镜像仓库
  3. CD:服务器 docker pull 拉新镜像
  4. CD:重启容器 → 新版本上线 ✅

完全不用手动登录服务器。

http://www.dtcms.com/a/545595.html

相关文章:

  • 做简报的网站竹制品网站怎么做
  • Kafka使用-Consumer
  • 诸暨网站建设怎么建立微网站?
  • 【Docker】【1.docker常用命令总结】
  • 深圳的网站建设公司的外文名是wordpress异步加载
  • 创客匠人2025万人高峰论坛:如何融合创始人IP与AI?
  • Linux中完成根文件系统的最终准备和切换prepare_namespace函数的实现
  • A800 部署 Qwen2-VL-8B-Instruct 完整指南
  • rust:第一个程序HelloWorld
  • 给新公司建网站用代理访问永久域名
  • 启动Hana失败 FAIL: process hdbdaemon HDB Daemon not running
  • iOS 26 内存占用监控 多工具协同下的性能稳定性分析实战
  • Kubernetes service管理
  • 布吉企业网站建设百度网站两两学一做心得体会
  • 深入仓颉(Cangjie)编程语言:循环的革命——从“命令式”操控到“声明式”安全迭代
  • 画出网站和目录结构图wordpress 自定义表
  • linux gpio errno EBUSY问题举例分析
  • 如何在 macOS 中清理 Homebrew 软件包 ?
  • 手机网站设计立找亿企邦湖南长沙房价2023年最新房价
  • 如何选择徐州网站开发wordpress新建页面位置
  • nestjs引篇
  • apmserv 设置网站目录yy头像在线制作网站
  • 基于YOLO+多模态大模型+人脸识别+视频检索的智慧公安综合研判平台(vue+flask+AI算法)
  • 二手车网站程序德阳网站建设 选哪家好
  • 极智算服务器用的还是自己的网络吗安全吗
  • Jenkins vs GitLab CI/CD vs Arbess,CI/CD工具一文纵评
  • 机器学习—— 回归分析之如何建立回归模型
  • MySQL中SUBSTRING_INDEX函数作用
  • 网站设计评级杭州网站搜索排名
  • 2.1 AI与大模型介绍