手把手带你通过 Docker 搭建 GitLab
代码版本控制为什么重要
在大家熟知的版本控制工具(如CVS、 SVN、Git等)在生产环境中发光发热之前,代码管理是一件十分痛苦的事情。散落在各个存储目录(单机)甚至各个存储设备(多机)上的代码,单是将它们重新正确地组合,都并非易事。
版本控制工具本身的发展也经历了演变:
- “史前时代”三件套——diff、patch与tar包;
- CVS(Concurrent Versions System),它是由荷兰阿姆斯特丹 VU 大学的 Dick Grune 教授通过脚本语言对RCS(一个针对单独文件的版本管理工具)进行封装;
- SVN(Subversion),SVN由CollabNet公司于2000年资助并开始开发,目的是替代 CVS;
- Git是由 Linus Torvalds 自行开发的版本控制系统,用以替代收回无偿使用许可的 BitKeeper。
Git 是个啥
Git 最初是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开源的版本控制软件。与常用的版本控制工具 CVS , Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
使用 Git 进行版本控制的一般工作流程如下:
- 克隆 Git 仓库中的资源作为 WorkSpace
- 对该资源进行操作(增删改等)
- 从 Git 仓库同步最新资源
- 查看修改状态
- 提交修改
- 提交成功,如果发现问题,可以撤回提交
GitLab 又是个啥
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并支持在此基础上搭建 Web 服务。GitLab由乌克兰程序员 DmitriyZaporozhets 和 ValerySizov 开发,它由 Ruby 写成。后来,一些部分用 Go 语言重写。除了基本的代码管理之外,GitLab且具有wiki以及在线编辑、issue跟踪功能、CI/CD等功能。
Why Lighthouse
腾讯云轻量应用服务器,它默认集成了Docker基础镜像,其中打包了Docker容器基础环境,这意味着您无需关注 GitLab 运行环境的搭建,仅通过docker pull、docker run两行命令,便能立刻基于Docker容器快速构建私有代码托管的服务。
服务器准备
搭建 GitLab 的第一步,当然是准备一台服务器了,我们来到腾讯云轻量应用服务器的购买页,选择「Docker 基础镜像」
选好实例套餐、购买时长等之后,点击立即购买即可。
如果您想用已有的轻量应用服务器来尝试,只需要在控制台重装系统即可:
部署 GitLab
购买完成后, Docker 容器运行的基础环境也将自动完成构建,此时我们登录轻量应用服务器,通过 Docker 命令开始 GitLab 的部署。
代码语言:javascript复制# 切换为 root 用户进行操作
sudo -i
代码语言:javascript复制# 拉取最新或指定版本的 GitLab 镜像
# 更多版本 Tag 可参考:https://hub.docker.com/r/gitlab/gitlab-ce/tags
docker pull gitlab/gitlab-ce:latest
代码语言:javascript复制# 运行 GitLab 容器
docker run -d -p 443:443 -p 80:80 -p 222:22 --name gitlab --restart always -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce
修改配置文件
此时我们的 GitLab 就已经安装完成了,接下来需要对 GitLab 的配置文件进行亿些调整(初始情况下,GitLab的配置文件均为注释,需要添加需要的语句以启用)。
代码语言:javascript复制# 打开配置文件后,按“i”进入编辑模式
vim /home/gitlab/config/gitlab.rb
代码语言:javascript复制# 配置访问地址,默认监听 80 端口,
# 注意将 xxx 替换为轻量应用服务器的公网 IP 地址
external_url 'http://xxx.xxx.xxx.xxx'
# 配置 ssh 协议的访问地址和端口
gitlab_rails['gitlab_ssh_host'] = 'xxx.xxx.xxx.xxx'
# 前述将 GitLab 容器的 22 端口映射为 222
gitlab_rails['gitlab_shell_ssh_port'] = 222
编辑完成后保存并退出
代码语言:javascript复制# 按下 ESC 键,输入下方命令后,回车
:wq
此时,需要重启 GitLab 容器,来让我们刚刚的配置生效:
代码语言:javascript复制docker restart gitlab
出现如图所示的现象后,说明重启完成,此时已经可以通过 IP 地址来访问搭建好的 GitLab 了。不过有可能会遇到以下页面,不要慌,原因是重启有一个生效时间,稍等片刻即可。
尝试访问
成功访问的页面如下,不过此时需要登录 GitLab,我们似乎没有获取到用户名&密码,要怎么办?
GitLab初始的用户名为 root,初始密码则需要通过以下命令来获取:
代码语言:javascript复制sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
Tips:建议在首次登录之后就修改密码,因为 GitLab 的初始密码存储在临时文件中,这个文件将在首次执行reconfigure后24小时自动删除。
解析域名
单单通过 IP 地址来访问并不十分优雅,况且如果在配置 url 的时候,设置了 80 之外的端口号,访问时还需要拼上端口,具有很大的安全隐患。这个时候我们就要用到域名了,腾讯云轻量应用服务器控制台已经支持轻量的域名管理,可以选择新购域名或者托管已有域名,并能够快速解析到您的 GitLab 服务器上:
在控制台解析完成之后,我们还需要对配置文件做一点小小的调整:
代码语言:javascript复制# 打开配置文件后,按“i”进行编辑
vim /home/gitlab/config/gitlab.rb
代码语言:javascript复制# 配置访问地址,默认监听 80 端口,
# 注意将 xxx 替换为刚刚在控制台解析的域名
external_url 'http://xxx.xxx'
代码语言:javascript复制# 重启 GitLab 容器
docker restart gitlab
稍等片刻,等待重启生效后,就可以通过域名来访问 GitLab 服务器了,不过这个时候还有一点不完美的地方,就是在访问时浏览器会提示我们“连接不安全”,为了解决这个问题,我们需要进行 HTTPS 的设置。
设置HTTPS
成功设置HTTPS的前提,是拥有一张刚刚解析的域名可用的「SSL 证书」,SSL 证书可以为网站、移动 App、Web API 等应用提供身份验证和数据加密传输等能力。
我们首先来到 腾讯云 SSL 证书控制台,选择新购证书、申请免费证书或上传已有证书,成功拥有一张“已签发”状态的证书之后,我们将证书文件下载至本地:
接着将证书上传至轻量应用服务器,这一步我们用自动化助手 TAT 来完成
通过 TAT 上传文件只需要三步:
- 选择文件
- 选择上传目录
- 选择实例
我们需要将图示的文件上传至 /data/gitlab-volume/gitlab/config/ssl 目录下:
上传完成后,我们需在 GitLab 的配置文件中做一点修改:
代码语言:javascript复制# 注意把 http 换成 https
external_url 'https://xxx.xxx'
# 配置强制 https
nginx['redirect_http_to_https'] =true
然后重启,静候成功。
Git基础操作
代码语言:javascript复制# 为 Git 配置用户名 & 密码 & 邮件
git config --global user.name "xxx"
git config --global user.password "xxxxxxxx"
git config --global user.email "xxx@xxx.xxx"
代码语言:javascript复制# 从远程仓库克隆 Git 资源至本地
git clone https://gitlab.xxx.com/gitlab-instance-xx/mytestproj.git
代码语言:javascript复制# 添加一个 text.txt 的文件,输入“Okay”
vi text.txt
代码语言:javascript复制# 检查 WorkSpace 和暂存区的状态
git status
代码语言:javascript复制# 将项目添加至缓存
git add .
代码语言:javascript复制# 将项目提交至本地仓库
git commit -m "Okay"
代码语言:javascript复制# 前从远程仓库同步最新版本并合并本地版本
git pull origin master
代码语言:javascript复制# 将本地的分支版本上传到远程并合并
git push origin master
我们来看看效果吧~
Lighthouse X GitLab的搭建教程到这里就结束啦,以后大家就好好探索 GitLab 的妙用吧!
参考资料
1、《 Git 权威指南》,蒋鑫;
2、https://zh.wikipedia.org/wiki/Git
3、https://en.wikipedia.org/wiki/GitLab