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

Git实践——GitLab服务器的部署与使用

Git实践——分支管理与标签管理及git个性化配置https://blog.csdn.net/xiaochenXIHUA/article/details/160662371

一、GitLab简介

1.1、gitlab是什么

GitLab 是一个基于 Git 的完整 DevOps 平台,它不仅提供代码托管(类似 GitHub),还集成了 CI/CD(持续集成/持续部署)、缺陷跟踪、代码审查和 Wiki 等功能于一体的团队开发中枢系统。

对于企业和开发者来说,GitLab 最具吸引力的地方在于它支持自托管,我们可以将其安装在内网服务器上,确保代码资产的私密与安全。

1.2、gitlab有啥用

gitlab的核心作用说明
代码托管与版本控制
  • 基于 Git 管理代码版本,支持创建公有 / 私有仓库,完整记录代码修改历史。
  • 精细的分支管理与保护策略,支持并行开发,防止代码误改。
  • 通过Merge Request (MR)进行代码审查,确保合并质量。
一站式项目管理
  • Issue (任务) 跟踪:管理需求、Bug、任务分配与进度。
  • 看板、里程碑 (Milestone):支持敏捷开发(Scrum/Kanban)。
  • Wiki 文档:内置项目知识库,方便团队共享资料。
原生 CI/CD
  • 无需第三方工具,通过.gitlab-ci.yml配置自动构建、测试、部署
  • 代码提交后自动触发流水线,快速验证质量、自动发布,大幅提升效率。
企业级安全与权限
  • 精细化权限控制:精确管理谁能看、改、合并特定代码。
  • 内置安全扫描(SAST/DAST/SCA/ 密钥检测),在开发阶段发现漏洞。
  • 支持私有化部署,数据完全自主可控。
附加能力容器镜像仓库、持续监控、团队协作聊天、Web IDE 在线编码。

1.3、gitlab适用哪些场景

GitLab 适合从个人到企业的各类开发场景,尤其强调整体流程与安全:

gilab适用场景说明
中大型企业 / 金融 / 政务 / 军工

需要私有化部署、严格安全合规、精细化权限、千人级协作,核心数据不对外泄露【最核心场景】

中小团队与创业公司一套平台搞定代码 + 协作 + 自动化部署,不用买多套工具,快速搭建 DevOps 流程。
个人开发者免费私有仓库、版本管理、个人项目自动部署(如个人网站、小程序)。
开源项目团队公开仓库接收社区贡献,用 MR 审核代码,Issue 管理需求,Wiki 写文档。
DevOps 与自动化交付从提交→构建→测试→部署全链路可视化、自动化,实现持续交付 / 部署

1.4、GitLab与GitHub区别

  • GitHub:全球最大开源社区,侧重开源协作、社交化开发,云托管为主。
  • GitLab:更偏企业私有、全流程 DevOps、私有化部署、原生 CI/CD、内置安全

一句话总结:GitHub 适合开源社区,GitLab 更适合企业内部研发与全流程管控

1.5、GitLab CE与GitLab EE如何选

GitLab CE(社区版)是完全开源免费的基础版本,适合中小团队;GitLab EE(企业版)是商业付费版本,在 CE 基础上增加了企业级安全、合规、高级权限与专属支持,面向中大型组织。

GitLab版本核心定位与许可说明
GitLab CE (Community Edition)
  • 开源免费,采用MIT 许可,可自由使用、修改、分发
  • 包含完整的代码托管、基础 CI/CD、项目管理功能
  • 仅社区支持,无官方 SLA 保障
GitLab EE (Enterprise Edition)
  • 专有许可,需订阅付费(Premium/Ultimate 两档)
  • 完全包含 CE 所有功能,额外解锁企业级特性
  • 提供官方技术支持、SLA、安全补丁与优先 Bug 修复
功能模块GitLab CEGitLab EE (Premium/Ultimate)
代码托管 / 基础 CI/CD✅ 完整✅ 完整(含高级 CI/CD 优化)
权限控制基础角色✅ 细粒度、自定义角色、审批流
安全合规基础扫描✅ 完整 SAST/DAST、容器扫描、漏洞管理、合规报表
审计与追溯✅ 审计日志、操作追踪、合规报告
企业协作基础群组✅ 多层级组管理、高级看板、Epic/Roadmap
高可用 / 扩展基础✅ 多站点、Geo 异地复制、大规模集群支持
技术支持社区论坛✅ 7×24 支持、专属客户经理、SLA
价格永久免费Premium:约 ¥2,199 / 人 / 年

