参考
知识要求:nginx基础知识
搭建感想注:以下是我搭建gitlab时的思考,需要nginx的基础知识,Docker的基础知识才容易理解,与下面的搭建过程是独立的,不感兴趣可直接略过。
其实gitlab已经搭建并用了一年多了,现在所有的项目管理都通过gitlab完成。但是一直以来都有2个问题:
80端口被系统的nginx占用了,所以只能监听非80端口;
443端口也被系统的nginx占用,所以也一直没增加对https的支持;
最近正在尝试对所有已有的服务Docker化,一方面想让gitlab的搭建更简单些,另一方面也把这两个问题都处理掉。
于是就做了两个Docker容器: nginx和gitlab,相当于nginx和gitlab运行在局域网的不同主机,所以端口上没冲突。nginx是对外的服务器,它做一层反向代理到gitlab就能让gitlab提供对外的服务。
然而。。。这个做法却带来了一个新问题:gitlab需要的是22,80,443端口,80与443通过反向代理解决了,22却没办法解决。因为正常来讲,宿主机的SSH肯定也在使用,所以gitlab的SSH监听端口映射到宿主机会有冲突。
当然了,解决办法还是有的,不过非常繁琐。我们做Docker的目的不就是为了降低布署难度吗?如果使用Docker的配置比在宿主机上还繁琐,那使用起来就没太大意义了。
于是gitlab就没有放在Docker中,而是直接搭在宿主机上。
gitlab的安装是很简单的,先下载安装包:
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.2.5-ce.0.el7.x86_64.rpm安装:
rpm -Uvh gitlab-ce-10.2.5-ce.0.el7.x86_64.rpm 配置gitlab内置了nginx的服务,所以默认会占用80和443端口。一般来说,我们做WEB开发,服务器上早就安装了nginx或者apache,把80和443端口给占了,所以需要做些修改防止冲突。
简单的修改端口是不可行的,比如80改成85,当查看gitlab项目时,下图中的项目地址会变成:85/papamk/groupbill这样,看着就不舒服。启用https则在使用过程中则会出现其他的问题。这里不一一论述,直接说明正确的配置方法。
具体步骤:
1.首先确保你的服务器已经有运行nginx,并且该nginx监听宿主机的80和443端口。(如果你原来使用的apache,请通过nginx反向代理到apache,这样apache原来的服务仍然可用)。
2.编辑/etc/gitlab/gitlab.rb:
# 编辑对外的域名(gitlab.papamk.com请添加A记录指向本服务器的公网IP): external_url 'http://gitlab.papamk.com/' # 禁用`gitlab`内置的`nginx`: nginx['enable'] = false # 修改成与nginx运行时的用户一致 web_server['external_users'] = ['www']修改监听方式和监听地址(如果nginx与gitlab都在宿主机上,不用改也行;如果nginx在docker中,则需要修改)
gitlab_workhorse['listen_network'] = "tcp" # 下面的172.18.147.173为本机IP,根据实际情况修改,不能为localhost或者127.0.0.1,否则docker访问不到 gitlab_workhorse['listen_addr'] = "172.18.147.173:8181"最后执行下面命令让配置生效:
$gitlab-ctl reconfigure3.配置nginx
增加gitlab.conf的配置(所有需要注意的地方都加了中文注释):