docker搭建gitlab概念:使用docker容器技术,centos7系统下,使用docker镜像,安装gitlab,将gitlab的http、https、ssh端口映射到其他端口;在宿主机中安装进入nginx,通过nginx反向代理技术访问宿主机中的容器;至于你为什么要这么大惊小怪。..(个人观点)不同的服务依赖不同的环境。当服务需要迁移的时候,很多环境需要重新搭建,其实是挺破的。利用容器技术可以更快地迁移不同的服务,有利于宿主机的性能。通过容器可以更好的控制和监督耗材(不会有服务运行挂掉一台机器...)服务的依赖解耦,(eg:多个服务依赖同一个nginx,其中一个需要重启nginx,导致其他服务中断)最主要的原因(我想试试....~O(∩_∩)O~)闲话少说。..开始自慰。..(这里就不说docker安装的基本操作了。)有需要的朋友可以阅读:docker简单介绍docker入门实践1.拉取gitlab镜像1.1。在官网找到需要的镜像DockerHub在官网,我们可以找到各种各种我们需要的镜像,我们可以通过搜索找到gitlab镜像。1.2.拉取gitlab镜像dockerpullgitlab/gitlab-ce注意:如果不指定对应的版本,会等待很长时间,默认拉取最新版本。..通过dockerimages命令看到gitlab镜像,证明拉取了[root@localhost~]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEgitlab/gitlab-celatest5d8ab6b069184天前1.43GB2.run容器运行:dockerrun--detach--主机名gitlab.xxx.com--publish444:443--publish81:80--publish23:22--namegitlab--restartalways--volume/srv/gitlab/config:/etc/gitlab--volume/srv/gitlab/logs:/var/log/gitlab--volume/srv/gitlab/data:/var/opt/gitlab5d8ab6b06918--hostname:指定容器中绑定的域名,将被使用创建镜像仓库时,这里绑定gitlab.xxx.com--publish:端口映射;容器中的443、80、22端口分别映射到宿主机的444、81、23端口--volume:挂载数据卷,映射到容器的外部存储空间到5d8ab6b06918:容器的镜像ID数据存储本地位置的位置。/srv/gitlab/config/etc/gitlab用于存放GitLab配置文件/srv/gitlab/logs/var/log/gitlab用于存放日志/srv/gitlab/data/var/opt/gitlab用于存放应用数据.通过dockerps命令看到gitlab容器证明你已经运行成功[root@localhost~]#dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUS端口名称9e12ae220c145d8ab6b06918"/assets/wrapper"13分钟前上升13分钟(健康)0.0.0.0:23->22/tcp,0.0.0.0:81->80/tcp,0.0.0.0:444->443/tcpgitlab3.在GitLab上配置容器使用官方的OmnibusGitLab软件包,所有配置都在唯一的配置文件/etc/gitlab/gitlab.rb中,当然我们也可以通过shell会话dockerexec进入容器进行相关操作——itgitlab/bin/bash3.1SMTP设置GitLab的使用涉及到很多邮件,可以选择使用Postfix、sendmai,为邮件服务配置其中的SMTP服务;postfix需要安装其他东西,sendmai比较老。配置SMTP还是比较方便的。我使用SMTP;1.编辑/etc/gitlab/gitlab.rb文件(添加到文件末尾即可)本来想用QQ邮箱的,配置了半天QQ邮箱还是报535(秘钥验证失败),最后放弃了163的选择。gitlab_rails['smtp_enable']=truecom"gitlab_rails['smtp_port']=25gitlab_rails['smtp_user_name']="XXX@163.com"gitlab_rails['smtp_password']="密码"gitlab_rails['smtp_domain']="163.com"gitlab_rails['smtp_authentication']=:logingitlab_rails['smtp_enable_starttls_auto']=truegitlab_rails['gitlab_email_from']="XXX@163.com"user["git_user_email"]="XXX@163.com"说明:gitlab_rails['smtp_address']:SMTP服务地址,不同服务商不同gitlab_rails['smtp_port']:服务端口gitlab_rails['smtp_user_name']:用户名,自行注册gitlab_rails['smtp_password']:客户端授权密钥(获取方式,下图解释)gitlab_rails['gitlab_email_from']:发送邮件的用户,注意与用户名保持一致user["git_user_email"]:发送邮件的用户,注意与用户名保持一致获取邮件客户端密钥:2.以上配置完成后,可以重新加载gitlab配置gitlab-ctlreconfigure3。测试邮件发送gitlab-railsconsoleNotify.test_email('543314032@qq.com','MessageSubject','MessageBody').deliver_now应该会成功。..注意:其实在宿主机的/srv/gitlab/config目录下也可以找到gitlab.rb,修改这个文件即可;但是修改完成后,必须重启容器。dockerrestartgitlab只要容器重启就会自动重新加载Gitlab配置;还有很多网上很多教程修改的gitlab的其他配置文件实现SMTP配置。我不推荐,因为文档要求在gitlab.rb上修改相关配置;其他文件修改,如果不是很熟悉,可能会混淆。..也可能出现无法解释的问题。..如果选择其他服务商的smtp,具体配置可以参考文档SMTP设置。更多配置请参考官方文档:OmnibusGitLab就在这里。其实访问81端口就已经可以访问我们的gitlab了。4.Nginx反向代理,我的nginx是通过rpm安装的;具体安装这里就不多说了!打开nginx配置文件upstreamgit{#域名对应gitlab配置中的external_url#端口对应gitlab配置中的nginx['listen_port']服务器域名:port;}server{listen80;#这个域名是提供给终端用户访问的地址server_name域名;location/{#这个size的设置很重要。如果git仓库中有大文件,设置太小会导致文件推送失败。调整client_max_body_size50m;proxy_redirect关闭;#下面保证gitlab中的项目url是域名而不是http://git,proxy_set_headerHost$host是不可缺少的;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;#反向代理到gitlab内置的nginxproxy_passhttp://git;indexindex.htmlindex.htm;}}5.问题总结5.1external_url设置external_url是一个很重要的配置。GitLab资源(如:git数据库创建、文件、图片)都是基于这个URL;我们克隆的地址;external_url默认是:external_url'GENERATED_EXTERNAL_URL'其实就是http://hostname,你可以把这个值改成对应的主机名或者我p地址作为项目的仓库地址://httphttp://