Ultimate:更高(含全部安全能力)
GitLab版本适用场景说明
GitLab CE
  • 中小团队、创业公司、个人 / 开源项目
  • 只需要基础代码托管 + CI/CD,无强合规要求
  • 预算有限、优先开源、可自行运维
  • 对权限、安全、审计要求不高
GitLab EE
  • 中大型企业、金融 / 政企等强合规行业
  • 需要细粒度权限、多级审批、完整安全扫描
  • 要求审计日志、合规报告、数据防泄漏
  • 需要异地多活、大规模集群、Geo 加速
  • 重视官方 SLA 支持、紧急补丁、专业服务

1.6、安装建议

官方目前推荐即便不付费也优先安装EE 版,因为它在不购买许可证(License)时会自动降级为 CE 的功能,但未来如果想升级到企业版,无需重新安装,直接导入 License 即可。

安装建议说明
先装 EE,再决定是否付费
  • 未激活许可的 EE默认等于 CE(免费使用基础功能)
  • 后续升级 Premium/Ultimate无需重装 / 迁移,直接激活即可
版本互转
  • CE → EE:官方支持平滑升级(备份 → 装 EE 包 → 恢复)
  • EE → CE:不官方支持,需导出数据后重建

二、安装部署GitLab EE

2.1、安装前的准备

gitlab软件的安装部署详细要求

硬件要求说明架构标准(每秒20次请求约1000位用户)
CPU最少4核起8核
内存最少4GB起16GB
存储

gitlab安装包约2.5gb;

PostgreSQL 服务器旗舰版约12gb;

预留的项目代码存储空间;

端口

开放80 (HTTP)、

443 (HTTPS)、

22 (SSH)端口、

8080(gitlab核心puma)

2.2、直接在Linux系统中安装GitLab

#直接在Linux系统(almalinux9)中安装GitLab #1-更新Linux系统 dnf update -y #2-安装依赖gitlab所需的依赖库 dnf install -y curl openssh-server openssh-clients postfix cronie policycoreutils perl systemctl enable --now sshd systemctl enable --now postfix #3-防火墙配置 #3.1-关闭selinux getenforce setenforce 0 grubby --update-kernel ALL --args selinux=0 vi /etc/selinux/config #【etc/selinux/config】文件中的【SELINUX=enforcing】修改为【SELINUX=disabled】后保存退出 SELINUX=disabled SELINUX=disabled #3.2-防火墙若是开启状态则放开【推荐】 firewall-cmd --permanent --add-service=ssh firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload #3.2-若不想使用防火墙则可以直接禁用【不推荐】 systemctl stop firewalld systemctl disable firewalld #4-配置gitlab的软件源镜像(实现在线安装) curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | bash #4.1-也可以手动下载gitlab的安装包自行安装 wget https://packages.gitlab.com/gitlab/gitlab-ee/el/9/x86_64/Packages/g/gitlab-ee-18.9.6-ee.0.el9.x86_64.rpm #5-安装gitlab【启用gitlab的https】 #5.1-方案一:安装时直接启用 HTTPS(自动 Let’s Encrypt申请证书,推荐)【适合:有公网 IP + 已备案域名】 #安装完成后直接用 https://gitlab.yourdomain.com 访问 sudo EXTERNAL_URL="https://gitlab.yourdomain.com" dnf install -y gitlab-ee #5.2-方案二:先安装http访问;然后在手动改成HTTPS #5.2.1-先安装gitlab-ee dnf clean all dnf makecache dnf install -y gitlab-ee #5.2.2-手动配置为HTTPS方法一:自动配置 Let’s Encrypt vi /etc/gitlab/gitlab.rb #【/etc/gitlab/gitlab.rb】文件的修改关键项 # 改为 https external_url 'https://gitlab.yourdomain.com' #开启自动证书 letsencrypt['enable'] = true letsencrypt['contact_emails'] = ['your-email@example.com'] nginx['redirect_http_to_https'] = true #重载配置让其生效 gitlab-ctl reconfigure #5.2.2-手动配置为HTTPS方法二:手动配置自签名 / 自有证书(内网 / 无公网) #1-生成自签名证书(测试用) mkdir -p /etc/gitlab/ssl chmod 755 /etc/gitlab/ssl openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \ -keyout /etc/gitlab/ssl/gitlab.key \ -out /etc/gitlab/ssl/gitlab.crt chmod 600 /etc/gitlab/ssl/* #2-编辑配置文件 vi /etc/gitlab/gitlab.rb #【/etc/gitlab/gitlab.rb】文件的主要修改内容如下 external_url 'https://gitlab.yourdomain.com' # https://域名或内网IP nginx['redirect_http_to_https'] = true nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.crt" nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.key" #3-让修改后的gitlab主配置生效(注意:只要编辑过【/etc/gitlab/gitlab.rb】文件,就必须执行让配置生效命令) gitlab-ctl reconfigure #6-获取初始管理员密码及其修改密码 #6.1-GitLab 安装后会自动生成一个初始的【root`】账户密码,存放在【/etc/gitlab/initial_root_password】文件中,该文件会在 24 小时后被自动删除 cat /etc/gitlab/initial_root_password #重启gitlab gitlab-ctl restart #查看gitlab的状态 gitlab-ctl status #6.2-若忘记了管理员(root)的密码,或者服务器没配置邮件服务,则可以通过服务器后台强制修改。 #重置指定用户(如 root)的密码【执行后,系统会提示你输入两次新密码(注意:输入时不会显示字符),完成后即可生效】 gitlab-rake "gitlab:password:reset[root]" #7-访问与登录 #7.1-修改hosts文件配置上域名解析【gitlab服务器IP 域名】 #windows修改的文件是【C:\Windows\System32\drivers\etc】;linux修改的文件是【/etc/hosts】 192.168.1.39 gitlab.ck.com #7.2-在浏览器输入gitlab的服务器ip(如:192.168.1.39)即可打开gitlab的访问页面 #8-GitLab 常用运维命令 #8.1-启动所有服务 gitlab-ctl start #8.2-停止所有服务 gitlab-ctl stop #8.3-查看服务状态 gitlab-ctl status #8.4-重启服务 gitlab-ctl restart #8.5-查看日志 gitlab-ctl tail

