http:///archives/2019/install-gitlab-with-docker.html 写的,但是还是遇到了一些坑,我会贴上坑的解决办法。
题外话,james blog 写了不少好博客,我不认识他,但是他的文章帮了我很多,很感谢他。

作为互联网工作者,相信对 GitHub 这个 全球最大的同性交友网站 一定不会陌生,GitHub 使用的是目前如日中天的 Git 分布式版本控制系统。
Git 是什么?Git 是目前世界上最先进的分布式版本控制系统,没有之一!关于 Git 与 GitHub 的相关内容可以查看我往期的教程。而本篇博客要介绍的是如何搭建一套私人的类似于 GitHub 的网站【GitLab】,它可以为个人、组织、企业提供项目或代码的管理功能。
Git 与 GitHub
具体请查看我往期的博客文章:
安装环境
GitLab 的搭建有多种方式,在本篇博客将介绍一种比较简单快捷的方式,那就是使用 Docker 来搭建。
- 系统:Ubuntu 18.04
- Docker: 18.9.05
- GitLab: 最新版本 latest
- 需求内存:最低 2 GB
想要使用 Docker 来搭建 GitLab 的话需要先安装 Docker, 关于 Docker 的详细安装步骤已经在我的上一篇博客中介绍了。请前往查看:Docker 之 ubuntu 安装。
搭建 GitLab
在按照上篇博客成功安装了 Docker 之后,我们就可以在 Docker 中来搭建 GitLab 了。
GitLab 分为 社区版(Community Edition,缩写为 CE)和 企业版(Enterprise Edition,缩写为 EE)。社区版是免费的,而企业版包含一些收费服务,一般来说个人开发者用社区版就足够了,本篇博文的教程也只是针对社区版。
首先需要先下载 GitLab CE 的镜像,使用下面的命令进行下载,因为文件较大,所以可能需要一点时间,耐心等待即可。
# 不加 tag 则默认为最新版本 latest (一般使用这种)
$ sudo docker pull gitlab/gitlab-ce
# 如果需要下载其他版本,加上对应的 tag 即可,如:
$ sudo docker pull gitlab/gitlab-ce:rc | |

下载完成之后只需要一行命令即可启动 GitLab ,复制下面的命令直接运行即可。
$ sudo docker run --detach \
--hostname \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
注意了,因为端口号不够用,这里第三行,我写的是
--publish 443:443 --publish 80:80 --publish 2222:22 \
这条命令很长,我们来分解一下看看每行都代表什么意思。
|
运行成功之后,可以使用下面的命令列表所有的容器,当然其中应该包括刚运行的 gitlab容器。
$ sudo docker container ls | |

如上图所示,可以看到 GitLab 已经在运行了,其他有一个属性 STATUS 为 health: starting,说明 gitlab 的服务正在启动中,还没有启动完毕。等这个状态变成 healthy 时则说明已经部署完成,可以访问了。使用 ip addr 命令查看系统的 IP 地址,然后在浏览器输入地址即可访问。
注意了,输入ip addr,有docker的才是,比如ip是172.17.0.1

然后下面还有坑,可能输入这个ip地址还是不行,得在浏览器输入 172.17.0.1/user/sign_in,一定要注意后面的那一串!


配置邮件服务器
想要让 GitLab 给你发送邮件,还要配置一下邮件服务器,这里以 QQ 邮箱的 IMAP/SMTP 服务 来配置。
打开邮箱 -> 设置 -> 账户,然后开启 IMAP/SMTP 服务,然后根据文档获取 授权码 ,这步比较重要。
然后打开在系统中打开文件 /srv/gitlab/config/gitlab.rb 文件,可以使用gedit、vi、vim等等编辑器编辑。找到 Email Settings的注释位置,然后添加以下内容:
复制
### Email Settings
gitlab_rails['smtp_enable'] = true # 开启 SMTP 功能
gitlab_rails['smtp_address'] = ""
gitlab_rails['smtp_port'] = 465 # 端口不可以选择587,测试过会发送邮件失败
gitlab_rails['smtp_user_name'] = "212****71@" # * 你的邮箱账号,也可以是ge**lin@等
gitlab_rails['smtp_password'] = "cdns********fdgc" # * 授权码,不是密码
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = '212****71@' # * 发件人信息,必须跟‘smtp_user_name’保持一致,否则报错
gitlab_rails['smtp_domain'] = "" # 修改并不影响 可修改为exmail./james.com 经测试完全不影响,删除也不影响,并且发送的邮件都是一样的。 | |
上面这些参数,除了注释开头加了 * 的需要修改为你自己的信息之外,其他信息照写即可,配置完成后保存。然后输入下面的命令使配置生效。
我这边是163,代码如下:

