@GitLab 介绍部署使用详细指南

文章目录

      • **GitLab 介绍&部署&使用详细指南**
      • **1. GitLab 介绍与核心概念**
        • **1.1 什么是 GitLab?**
        • **1.2 核心特性**
        • **1.3 版本区别**
      • **2. 部署指南 (以 Ubuntu 22.04 LTS 为例)**
        • **2.1 环境准备**
        • **2.2 安装步骤**
        • **2.3 重要配置文件**
      • **3. 基本使用入门**
        • **3.1 初始设置**
        • **3.2 创建项目与代码推送**
        • **3.3 核心工作流:Merge Request (MR)**
        • **3.4 CI/CD 快速入门 (`.gitlab-ci.yml`)**
      • **4. 常见问题 (FAQ) 与故障排除**
        • **Q1: 502 Whoops, GitLab is taking too much time to respond.**
        • **Q2: 如何备份和恢复 GitLab?**
        • **Q3: 如何修改 GitLab 的访问域名/URL?**
        • **Q4: 忘记 root 密码怎么办?**
        • **Q5: 如何配置外部邮件服务(如 SMTP)?**
      • **5. 附录与进一步学习**

GitLab 介绍&部署&使用详细指南


1. GitLab 介绍与核心概念

1.1 什么是 GitLab?

GitLab 是一个基于 Git 的完整的DevOps 平台。它不仅仅是一个源代码版本控制系统(如 GitHub),更是一套集成了项目管理、代码仓库、CI/CD、监控、安全扫描等功能的综合性工具链。它支持从项目规划、源代码管理到构建、测试、部署和监控的整个开发生命周期。

1.2 核心特性
  • 版本控制 (Git Repository): 提供强大的分布式版本控制功能。
  • 项目管理 (Issue Tracking, Wiki): 提供问题跟踪、看板、Wiki 文档等功能,便于团队协作。
  • 代码审查 (Merge Request): 支持代码合并请求、同行评审、评论和差异对比。
  • CI/CD (Continuous Integration/Delivery/Deployment): 内置强大的 CI/CD 流水线工具,无需集成其他工具(如 Jenkins)。
  • 容器镜像仓库 (Container Registry): 内置 Docker 镜像仓库,方便管理项目镜像。
  • 安全扫描 (Security Scanning): 提供依赖项扫描、SAST(静态应用安全测试)、DAST(动态应用安全测试)等安全功能。
  • 多种安装方式: 支持从源代码、Omnibus 包、Docker 容器、云原生(Helm Chart)等多种方式部署。
1.3 版本区别
  • GitLab Community Edition (CE): 社区版,免费,包含大部分核心功能。
  • GitLab Enterprise Edition (EE): 企业版,付费,包含更多高级功能,如史诗管理、高级 CI/CD、合规性管理等。

本 SOP 将以 社区版 (CE) 为例进行说明。


2. 部署指南 (以 Ubuntu 22.04 LTS 为例)

官方推荐使用 Omnibus 包安装,这是最快捷、最易于维护的方式。

2.1 环境准备
  • 操作系统: Ubuntu 22.04 LTS
  • 硬件需求:
    • 内存: 至少 4GB,推荐 8GB 或以上。4GB 内存下,Sidekiq 和 Puma 会在执行大型任务时使用 Swap,导致性能下降。
    • CPU: 至少 2 核,推荐 4 核。
    • 存储: 根据代码和仓库大小决定,至少 10GB 可用空间。
  • 软件依赖:
    • 确保系统已安装 curl, openssh-server, ca-certificates 等基本工具。
2.2 安装步骤
  1. 安装并配置必要的依赖:

    sudo apt-get update
    sudo apt-get install -y curl openssh-server ca-certificates postfix
    

    在安装 Postfix(邮件服务器)时,如果计划使用外部邮件服务,可以选择“Internet Site”或直接跳过,后续再配置。

  2. 添加 GitLab 包仓库并安装:

    curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
    

    或者使用清华大学的镜像源(国内服务器推荐):

    # 信任 GitLab 的 GPG 公钥
    curl https://packages.gitlab.com/gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null# 添加清华镜像源
    vi /etc/apt/sources.list.d/gitlab-ce.list
    # 写入以下内容
    deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu jammy main# 更新缓存
    sudo apt-get update
    
  3. 安装 GitLab CE:

    # 将 `http://your-domain-or-ip` 替换为您服务器的实际访问地址
    # 这将自动配置 GitLab 使用该 URL 并申请 Let‘s Encrypt 证书
    sudo EXTERNAL_URL="http://your-domain-or-ip" apt-get install gitlab-ce
    

    如果您暂时没有域名,可以先使用 http 协议和 IP 地址,例如:EXTERNAL_URL="http://192.168.1.100"

  4. 首次启动与配置:
    安装脚本会自动执行 gitlab-ctl reconfigure,初始化所有服务。此过程可能需要几分钟。

  5. 获取初始 root 密码:
    安装完成后,初始管理员 root 的密码存储在 /etc/gitlab/initial_root_password 中。请立即登录并修改密码。

    sudo cat /etc/gitlab/initial_root_password
    
  6. 常用管理命令:

    # 启动所有 GitLab 服务
    sudo gitlab-ctl start# 停止所有 GitLab 服务
    sudo gitlab-ctl stop# 重启所有 GitLab 服务
    sudo gitlab-ctl restart# 重新加载配置(修改 /etc/gitlab/gitlab.rb 后必须执行)
    sudo gitlab-ctl reconfigure# 查看服务状态
    sudo gitlab-ctl status# 查看日志(如检查问题)
    sudo gitlab-ctl tail nginx     # 查看 Nginx 日志
    sudo gitlab-ctl tail postgresql # 查看 PostgreSQL 日志
    
