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 CE GitLab 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

bash 复制代码
#直接在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】服务启动异常,需要排查。

bash 复制代码
#排查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公钥复制一份到界面的"密钥"框中、输入密钥标题方便区分】,如下图所示:

bash 复制代码
#在需要推送代码到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项目

bash 复制代码
#克隆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端口】配置一致后重试即可,详细操作如下:

bash 复制代码
#解决客户端使用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中

bash 复制代码
#将本地的项目推送到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/ 目录下。

bash 复制代码
/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

相关推荐
lisanmengmeng1 天前
Gitlab搭建
gitlab
dapeng-大鹏3 天前
记一次 GitLab Let‘s Encrypt 证书申请失败的排查与修复
gitlab
身如柳絮随风扬3 天前
使用 Docker 部署 GitLab 并分配用户账号 —— 保姆级教程
docker·容器·gitlab
鼎道开发者联盟4 天前
鼎享会 | 从手工到自动化:OpenClaw改造GitLab内部协作流程的全过程
自动化·gitlab·openclaw
ℳ₯㎕ddzོꦿ࿐5 天前
告别手工发版:用 GitLab CI/CD 打通前后端自动化部署的“任督二脉”
ci/cd·自动化·gitlab
ℳ₯㎕ddzོꦿ࿐5 天前
实战:在 Linux 系统用 Docker-Compose 优雅部署 GitLab 及防坑指南
linux·docker·gitlab
源图客5 天前
Linux(CentOS9)服务器部署gitlab-ce-18.11.1-ce.0.el9.x86_64.rpm
linux·服务器·gitlab
ℳ₯㎕ddzོꦿ࿐5 天前
实战篇:结合 GitLab CI/CD 实现 Spring Cloud 微服务自动化部署与防坑指南
spring cloud·ci/cd·gitlab
菜萝卜子6 天前
【Git】GitLab 18.9 全局服务器钩子(Server Hooks)官方规范与落地实践
服务器·git·gitlab