# 使用 Docker安装的 gitlab 只能使用下面的命令,gitlab-ctl reconfigure命令是不会生效的
$ sudo docker exec gitlab gitlab-ctl reconfigure | |
使配置生效之后我们可以使用 gitlab 自带的工具进行一下测试。依次执行下面的命令:
| |
注意了,这里又有坑了,我输入第一行代码
gitlab-rails console production
当时没看到这个报错,直接无脑下一步 Notify.test_email('收件人邮箱', '邮件标题', '邮件正文').deliver_now
然后报错了,错误信息是

我的重心就一直放在解决“syntax error near unexpected token `”上面,后来看了另外一篇博客

试了一下语句 gitlab-rails console
才发现原来是之前的语句没办法进入邮件控制台,所以我需要改成
gitlab-rails console时间有点长,要多等一会,最后的结果是这样的

然后输入下面的命令就可以了。
Notify.test_email('1******@','Message Subject', 'Message Body').deliver_now然后我以为可以了,还有问题麻蛋,Net::OpenTimeout (execution expired)

、
还好我机智,及时反应过来可能是服务器网络断了导致超时,果然,服务器登的是老师的号,老师流量用太多被封了。
那就等我的号测试呗。
然后结果是OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=error: wrong version number)

wrtm怎么这么事逼,又是一通百度加必应,感谢博客https://www.jianshu.com/p/6bf7f72c90b1
其中gitlab_rails['smtp_tls'] = true这一项配置是导致该报错误的元凶。
解决方法:将其设置为false

邮件终于尼玛发送成功了!


感动天感动地,后面是jiams 的博客了,感谢大佬!!!

测试完成之后重启 gitlab 即可。
配置 Git 仓库访问路径
在之前第一次运行 gitlab 容器的时候,有一个参数 hostname 为 , 如果你没有配置相应域名的话,你的仓库的地址将会变为下面这样:
- ssh : git@:James/test.git
- http:http:///James/test.git
如果域名不存在的话,这个地址是无法进行 clone 的。
为了解决这个问题,我们可以设置成 IP 或 你配置了的域名来访问。
打开文件 /srv/gitlab/config/gitlab.rb 文件并找到 # external_url 'GENERATED_EXTERNAL_URL' 这行,去掉注释,并按照下面的格式修改。
复制
# ip 形式
external_url 'http://192.168.1.44'
# 域名形式
external_url 'http://'
# 子域名
external_url 'http://gitlab.'
# 其他形式
external_url 'http:///gitlab'
|
以上形式都是可以的。修改完成后,输入命令 sudo docker exec gitlab gitlab-ctl reconfigure 使配置生效,然后重启 gitlab 即可。
重启之后,仓库的地址将变为下面这样,以 ip 形式为例:
- ssh : git@192.168.1.44:James/test.git
- http:http://192.168.1.44/James/test.git
容器的常用操作
在 Docker 中,gitlab 是作为一个容器存在的,gitlab 的所有程序,配置,依赖等都在这个容器中。下面列出一些容器的常用操作命令。
# 开启 gitlab 容器
# 上面那个特别长的那一条命令仅在第一次运行 gitlab 的时候需要
# 之后开启 gitlab 使用下面的命令即可
$ sudo docker start gitlab
# 关闭 gitlab
$ sudo docker stop gitlab
# 重启 gitlab
$ sudo docker restart gitlab | |
其他
关于Docker 及 GitLab 的知识还有很多
