可从官方站点下载对应版本的.rpm文件。地址为:https://packages.gitlab.com/gitlab

注意:若访问服务器IP如上图显示“

HTTP 502: Waiting for GitLab to boot

It can take up to a few minutes for GitLab to boot completely.

This page will automatically reload every 5 seconds.

则是由于gitlab的主核心【puma】服务启动异常,需要排查。

#排查gitlab的主核心服务puma的启动日志 gitlab-ctl tail puma #根据占用端口获取到PID lsof -i :8080 #根据PID获取到进程信息 ps -ef | grep PID #排查出问题解决后重启gitlab gitlab-ctl restart

排查puma的日志显示“

2026-05-02_12:12:35.65681 {"timestamp":"2026-05-02T12:12:35.656Z","pid":477838,"message":"* Listening on unix:///var/opt/gitlab/gitlab-rails/sockets/gitlab.socket"}
2026-05-02_12:12:35.65721 bundler: failed to load command: puma (/opt/gitlab/embedded/bin/puma)
2026-05-02_12:12:35.65791 /opt/gitlab/embedded/lib/ruby/gems/3.3.0/gems/puma-7.2.0/lib/puma/binder.rb:344:in `initialize':Address already in use - bind(2) for "127.0.0.1" port 8080 (Errno::EADDRINUSE)
2026-05-02_12:12:35.65793 from /opt/gitlab/embedded/lib/ruby/gems/3.3.0/gems/puma-7.2.0/lib/puma/binder.rb:344:in `new'”可以了解到是由于本机的8080端口已被占用导致无法启用,需要将8080端口空闲出来。

2.3、gitlab的web界面中文设置与密码修改

2.3.1、配置root用户界面显示中文

使用root管理员用户登录到gitlab的web界面中,点击界面右上角的圆形图标-->【Preferencs-->Localization-->Language(选择Chinese,Simplified-简体中文)-->Save Changes】后按下【F5】键刷新网页即可显示中文,如下图所示:

2.3.2、修改root用户密码

使用root管理员用户登录到gitlab的web界面中,点击界面右上角的【管理员(Admin)】-->【概览】-->【用户】-->【Administrator右侧的“编辑”】-->密码下面输入【新密码、确认密码】-->【保存更改】即可,如下图所示:

三、gitlab使用

3.1、在gitlab中创建项目

在浏览器输入【gitlab.ck.com】打开界面并登录,然后点击左侧【项目-->创建项目-->创建空白项目】在配置界面根据提示输入【项目名称、项目组或人员、可见性级别】最后点击【新建项目】即可,如下图所示:

3.2、在gitlab中添加SSH密钥

