一、gitlab概述
1. GitLab 是什么?
- 定义:GitLab 是一个基于 Git 的开源代码仓库管理工具,提供 一站式 DevOps 平台,支持从代码开发、协作、持续集成/持续部署(CI/CD)到项目管理的全生命周期开发流程。
- 开源与许可证:最初完全开源,采用 MIT 许可证,后续推出企业版(EE)但保留社区版(CE)的开源特性。
- 技术栈:由 Ruby on Rails 开发,部分功能用 Go 语言 重写以提升性能。
- 适用场景:个人开发者、中小团队到大型企业,尤其适合需要 端到端 DevOps 流程 的组织。
2. 核心功能
GitLab 集成多种工具,覆盖软件开发的全流程:
(1) 代码托管与版本控制
- Git 仓库管理:托管私有和公共代码仓库,支持分支、标签、合并请求(Merge Requests)等 Git 基础功能。
- Web 界面:通过浏览器查看代码、提交历史、文件差异等。
(2) 持续集成/持续部署(CI/CD)
- 内置 CI/CD 系统:通过
.gitlab-ci.yml
配置自动化构建、测试、部署流程。 - 多环境支持:可集成 Kubernetes、Docker 等容器技术,实现全栈自动化。
(3) 项目管理与协作
- 问题跟踪(Issue):记录任务、缺陷、需求,支持标签、优先级、指派成员。
- 合并请求(Merge Requests):代码审查核心机制,支持讨论、评论、检查清单。
- Wikis 和文档管理:为项目维护知识库和文档。
(4) 安全与合规
- 代码安全扫描:集成 SAST(静态代码分析)、DAST(动态应用安全测试)等工具。
- 审计日志:记录用户操作,满足企业级安全与合规要求(如 GDPR、HIPAA)。
(5) 容器与包管理
- 容器注册表:存储和管理 Docker 镜像。
- 包管理:支持 Maven、npm、Python 等包的托管与版本控制。
(6) 自托管与云服务
- 灵活部署:可选择 自托管(社区版/企业版)或使用 GitLab.com 的云服务。
- 私有化部署:适合对数据安全要求高的企业(如金融、医疗)。
3. 发展历程
- 2011年:GitLab 作为开源项目启动,完全免费。
- 2013年:拆分为 GitLab CE(社区版) 和 GitLab EE(企业版),但两者仍开源。
- 2014年:采用 开放核心(Open Core) 模式,EE 版本包含专有高级功能。
- 2015年:
- 获 150万美元种子轮融资,后获 400万美元 A 轮 和 2000万美元 B 轮。
- 客户包括 IBM、NASA、阿里巴巴、SpaceX 等。
- 2017年:因系统管理员误删数据导致重大事故,后强化备份机制。
- 2025年:推出 GitLab Duo,支持自托管 AI 平台,集成大语言模型(如 Mistral、Claude3.5),满足企业数据隐私需求。
4. 使用场景
- 软件开发团队:
- 协作开发:通过分支管理和合并请求实现代码审查。
- CI/CD 自动化:快速构建、测试和部署应用。
- 项目跟踪:用 Issue 和 Milestones 管理任务进度。
- 企业级需求:
- 安全合规:内置安全扫描和审计日志。
- 私有化部署:完全控制数据,符合行业监管要求。
- 规模化协作:支持千人团队协作,权限管理细致到代码仓库、分支级别。
- DevOps 流程:
- 从代码提交到生产部署的全链路可视化,提升开发效率。
5. 优势与特点
对比 GitHub
功能 | GitLab | GitHub |
---|---|---|
CI/CD | 内置强大 CI/CD,无需额外插件 | 需依赖 GitHub Actions 或第三方工具 |
项目管理 | 强大的 Issue、Merge Request 流程 | 基础任务管理,需第三方工具补充 |
私有仓库 | 免费版支持私有仓库 | 免费版仅限开源项目,私有需付费 |
自托管 | 支持自托管(CE/EE) | 仅提供云服务,无自托管选项 |
安全与合规 | 内置安全扫描和审计日志 | 需额外配置安全工具 |
核心优势
- 一站式 DevOps:整合代码管理、CI/CD、项目管理、安全等工具,减少工具链切换。
- 灵活性:支持自托管和云服务,适应不同规模企业需求。
- 开源生态:社区版免费且开源,企业版提供商业支持。
- AI 集成:2025年新增 AI 辅助编码(如 GitLab Duo),提升开发效率。
6. 典型用户
GitLab 被广泛应用于全球企业,包括:
- 科技公司:IBM、SpaceX、阿里巴巴、NASA、CERN(欧洲核子研究组织)等。
- 开源社区:支持个人开发者和开源项目托管。
- 政府与机构:满足高安全要求的政府项目或医疗健康行业。
7. 总结
GitLab 是一个 全栈 DevOps 平台,从代码托管到部署运维一应俱全,尤其适合需要 端到端开发流程管理 的团队。其开源特性、自托管选项和内置安全功能,使其成为企业级 DevOps 的首选工具之一。若需更轻量化的代码托管,可考虑 GitHub;但若追求完整的 DevOps 工具链和私有化部署,GitLab 是更优选择。
二、gitlab的快速上手指南
一、Linux 原生安装(推荐 Ubuntu/Rocky Linux)
1. 环境要求
- 最低配置:
- CPU:4 核(推荐 8 核以上)
- 内存:8 GB(推荐 16 GB)
- 存储:至少 2.5 GB(不含代码仓库)
- 支持系统:
- Ubuntu 20.04+/22.04+
- Rocky Linux 8+/9
- 不支持 Windows/macOS(需通过虚拟机或容器运行)
2. 安装步骤
(1) 更新系统并安装依赖
# Ubuntu/Debian
sudo apt update && sudo apt install -y curl openssh-server ca-certificates postfix
# CentOS/Rocky Linux
sudo dnf update && sudo dnf install -y curl policycoreutils-python-utils openssh-server
(2) 添加 GitLab 官方仓库
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash # Debian/Ubuntu
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash # CentOS/Rocky Linux
- 或者使用清华镜像源加速
cat /etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=Gitlab CE Repository
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
You have mail in /var/spool/mail/root
yum makecache
yum install gitlab-ce
(3) 安装 GitLab 社区版(CE)
sudo apt install gitlab-ce # Debian/Ubuntu
sudo dnf install gitlab-ce # CentOS/Rocky Linux
(4) 配置 GitLab
vim /etc/gitlab/gitlab.rb
-
修改关键配置:
external_url 'http://your_server_ip' # 替换为你的服务器IP或域名 配置访问url # 配置 SMTP(可选,用于邮件通知) gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.qq.com" gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = "your@qq.com" gitlab_rails['smtp_password'] = "授权码" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_tls'] = true
(5) 重新加载配置
#使用gitlab.rb文件生成子配置文件
gitlab-ctl reconfigure
#重启所有gitlab相关文件.
gitlab-ctl restart
(6) 防火墙设置
# Ubuntu/Debian
sudo ufw allow 80,443,22 # 允许 HTTP/SSH
sudo ufw reload
# CentOS/Rocky Linux
sudo firewall-cmd --permanent --add-port={80,443,22}/tcp
sudo firewall-cmd --reload
(7) 访问 GitLab
-
打开浏览器,访问
http://your_server_ip
-
初始账号:
root
-
初始密码:通过命令查看:
cat /etc/gitlab/initial_root_password
二、rpm包安装
- https://packages.gitlab.com/gitlab/gitlab-ce
# 1. 下载
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/ol/8/gitlab-ce-17.9.7-ce.0.el8.x86_64.rpm/download.rpm
# 2. 安装
rpm -Uvh gitlab-ce-17.9.7-ce.0.el8.x86_64.rpm
# 3. 配置并启动
vim /etc/gitlab/gitlab.rb
external_url 'http://your_server_ip' # 替换为你的服务器IP或域名
gitlab-ctl reconfigure
三、Docker 快速部署
1. 准备工作
- 确保已安装 Docker 和 Docker Compose:
###查看上一博客文章安装 https://blog.csdn.net/m0_57194659/article/details/147411777?spm=1011.2124.3001.6209
2. 创建配置文件
mkdir -p /data/gitlab/{config,logs,data}
cd /data/gitlab/
创建 docker-compose.yml
文件:
services:
gitlab:
container_name: devops_gitlab
image: gitlab/gitlab-ce:latest
restart: always
hostname: gitlab.yourdomain.com # 替换为你的域名或IP
ports:
- "80:80" # HTTP
- "443:443" # HTTPS
- "2222:22" # SSH(端口映射到宿主机2222)
volumes:
- /data/gitlab/config:/etc/gitlab
- /data/gitlab/logs:/var/log/gitlab
- /data/gitlab/data:/var/opt/gitlab
environment:
- GITLAB_OMNIBUS_CONFIG=external_url 'http://your_server_ip' # 替换为你的域名或IP
3. 启动服务
docker-compose up -d
4. 获取初始密码
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
grep 'Password:' /data/gitlab/config/initial_root_password
四、常见问题与优化
1. 安装慢?更换镜像源
# 修改 GitLab 仓库源为清华镜像(以 CentOS 为例)
vim /etc/yum.repos.d/gitlab-ce.repo
# 将 baseurl 改为:
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
##或查看清华大学开源软件镜像站帮助文档 https://mirrors.tuna.tsinghua.edu.cn/help/gitlab-ce/
[gitlab-ce]
name=Gitlab CE Repository
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
2. 修改默认端口
- 编辑
gitlab.rb
:nginx['listen_port'] = 8080 # 修改 HTTP 端口 gitlab_rails['gitlab_shell_ssh_port'] = 2222 # 修改 SSH 端口
*3. gitlab汉化
- 选择保存后按键盘F5刷新就更改完成了
五、验证安装
- 浏览器访问
http://your_server_ip
,使用初始密码登录。 - 修改密码并完善配置。
六、重置密码
gitlab-rake "gitlab:password:reset"
- 容器安装的话就进入容器内执行命令
七、配置建议
-
安全设置:
- 启用 HTTPS(推荐 Let’s Encrypt)。
- 配置双因素认证(2FA)。
-
性能优化:
- 使用 SSD 存储。
- 根据用户量升级 CPU/内存(参考 GitLab 官方硬件要求)。
-
备份:
sudo gitlab-backup create
安装完成!
三、Gitlab上手小案例
1.创建用户组:dev
2.创建用户:dev
- 权限要是owner权限
- 设置密码
3.关联用户与用户组
- 进入群组中,选择邀请成员
4.创建项目
- 进入主页—>项目—>新建项目—>创建空白项目
5.推送代码
1.克隆现有的 Git 仓库
[root@k8s-master02 app-project]# mkdir /app/code/
[root@k8s-master02 app-project]# git config --global user.email "dev@qq.com"
[root@k8s-master02 app-project]# git config --global user.name "dev"
[root@k8s-master02 code]# git clone http://192.168.130.61/dev1/app-project.git
2.推送分支
[root@k8s-master02 app-project]# >index.html
[root@k8s-master02 app-project]# git add .
[root@k8s-master02 app-project]# git commit -m '初次提交'
[root@k8s-master02 app-project]# git push origin main
3.检查结果
四、gitlab备份与恢复
- 目标
- 备份Gitlab相关的配置文件
- 备份Gitlab中的程序代码(代码仓库(项目),用户,用户组,密钥.)
1. 备份Gitlab服务的配置
- /etc/gitlab目录下所有内容即可,docker备份好对应的挂载目录即可
2.备份Gitlab里面的内容
对gitlab进行备份将会创建一个包含所有库和附件的归档文件。对备份的恢复只能恢复到与备份时的gitlab相同的版本。将gitlab迁移到另一台服务器上的最佳方法就是通过备份和还原。
gitlab提供了一个简单的命令行来备份整个gitlab,并且能灵活的满足需求。
- 配置
###修改gitlab.rb文件
##配置文件/etc/gitlab/gitlab.rb 中加入
gitlab_rails['manage_backup_path'] = true #是否可以指定备份目录
gitlab_rails['backup_path'] = '/var/opt/gitlab/gitlab-backup' #备份目录
gitlab_rails['backup_archive_permissions'] = 0600 #备份的压缩包权限
gitlab_rails['backup_keep_time'] = 604800 #备份保留多久 7天
mkdir /data/gitlab/data/gitlab-backup/
#然后执行
gitlab-ctl reconfigure
####部署的是docker容器版本注意部署方式路径不同
3.手动备份
[root@devops_gitlab gitlab]# docker exec -it devops_gitlab gitlab-backup create
###检查备份
[root@devops_gitlab gitlab]# ll data/gitlab-backup/
总用量 752
-rw------- 1 chrony polkitd 768000 4月 27 15:18 1745738275_2025_04_27_17.11.0_gitlab_backup.tar
[root@devops_gitlab gitlab]#
4.恢复
- 停止写入类服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
- gitlab-rake恢复 (不需要加tar)
##可尝试删除一个仓库文件在进行恢复看看效果
gitlab-backup restore BACKUP=1745738275_2025_04_27_17.11.0_gitlab_backup
3.重启 gitlab
gitlab-ctl restart
- 书写脚本定时备份,在传送到备份服务器备份
五、 迁移与升级
- gitlab升级的要求
- 需要遵循以下升级步骤以确保主版本升级成功:
- 1.升级至之前主要版本的最新次要版本。
- 2.升级到目标主要版本的第一个次要版本(X.0.Z)。
- 3.继续升级到较新的版本。
- 需要遵循以下升级步骤以确保主版本升级成功:
六、 Https
- 为了防止内网渗透,将gitlab服务的访问添加了ssl,具体步骤如下:
external_url 'https:freedome.com'
nginx[' enable' ] = true
nginx['client_max_body_size' ]= '250m '
nginx['redirect_http_to_https' ]= true
nginx[' redirect_http_to_https _port' ] = 443
nginx['ssl_certificate' ] = "path/ key.crt"
nginx['ssl_certificate_key'] = "path/ key.key"
nginx['ssl_ciphers' ] ="ECDHE-RSA-AES256-GCM
SHA384:ECDHE-RSA-AES128-GCM-SHA256"
nginx['ssl_prefer_server_ciphers']= "on"
nginx['ssl_protocols']= "TLSv1.2"
nginx['ssl_session_cache ' ] = "builtin:1000shared:sSL: 10m"
nginx['ssl_session_timeout']= "5m"
###核心:
nginx['ssl_certificate' ] =用于指定证书 .crt .pem
nginx['ssl_certificate_key'] = 用于指定私钥 .key
##2.gitlab重新初始化
gitlab-ctl reconfigure
##重建配置:
gitlab-ctl restart
七、优化
关闭目前不使用的组件 默认都是true 修改为 false
- 关闭prometheus
prometheus['enable'] = false
prometheus['monitor_kubernetes'] = false
- 关闭alertmanger
alertmanager['enable'] = false
- 关闭exporter 如果需要prometheus监控 则可以打开。
node_exporter['enable'] = false
redis_exporter['enable'] = false
postgres_exporter['enable'] = false
gitlab_monitor['enable'] = false
#gitlab_exporter
prometheus_monitoring['enable'] = false
grafana['enable'] = false