2.3 重要配置文件
  • /etc/gitlab/gitlab.rb: GitLab 的主配置文件。所有自定义配置(如邮箱、备份、域名变更等)都在此文件中修改。修改后务必执行 sudo gitlab-ctl reconfigure 使其生效。

3. 基本使用入门

3.1 初始设置
  1. 通过浏览器访问您在安装时设置的 EXTERNAL_URL
  2. 使用用户名 root 和之前获取的密码登录。
  3. 立即在 User Settings -> Password 中修改 root 用户的密码。
3.2 创建项目与代码推送
  1. 创建新项目:

    • 点击导航栏中的 “Create new project”。
    • 输入项目名称(如 my-awesome-project),选择可见级别(Private, Internal, Public)。
    • 点击 “Create project”。
  2. 推送现有代码到新仓库:

    # 进入你的本地代码目录
    cd your-local-project# 初始化 git(如果尚未初始化)
    git init --initial-branch=main
    git add .
    git commit -m "Initial commit"# 添加 GitLab 远程仓库地址
    git remote add origin http://your-gitlab-url/username-or-group/project-name.git# 推送代码
    git push -u origin main
    

    系统会提示您输入用户名和密码。

3.3 核心工作流:Merge Request (MR)

这是 GitLab 协作的核心。

  1. 创建分支:main 分支创建一个新功能分支(如 feature/login-page)。
  2. 开发与提交: 在新分支上进行代码开发并提交。
  3. 推送分支: 将分支推送到 GitLab 远程仓库:git push origin feature/login-page
  4. 创建 Merge Request: 在 GitLab 项目页面上,会提示你为刚推送的分支创建 MR。填写标题、描述,并指定目标分支(通常是 main)和审核人
  5. 代码审查: 审核人可以在 MR 中评论代码、提出修改意见。
  6. 修改与推送: 根据反馈在本地修改代码,再次提交并推送到同一个分支,MR 会自动更新。
  7. 合并: 审核通过后,点击 “Merge” 按钮将更改合并到目标分支。
3.4 CI/CD 快速入门 (.gitlab-ci.yml)

GitLab CI/CD 通过项目根目录下的 .gitlab-ci.yml 文件定义流水线。

示例:一个简单的 Node.js 项目流水线

# .gitlab-ci.yml
stages:- test- buildtest-job:stage: testimage: node:18script:- npm install- npm run testbuild-job:stage: buildimage: node:18script:- npm run buildartifacts:paths:- dist/

将此文件放入项目根目录并推送到 GitLab,CI/CD 流水线会自动触发。你可以在项目的 “CI/CD” -> “Pipelines” 中查看运行状态和日志。


4. 常见问题 (FAQ) 与故障排除

Q1: 502 Whoops, GitLab is taking too much time to respond.
  • 原因: 最常见的原因是内存不足。Unicorn/Puma 工作者进程因内存不足而被杀死。
  • 解决方案:
    1. 检查系统内存:free -h。如果可用内存很少,请增加 Swap 空间。
    2. 增加 Swap (以添加 4GB Swap 为例):
      sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
      sudo chmod 600 /swapfile
      sudo mkswap /swapfile
      sudo swapon /swapfile
      # 永久生效,写入 /etc/fstab: /swapfile swap swap defaults 0 0
      
    3. 检查 sudo gitlab-ctl status 是否有服务异常退出。
Q2: 如何备份和恢复 GitLab?
  • 备份: 使用命令 sudo gitlab-backup create。备份文件默认存储在 /var/opt/gitlab/backups/ 目录下。注意:这个命令不备份配置文件!
  • 恢复:
    1. 将备份文件拷贝到新服务器的备份目录。
    2. 停止相关服务:sudo gitlab-ctl stop puma && sudo gitlab-ctl stop sidekiq
    3. 执行恢复(将 TIMESTAMP 替换为备份文件的时间戳):
      sudo gitlab-backup restore BACKUP=TIMESTAMP
      
    4. 重要: 确保将旧服务器上的 /etc/gitlab/gitlab.rb/etc/gitlab/gitlab-secrets.json 也拷贝到新服务器的相同位置。
    5. 重新配置并启动:sudo gitlab-ctl reconfigure && sudo gitlab-ctl restart