在浏览器输入【gitlab.ck.com】打开界面并登录,然后点击右上角圆形图标-->【偏好设置】,然后选择左侧的【访问-->SSH密钥-->添加新密钥】在该密钥添加界面根据提示将【新设备的SSH公钥复制一份到界面的“密钥”框中、输入密钥标题方便区分】,如下图所示:

#在需要推送代码到gitlab的设备上生成SSH密钥对 #1-在新设备指定路径新生成指定名称的密钥对 ssh-keygen -t ed25519 /root/.ssh/id_ed25519_github #由于没有使用默认的文件名称,因此需要配置SSH vi ~/.ssh/config #【~/.ssh/config】文件的内容 Host gitlab.ck.com HostName gitlab.ck.com User git Port 22222 IdentityFile ~/.ssh/id_ed25519_github IdentitiesOnly yes #2-查看密钥对的公钥信息 cat ~/.ssh/id_ed25519_github.pub

3.3、克隆gitlab项目

#克隆gitlab项目 #1-获取到gitlab中指定项目的SSH地址 git@gitlab.ck.com:root/gitlabdemo.git #2-在已经在gitlab中配置了SSH密钥的设备上克隆gitlab项目 #2.1-在gitlab中配置了SSH密钥的设备上配置gitlab的域名解析 vi /etc/hosts #【/etc/hosts】文件末尾新增gitlab的域名解析 192.168.1.39 gitlab.ck.com #2.2-在gitlab中配置了SSH密钥的设备上克隆gitlab mkdir -p /data/gitlab cd /data/gitlab git clone git@gitlab.ck.com:root/gitlabdemo.git

获取到gitlab中指定项目的SSH地址方法:在gitlab的web界面中【点击左上角的gitlab图标】-->【项目】-->【点击需要使用的项目(如:Administrator / gitlabdemo)】-->【代码】-->【使用SSH克隆】如下图所示:

注意1:若在使用【git clone】命令克隆gitlab项目到客户端时,报错“

正克隆到 'gitlabdemo'...
ssh: Could not resolve hostname gitlab.ck.com: Name or service not known
fatal: Could not read from remote repository.

Please make sure you have the correct access rights”是因为客户端并没有配置上gitlab的域名解析,只需要配置上即可(只需要在hosts文件末尾添加gitlab的域名解析,如【192.168.1.39 gitlab.ck.com】)解决方法如下图所示:

注意2:若在使用【git clone】命令在客户端克隆gitlab的项目时报错“

正克隆到 'gitlabdemo'...
ssh: connect to host gitlab.ck.com port 22: Connection refused
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.”
则需要进入gitlab所在服务器将【gitlab应用】与【gitlab应用所在服务器的SSH端口】配置一致后重试即可,详细操作如下:

#解决客户端使用git clone命令克隆gitlab项目报错问题 #1-查看gitlab所在服务器使用的ssh端口(如:22222) grep -i Port /etc/ssh/sshd_config #2-编辑gitlab的主配置文件【/etc/gitlab/gitlab.rb】端口与gitlab所在服务器的ssh端口一致 vi /etc/gitlab/gitlab.rb #【/etc/gitlab/gitlab.rb】文件修改内容 gitlab_rails['gitlab_shell_ssh_port'] = 22222 #3-重载gitlab的主配置文件让其生效 gitlab-ctl reconfigure

3.4、推送项目到gitlab中

#将本地的项目推送到gitlab中 #1-进入从gitlab克隆下来的项目中,并查看当前的分支 cd /data/gitlab/gitlabdemo/ git branch #2-在项目中开发(复制一些文件模拟开发功能) cp /etc/hosts . cp -r /etc/yum.repos.d . #3-将开发的内容添加到仓库暂存区后统一将暂存区内容提交到仓库中 git add . git commit -m"新增hosts与yum.repos.d目录" git status #4-查看远程仓库地址、仓库当前的分支、并推送到gitlab中 git remote -v git branch git push origin main #5-到gitlab中查看从本地推送的内容是否存在

3.5、gitlab的数据存储路径

在 AlmaLinux 9 上通过Omnibus 包安装的 GitLab EE,所有核心项目数据默认都集中在/var/opt/gitlab/目录下。

/var/opt/gitlab/ ├── git-data/repositories/ # ✅ Git 代码仓库(核心) ├── postgresql/data/ # ✅ 数据库(用户/项目元数据) ├── gitlab-rails/uploads/ # ✅ 附件/上传文件 ├── gitlab-rails/shared/ # LFS 对象、CI/CD 缓存、归档 ├── backups/ # 备份文件 ├── logs/ # 日志(/var/log/gitlab/ 也有) └── gitaly/ # Gitaly 服务(Git 仓库访问层)

