纯docker环境下安装docker版的gitlab的详细过程(看了这篇助你跳过N多的坑)

接下来看之前,先说说服务器的情况:

服务器已经装好了nginx,mysql,php-fpm,且都是docker的,mysql因为需要装了两个,一个5.7,一个8.0。现在需要装的是docker版的gitlab。至于gitlab是干嘛的,简单一点说就是github的亲戚,代码管理用的,至于更详细的自己百度了。

下面具体说过程:

#拉取gitlab镜像
docker pull gitlab/gitlab-ce

这个看你服务器的网速,我的速度还可以,默认下载是最新版的。其实新版的还可以,带语言切换的,默认是英文的,可以在设置-》偏好设置-》语言里选择简体中文。

拉下来现在最新的版本是:

GitLab: 12.8.5 (7b66e67a28a) FOSS
GitLab Shell: 11.0.0
PostgreSQL: 10.12

接着转入正题,image下好了,就把容器开起来吧:

开容器之前,需要建立三个文件夹,来挂接虚拟机下的配置、数据和日志的:

$ makedir -p /mnt/gitlab/etc     makedir -p /mnt/gitlab/data      makedir -p /mnt/gitlab/log

docker run --detach --hostname git.xxx.com --publish 8443:443 --publish 8880:8880 --publish 60022:22 --name gitlab --restart unless-stopped -v /mnt/gitlab/etc:/etc/gitlab -v /mnt/gitlab/log:/var/log/gitlab -v /mnt/gitlab/data:/var/opt/gitlab 容器ID

这里挂接了几个端口,8443到容器里的443,然后是8880到容器里的8880(这里一定不要挂容器里的80端口,我之前就是因为这反复装了容器好几次。还有一个原因,如果是挂80,那么push上去的文档地址默认是不带端口,打开就是404,此处是最开始的一个大坑),60022挂接的是容器里的ssh端口22,其他的看看也就明白了。

因为宿主机里已经有装了nginx的docker了,已经有使用80和443了,所以这两个端口是一定是要排除的了。

执行完上面的命令,再来一个docker ps,看一下gitlab的容器是不是有了,如果一切正常,肯定是有的。

接下来是编辑配置文件,也就是在宿主机下编辑gitlab.rb文件,具体命令是:

nano /mnt/gitlab/etc/gitlab.rb 

这里说下,我这里所有的文档编辑都用的nano,不是vim,个人习惯问题,勿喷。

gitlab.rb文件内容很多的,不过都被#起来了,所以这里只给出最核心的配置,复制到里面即可

external_url 'http://git.xxx.com:8880'
nginx['listen_addresses'] = ['*']
nginx['listen_port'] = 8880
gitlab_rails['gitlab_shell_ssh_port'] = 60022

postgresql['shared_buffers'] = "256MB"
postgresql['max_connections'] = 200

需要说明的是,我这里的环境都是docker,所以不存在什么nginx冲突的事情。external_url这里的域名是加了端口的,因为设置了非80端口,需要特别指定一下gitlab里的nginx需要监听的端口。另外还有宿主机和gitlab里的ssh对应的端口。

至于postgresql两个是设置gitlab里数据库的性能。

这里为什么external_url 一定要加端口呢。因为不加的话,你push上去的文件地址就会缺少端口,打开就是404或者文件不存在。此处是个大坑,之前没留意,反反复复折腾了好几次。

接下来需要编辑 /mnt/gitlab/data/gitlab-rails/etc/gitlab.yml 文件。

nano /mnt/gitlab/data/gitlab-rails/etc/gitlab.yml

打开里面只需要修改host和port的值就OK了,其他的不用管。说说这里的奇怪事,之前创建的容器,这里该过端口了,但是一执行下面的gitlab-ctl reconfigure命令,然后这个端口就会改为80,而且还不是自己改的,很奇葩的问题。然后要么系统开不起来,要么占端口,要么系统起来了,但是push上去的问题的地址就是却端口的,总之有些诡异。不过我觉得还是跟上面gitlab.rb的配置有关系,改成上面的配置后就没出现过这些奇怪的问题。为了在全docker环境下安装gitlab,那gitlab的容器不知道被我撸了多少遍,其中遭遇的坑只有自己知道。废话太多了,还是继续吧。

...

host:git.xxx.com

port:8880

...

修改好后保持,退出,进入容器内,应用重新配好的配置并重启GitLab,然后查看GitLab的状态。

docker exec -ti gitlab /bin/bash

gitlab-ctl reconfigure #花时间比较多
gitlab-ctl restart

gitlab-ctl status

然后exit退出容器,出来看gitlab的状态吧,docker ps

如果gitlab,提示还在 starting,那你就还需要等待。如果是health里,那就可以打开网址看了。如果是unhealth,那很有可能是配置文件配置有问题,需要返回去修改。

如果打开http://git.xxx.com:8880,出现502的提示,那很有可能是端口的问题,可能端口冲突,或者防火墙没开启这个端口,这里就不细说了。

如果一切正常(health),那么就打开http://git.xxx.com:8880看吧。具体怎么配置就不细说了,大概说下。

首次登陆需要你设置root的密码,然后登陆。登陆后直接到个人中心里面的设置(setting)的偏好配置(preferences),在里面找到语言(language),改为简体中文。然后再刷新,简体中文就出来了,也不用像之前的版本装语言包了。

最核心的需要注意的就是创建一个项目后,你看一下克隆的那个按钮,看一下ssh和http那两个地址是否都是网址带端口号的,然后你再pull一个文件上去,看看文件的地址是否也带了端口号的,如果是,那么你打开也可以看到代码,否则打开就是404或者"file not found"的提示,这个提示其实是告诉你缺少端口号。如果上面说的都正常,那么恭喜你,gitlab的docker被你撸好了。

参考文章(感谢各位前面带路的大神):

https://www.cnblogs.com/zuxing/articles/9329152.html

https://segmentfault.com/a/1190000014305359

https://docs.gitlab.com/omnibus/docker/

最后再啰嗦一句,git,除了安装官方的Git工具,最好还装个TortoiseGit,省不少事,只要配置好了,撸起来相当舒心,节约不少时间。

原文地址:https://www.cnblogs.com/eaglepie/p/12482937.html