Q3: 如何修改 GitLab 的访问域名/URL?
  1. 编辑主配置文件:sudo vi /etc/gitlab/gitlab.rb
  2. 找到并修改 external_url 'http://old-url' 为新的地址。
  3. 重新配置:sudo gitlab-ctl reconfigure。此命令会自动重启所有服务。
Q4: 忘记 root 密码怎么办?
  1. 进入服务器命令行。
  2. 执行 sudo gitlab-rake "gitlab:password:reset[root]"
  3. 按提示输入新密码。
Q5: 如何配置外部邮件服务(如 SMTP)?

修改 /etc/gitlab/gitlab.rb,添加如下配置(以 Gmail 为例):

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.gmail.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "your-email@gmail.com"
gitlab_rails['smtp_password'] = "your-app-password" # 注意:使用应用专用密码,非邮箱登录密码
gitlab_rails['smtp_domain'] = "gmail.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false

修改后执行 sudo gitlab-ctl reconfigure


5. 附录与进一步学习

  • 官方文档: https://docs.gitlab.com/ - 最全面、最权威的参考资料。
  • 安装选项: 除了 Omnibus,你还可以探索:
    • Docker: docker run --detach --hostname gitlab.example.com --publish 443:443 --publish 80:80 --name gitlab --restart always --volume $GITLAB_HOME/config:/etc/gitlab --volume $GITLAB_HOME/logs:/var/log/gitlab --volume $GITLAB_HOME/data:/var/opt/gitlab gitlab/gitlab-ce:latest
    • Kubernetes (Helm): 适用于大规模、高可用的生产环境。
  • 性能调优: 对于生产环境,务必阅读官方《性能调优》文档,调整 /etc/gitlab/gitlab.rb 中的 puma, sidekiq, postgresql 等参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/95431.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95431.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何通过 AI IDE 集成开发工具快速生成简易留言板系统

在当今快速迭代的软件开发环境中,AI 辅助编程工具已经成为开发者提高效率的重要手段。本文将详细介绍如何利用 AI IDE 集成开发工具快速构建一个功能完整的简易留言板系统,涵盖从需求分析到部署上线的全过程,并提供完整代码、流程图、Prompt …

机器学习:从技术原理到实践应用的深度解析

目录引言一.什么是机器学习(ML)?——从技术本质到核心目标1.与传统编程的本质区别:规则的“来源不同”2.核心目标:在“偏差-方差权衡”下优化性能指标二.机器学习的核心分类——基于“数据标签”与“学习范式”的技术划…

[muduo网络库]-muduo库TcpServer类解析

本贴用于记录muduo库的学习过程,以下是关于TcpServer的个人理解。 TcpServer内含Acceptor、threadpool等类,算是把主线程所有要做的事封装了起来。 重要成员变量 EventLoop *loop_; // baseloop 用户自定义的loopconst std::string ipPort_;const std…

工作两年,最后从css转向tailwind了!

菜鸟上班已经两年了,从一个对技术充满热情的小伙子,变成了一个职场老鸟了。自以为自己在不停的学习,但是其实就是学一些零碎的知识点,比如:vue中什么东西没见过、js什么特性没用过、css新出了个啥 …… 菜鸟感觉自己也…

macOS 更新后找不到钥匙串访问工具的解决方案

macOS 更新后找不到钥匙串访问工具的解决方案 随着macOS的不断更新,一些系统工具的位置可能会发生变化,给用户带来不便。钥匙串访问(Keychain Access)是macOS中一个非常重要的工具,用于管理密码、证书等敏感信息。最近…

深入理解Go 与 PHP 在参数传递上的核心区别