《1》代码仓库(Git 仓库数据)/var/opt/gitlab/git-data/repositories/采用哈希存储 (Hashed Storage),路径格式@hashed/[hash前2位]/[hash中间2位]/[完整hash].git对应项目的源代码、提交历史、分支、标签。

《2》数据库(用户 / 项目 / 配置元数据):PostgreSQL 数据:/var/opt/gitlab/postgresql/data/存储:用户账号、项目信息、权限、Issue、MR、设置等。

《3》上传附件(Issues/MR/Wiki 中的文件):/var/opt/gitlab/gitlab-rails/uploads/存储:图片、文档、压缩包等用户上传文件。

《4》备份文件:/var/opt/gitlab/backups/gitlab-backup create生成的备份包默认存这里。

《5》配置文件:/etc/gitlab/gitlab.rb # 主配置(修改路径/端口/存储)/etc/gitlab/gitlab-secrets.json # 密钥(迁移必备)

如何根据项目 ID 找到仓库路径:

  • 在 GitLab 项目主页 →Settings → General查看Project ID(如123

  • 计算 SHA256 哈希:

    echo -n "123" | sha256sum # 输出示例:a665a45920422f9d417e...
  • 对应路径:
/var/opt/gitlab/git-data/repositories/@hashed/a6/65/a665a45920422f9d417e....git
http://www.jsqmd.com/news/749204/

相关文章:

  • 密集图像描述技术:规则系统与强化学习的融合创新
  • FTRL与BFCL在线学习算法性能对比与工程实践
  • 全国cppm报考和scmp报考TOP1(怎么报名及流程) - 众智商学院课程中心
  • 别再死记硬背公式了!用MATLAB动画演示混频器如何‘搬动’频谱(附代码)
  • 逻辑谬误识别:合成数据增强与LLM训练实践
  • 2026年3P防爆空调技术解析:分体式防爆空调/单元式防爆空调/壁挂式防爆空调/多联式防爆空调/天井式防爆空调/选择指南 - 优质品牌商家
  • MotionStream:实时视频生成框架的技术解析与应用
  • 冷轧不锈钢卷深度技术分享:镜面不锈钢板、201 不锈钢卷、201不锈钢板、304 不锈钢卷、304不锈钢板、316L不锈钢卷选择指南 - 优质品牌商家
  • 11.5B参数、1.2EFLOPS、训练从数周压到数小时:他们把通用原子势训练带入Exascale时代
  • MoltLock分布式锁:现代应用的高性能并发控制解决方案
  • Legacy-iOS-Kit架构深度解析:5大模块实现旧设备系统降级与性能重塑
  • 从单口到四口:基于Xilinx FPGA的10G UDP多网卡方案设计与资源开销全解析(KU060/KU5P/ZU9EG实测)
  • 探索未来操作系统:从微内核到分布式架构的无限扩展性设计
  • AI智能体工作流管理:基于文件系统的上下文持久化与协作框架
  • OpenSubject视频数据集自动化筛选技术与工程实践
  • MetaClaw框架:实现大模型动态进化的双循环学习机制
  • Python 数据分析基础入门:《Excel Python:飞速搞定数据分析与处理》学习笔记系列(附录 A Conda 环境)
  • 基于MCP协议构建AI智能体与社交媒体API的安全交互网关
  • 2026年4月诚信的工业厂房搭建企业推荐,定制化门窗设计,厂房采光通风俱佳 - 品牌推荐师
  • 大语言模型计数能力解析与优化实践
  • 华为OD新系统机试真题 2026-04-08 【准备生日礼物】
  • 【优化求解】通过信号灯交叉路口的连接燃料电池混合动力车的生态驾驶双层凸优化附matlab代码
  • MoltLock:轻量级Go分布式锁库的设计原理与etcd实战
  • Cursor Free VIP终极指南:如何永久免费使用AI编程助手
  • 用eNSP模拟华为网络工程师面试题:手把手复现一个OSPF+RIP+BGP+NAT的综合实验
  • 视频生成中的运动控制技术与优化实践
  • Python脚本依赖管理新思路:manifest实现按需安装与自包含分发
  • TEE防护下LLM推理的安全隐患与防御方案
  • 强化学习在多轮对话系统中的应用与优化
  • ATL:iOS模拟器上AI智能体的分层自动化触控方案