文章目录 前言 一、GitLab应用 1.1 为什么学习 GitLab?
1.2 GitLab 是什么?
1.3 GitLab 的特点 1.5 GitLab 与 SVN 的对比 二、通过 Docker 部署本地 GitLab 服务 2.1 安装 Docker(CentOS 系列示例) 2.2 拉取 GitLab 镜像 2.3 处理 22 端口冲突(宿主 SSH 改口) 2.4 启动 GitLab 容器 2.5 首次访问与基础概念 三、在 GitLab 中创建组织与项目 3.1 创建群组(devops) 3.2 创建用户并加入群组 3.3 创建项目(myweb)与授权 四、使用新账户登录并初始化仓库 4.1 首次登录与密码修改 4.2 对于没有创建过 git 版本库的主机 4.3 对于已有本地仓库的主机 4.3.1 HTTP 方式推送 4.3.2 SSH 免密推送 五、常见问题与发布前检查清单 总结 前言 在团队协作、代码托管与 CI/CD(持续集成/持续交付)一体化上,
GitLab
提供开箱即用的完整方案。
本文面向初学与落地实践者,手把手演示如何在 Linux 服务器上通过 Docker 部署 GitLab,并完成从 创建群组与项目 到 成员管理、仓库推送(HTTP/SSH 的完整流程)。
文末已附常见问题,帮助你避坑提效。
一、GitLab应用 1.1 为什么学习 GitLab?
学习 GitLab 的意义不仅在于掌握一个代码托管工具,更在于深入理解现代开发流程的自动化与协作机制。
1、 提升团队协作效率 :GitLab 支持多人协作、分支管理与代码审查,帮助团队在分布式环境下高效开发。
2、 自动化构建与部署 :借助 GitLab CI/CD,可以实现从代码提交到部署上线的全流程自动化,大幅减少人工操作与错误。
3、 符合 DevOps 思维 :GitLab 是一体化 DevOps 平台,涵盖开发、测试、交付与运维环节,符合现代持续交付理念。
4、 提高安全与可控性 :通过自部署与权限管理,团队可以完全掌控代码与数据,确保系统安全与合规。
1.2 GitLab 是什么?
GitLab 是一个基于 Git 的开源 DevOps 平台,提供完整的 代码管理、CI/CD、项目管理、代码审查 等功能。
它不仅仅是一个类似 GitHub 的代码托管服务,更是一个可完全自部署的企业级 DevOps 平台。
核心功能包括: Git 仓库管理 :基于 Git 的版本控制与分支协作。
CI/CD 自动化 :通过
.gitlab-ci.yml
文件配置构建、测试、部署流程。
项目与任务管理 :支持看板、里程碑、问题追踪。
安全与权限控制 :可细化到用户级、项目级的权限配置。
容器与云平台集成 :内置容器注册表,支持与 Kubernetes 集成。
1.3 GitLab 的特点 1、 开源可自部署 GitLab 提供自部署选项,可完全运行在本地服务器或私有云中,适合注重安全与数据主权的企业。
2、 完整 DevOps 生命周期支持 从代码编写到部署监控,GitLab 覆盖软件生命周期的每个阶段,是真正的一体化 DevOps 平台。
3、 灵活的 CI/CD 配置 通过
.gitlab-ci.yml
文件,可自由定义构建与部署流程,满足多样化项目需求。
4、 高可定制性 支持自定义工作流、权限模型、UI 界面,灵活适配企业级开发环境。
5、 多版本选择 提供社区版(CE)与企业版(EE),满足个人开发者到大型组织的不同使用场景。
1.5 GitLab 与 SVN 的对比 对比维度GitLab(Git)SVN(Subversion) 版本控制方式分布式版本控制,每个开发者都有完整仓库,可脱机操作集中式版本控制,依赖中央服务器协作模式分支开发 + 合并请求,支持多人协作与代码审查集中式协作,冲突处理频繁CI/CD 支持原生内置 CI/CD,自动化程度高需依赖第三方插件或工具分支管理创建、合并、切换高效灵活分支管理复杂且性能低自部署与安全完全可自部署,权限控制细致可自部署但配置复杂,权限简单学习曲线学习曲线稍陡,但功能强大上手快,功能相对有限 结论 : GitLab 在分布式协作、自动化构建与部署、灵活分支管理等方面,均优于传统的 SVN 模式,是现代团队开发的更优选择。
参考阅读 : GitLab 官方文档 GitLab CI/CD 配置指南 Git 与 SVN 区别详解 二、通过 Docker 部署本地 GitLab 服务 2.1 安装 Docker(CentOS 系列示例) 确保虚拟机拥有至少 4G 内存,并安装 Docker:
# 安装依赖与 Docker CE 源
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce-20.10.18 docker-ce-cli-20.10.18 containerd.io
# 配置镜像加速器与基础参数
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<'EOF'
{
"registry-mirrors": [
"https://0a40cefd360026b40f39c00627fa6f20.mirror.swr.myhuaweicloud.com"
],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": { "max-size": "100m" }
}
EOF
# 备选镜像(可选,按需加入上方数组):
# "https://6ijb8ubo.mirror.aliyuncs.com",
# "https://hub.littlediary.cn/"
启动 Docker 服务:
systemctl daemon-reload
systemctl restart docker.service
systemctl enable docker.service
2.2 拉取 GitLab 镜像 可以选择中文社区版镜像或官方社区版镜像:
# 中文社区版(带中文支持)
docker pull twang2218/gitlab-ce-zh
# - twang2218:镜像的维护者(仓库用户)。
# - gitlab-ce-zh:镜像名称,表示带中文支持的 GitLab 社区版。
# 官方社区版(备选)
docker pull gitlab/gitlab-ce:latest
若不指定标签,默认拉取
latest
。
生产中建议固定版本标签,版本切换遵循官方升级路径。
2.3 处理 22 端口冲突(宿主 SSH 改口) GitLab 容器默认会占用 22 端口(容器内 SSH),避免与宿主机 SSH 冲突,建议 先把宿主机 SSH 改到 2222 :
vim /etc/ssh/sshd_config
# 将端口改为:
Port 2222
systemctl restart sshd
如果你更倾向于不改宿主口,也可将容器的 22 端口映射到宿主的非 22 端口,例如
-p 2222:22
。
本文采用“宿主改 2222 + 容器仍映射 22:22”的方式,保持一致性最简单。
2.4 启动 GitLab 容器 方案 A:使用中文社区版镜像
docker run -d \
-h gitlab \ # 指定容器主机名
-p 443:443 -p 80:80 -p 22:22 \
--name gitlab \
--restart always \
-v /srv/gitlab/config:/etc/gitlab \ # 挂载gitlab的配置文件
-v /srv/gitlab/logs:/var/log/gitlab \ # 挂载gitlab的日志文件
-v /srv/gitlab/data:/var/opt/gitlab \ # 挂载gitlab的数据
twang2218/gitlab-ce-zh:latest
======================================================================================
docker run -d \
-h gitlab \
-p 443:443 -p 80:80 -p 22:22 \
--name gitlab \
--restart always \
-v /srv/gitlab/config:/etc/gitlab \
-v /srv/gitlab/logs:/var/log/gitlab \
-v /srv/gitlab/data:/var/opt/gitlab \
twang2218/gitlab-ce-zh:latest
方案 B:使用官方社区版镜像
docker run -d \
--hostname gitlab \
-p 443:443 -p 80:80 -p 22:22 \
--name gitlab \
--restart always \
-v /srv/gitlab/config:/etc/gitlab \
-v /srv/gitlab/logs:/var/log/gitlab \
-v /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
检查运行状态:
docker ps -a
# 看到 STATUS 为 (healthy) 后再访问 Web 界面
GitLab 首次启动资源占用较高,初始化需要数分钟,待容器健康检查通过再访问。
2.5 首次访问与基础概念 浏览器访问
http://<服务器IP>
,初次会要求为
root
设置密码;登录完成后点击顶部【扳手】进入“管理区域”。
常用概念: 群组(Group) 、 项目(Project) 、 成员(Member) 。
gitlab 中重要的概念: 群组(Group) :对应一个开发团队,比如开发部组、测试部组、运维部组等。
项目(Groject) :对应软件项目,比如开发部开发的每一个软件项目。
成员(Member) :对应用户,用于将用户加入到组中,比如可将几个程序员加入到某一个软件项目组中,各自完成不同的功能模块的代码并上传,来共同完成整个软件项目。
三、在 GitLab 中创建组织与项目 3.1 创建群组(devops) 1、点击【新建群组】。
2、【群组路径】【群组名称】【描述】均填写
devops
。
3、【可见等级】设为 公开 ,其余默认,点击【创建群组】。
3.2 创建用户并加入群组 1、进入“管理区域”→【新建用户】: 姓名:
yjs
用户名:
yjs
邮箱:
yjs@yjs.com
(密码暂不设,先创建用户)
2、创建后点右上角【编辑】,设置密码,例如
abc@1234
。
3、把用户加入
devops
群组,角色选 主程序员 (Maintainer)。
3.3 创建项目(myweb)与授权 创建项目
myweb
,授权 yjs 是项目的主程序员,使其具有上传代码的权限: 1、管理区域→【新建项目】;
2、项目路径选择群组
devops
; 3、项目名称与描述均设为
myweb
; 4、可见等级设为 公开 →【创建项目】;
5、项目设置→【成员】:添加
yjs
为 主程序员 。
添加单个成员到项目中 1、点击左边菜单【设置】->【成员】进入“项目成员” 2、【添加成员】中的【选择要邀请的成员】选择yjs 3、【选择角色权限】选择 主程序员 4、点击 【添加到项目】 通过在群组中添加成员,加入到项目中 1、点击页面上方的【群组】->【您的群组】选择 devops 2、点击左边菜单【成员】 3、【添加成员到 devops】选择 yjs,主程序员 4、点击 【添加到群组】 四、使用新账户登录并初始化仓库 4.1 首次登录与密码修改 退出
root
,使用
yjs/abc@1234
登录,首次登录系统会强制修改密码(例如改为
root@123
)后再登录。
4.2 对于没有创建过 git 版本库的主机 1、克隆远程项目到本地:
cd /opt
git clone http://<服务器IP地址>/devops/myweb.git
2、进入项目目录并创建README文件:
cd myweb
ls -A myweb/ # 目录中仅显示 .git,说明当前项目是一个 Git 仓库,但还没有其他文件
touch README.md # 创建项目说明文件
3、配置当前用户身份信息(用户名和邮箱)
git config user.name "yjs"
git config user.email "yjs@yjs.com"
git config --list
4、提交文件到本地仓库:
git add README.md # 添加到暂存区
git commit -m "add README" # 提交到本地仓库,-m指定提交说明
5、推送到远程仓库:
git push -u origin master # -u设置默认上游分支,后续可直接用git push
执行时需输入用户名
yjs
和密码
root@123
。
6、验证结果 在浏览器中打开远程仓库,检查是否有 README.md 文件和提交记录。
运行以下命令查看提交历史:
git log --oneline
4.3 对于已有本地仓库的主机 4.3.1 HTTP 方式推送 1、进入本地项目目录,关联远程仓库:
cd /opt/myweb/
git remote add origin http://<服务器IP地址>/devops/myweb.git
2、查看远程仓库配置:
git remote # 输出应显示origin
3、推送所有分支和标签到远程:
git push -u origin --all # 推送所有分支
git push -u origin --tags # 推送所有标签
#刷新页面即可看到上传的代码和对应的 tag 标记
4.3.2 SSH 免密推送 1、本地生成SSH密钥:
ssh-keygen -t rsa -C "yjs@yjs.com" -b 4096 # 一路回车使用默认配置
2、查看公钥内容:
cat ~/.ssh/id_rsa.pub
3、在GitLab页面配置公钥: 点击右上角用户头像→【设置】→【SSH密钥】。
复制公钥内容到文本框,点击【增加密钥】。
4、切换远程仓库为SSH协议:
git remote remove origin # 删除原有HTTP协议配置
git remote add origin git@<服务器IP地址>:devops/myweb.git # 添加SSH协议地址
git remote show origin # 查看当前的 remote 方式
5、测试免密推送:
echo 'new line
' >> index.html # 修改文件
git add . # 添加所有修改到暂存区
git commit -m "modify index third" # 提交到本地仓库
git push # 免密推送到远程(无需输入用户名密码)
git push --tags #将所有本地的 Git 标签(Tags)推送到远程仓库
#刷新页面即可看到上传的代码和对应的 tag 标记
五、常见问题与发布前检查清单 1、 容器健康检查迟迟不变为 healthy :耐心等待数分钟;机器规格建议 ≥4GB 内存;观察
docker logs -f gitlab
。
2、 22 端口冲突 :按文中方式改宿主 SSH 为 2222,或将容器 22 改映射到宿主 2222。
两种选一种保持一致。
3、 推送失败 :确认是否已设置
remote origin
;HTTP 方式需账户口令,SSH 方式需添加公钥并使用
git@:group/project.git
。
4、 .gitignore 不生效 :对已跟踪文件需先
git rm --cached
再提交。
总结 本文从GitLab的基础认知出发,详细讲解了通过Docker部署本地GitLab服务的全流程,包括 环境准备、容器配置、用户与项目管理,以及代码提交的两种方式(HTTP与SSH) ,帮助读者建立对版本控制工具的系统认知。
读者可以据此快速完成 GitLab 的落地部署,并将项目开发流程顺畅迁移到 Git/GitLab 的现代协作范式中。
如果在部署GitLab遇到任何问题,欢迎在评论区讨论。