$run_return_data []; $ret $this->handleData($event_req_info, $run_return_data); public function handleData($event_req_info, &$run_return_data): array {$run_return_data [ //使用引用变量返回数据shop_id > $shop_id,request_id > $request_…

【Dify智能体】2025 最新版Linux部署Dify教程(Ubuntu)

一、前言 Dify 是一款开源的智能体工作流平台,可以用来快速构建 AI 应用。相比手动搭建复杂的依赖环境,Docker Compose 部署方式更简单、更快速、更稳定。本文将一步步带你在 Ubuntu 22.04 + Docker Compose v2 上安装 Dify,并给出常见问题与优化方案。 ps:如果还没有安装…

基础思想:动态规划与贪心算法

一、动态规划核心思想:将复杂问题分解为相互重叠的子问题,通过保存子问题的解来避免重复计算(记忆化)。动态规划需要通过子问题的最优解,推导出最终问题的最优解,因此这种方法特别注重子问题之间的转移关系…

使用生成对抗网络增强网络入侵检测性能

文章目录前言一、GAN 模型介绍二、研究方法1.数据集选择与处理2.IDS 基线模型构建3. GAN 模型设计与样本生成4.生成样本质量评估三、实验评估四、总结前言 网络入侵检测系统(Network Intrusion Detection System, NIDS)在保护关键数字基础设施免受网络威…

VR森林经营模拟体验带动旅游经济发展

将VR森林经营模拟体验作为一种独特的旅游项目,正逐渐成为旅游市场的新热点。游客们无需长途跋涉前往深山老林,只需在旅游景区的VR体验中心,戴上VR设备,就能开启一场奇妙的森林之旅。在虚拟森林中,他们可以尽情探索&…

Vue2存量项目国际化改造踩坑

Vue2存量项目国际化改造踩坑 一、背景 在各类业务场景中,国际化作为非常重要的一部分已经有非常多成熟的方案,但对于一些存量项目则存在非常的改造成本,本文将分享一个的Vue2项目国际化改造方案,通过自定义Webpack插件自动提取中文…

硬件开发(1)—单片机(1)

1.单片机相关概念1.CPU:中央处理器,数据运算、指令处理,CPU性能越高,完成指令处理和数据运算的速度越快核心:指令解码执行数据运算处理2.MCU:微控制器,集成度比较高,将所有功能集成到…

Elasticsearch面试精讲 Day 4:集群发现与节点角色

【Elasticsearch面试精讲 Day 4】集群发现与节点角色 在“Elasticsearch面试精讲”系列的第四天,我们将深入探讨Elasticsearch分布式架构中的核心机制——集群发现(Cluster Discovery)与节点角色(Node Roles)。这是构…

微信小程序长按识别图片二维码

提示&#xff1a;二维码图片才能显示识别菜单1.第一种方法添加属性&#xff1a;show-menu-by-longpress添加属性&#xff1a;show-menu-by-longpress <image src"{{shop.wx_qrcode}}" mode"widthFix" show-menu-by-longpress></image>2.第二种…

智能化数据平台:AI 与大模型驱动的架构升级

在前面的文章中,我们探讨了 存算分离与云原生,以及 流批一体化计算架构 的演进趋势。这些演进解决了“算力与数据效率”的问题。但在今天,企业在数据平台上的需求已经从 存储与计算的统一,逐步走向 智能化与自动化。 尤其是在 AI 与大模型快速发展的背景下,数据平台正在发…

解锁 Vue 动画的终极指南:Vue Bits 实战进阶教程,让你的Vue动画比原生动画还丝滑,以及动画不生效解决方案。

一条 Splash Cursor 的 10 秒 Demo 视频曾创下 200 万 播放量&#xff0c;让 React Bits 风靡全球。如今&#xff0c;Vue 开发者终于迎来了官方移植版 —— Vue Bits。 在现代 Web 开发中&#xff0c;UI 动效已成为提升用户体验的关键因素。Vue Bits 作为 React Bits 的官方 Vu…

《微服务协作实战指南:构建全链路稳健性的防御体系》

在微服务架构从“技术尝鲜”迈向“规模化落地”的进程中&#xff0c;服务间的协作不再是简单的接口调用&#xff0c;而是涉及超时控制、事务一致性、依赖容错、配置同步等多维度的复杂博弈。那些潜藏于协作链路中的隐性Bug&#xff0c;往往不是单一服务的功能缺陷&#xff0c;而…

STM32F103C8T6的智能医疗药品存储柜系统设计与华为云实现

项目开发背景 随着现代医疗技术的快速发展&#xff0c;药品的安全存储与管理成为医疗质量控制中的重要环节。许多药品对存储环境的温湿度具有严格的要求&#xff0c;一旦超出允许范围&#xff0c;药品的理化性质可能发生改变&#xff0c;甚至失效&#xff0c;直接影响患者的用药…

python批量调用大模型API:多线程和异步协程

文章目录 多线程批量调用 基本原理 实现代码 代码解析 使用注意事项 异步协程实现批量调用 异步协程实现方式 异步实现的核心原理 多线程 vs 异步协程 选择建议 多线程批量调用 基本原理 多线程批量调用大模型API的核心思想是通过并发处理提高效率,主要原理包括: 并发请求:…

硬件开发1-51单片机1

一、嵌入式1、概念&#xff1a;以应用为中心&#xff0c;以计算机技术为基础&#xff0c;软硬件可裁剪的专用计算机系统以应用为中心&#xff1a;系统设计的起点是 “具体应用场景”&#xff0c;按照应用需求出发以计算机技术为基础&#xff1a; 硬件技术&#xff1a;嵌…