一、环境准备

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;那么可能弹出的提示…