使用docker搭建gitlab环境

docker搭建gitlab

构想:

经过 docker 容器技术,在centos7系统下,使用 docker镜像,安装 gitlab,并将 gitlabhttp,https,ssh端口映射到其余端口;在宿主机中装入 nginx,经过 nginx反向代理技术访问宿主机中的容器;

至于为何要这样折腾嘛。。。(我的见解)

  1. 不一样的服务依赖的环境各有差别
  2. 当服务须要迁移的时候,不少环境须要从新搭建其实也是挺崩溃的,经过容器技术能够更快的实现迁移
  3. 不一样的服务对宿主机的性能是有损耗的,经过容器能够更好的控制和监管(不会出现一个服务跑挂了一台机器。。。)
  4. 服务的依赖实现解耦,(eg:有多个服务依赖同一个nginx,其中一个须要重启nginx,而致使其余服务中断)
  5. 最重要的缘由(我想试试....~O(∩_∩)O~)

闲话少说了。。。开始撸。。。(docker的安装基本操做就不在这里多说了)有须要的小伙伴能够看下:html

1.拉取gitlab镜像

1.1.官网找到须要的镜像

Docker Hubnginx

在官网咱们能够找到各类各样咱们须要的镜像,经过搜索能够找到gitlab镜像。git

1.2.拉取gitlab镜像

docker pull gitlab/gitlab-ce

注意:若是没有指定对应的版本,默认会拉取 latest版本web

通过漫长的等待。。。docker

经过docker images 命令看到gitlab镜像证实你已经pull完了shell

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
gitlab/gitlab-ce    latest              5d8ab6b06918        4 days ago          1.43GB

2.run容器

运行:segmentfault

docker run --detach --hostname gitlab.xxx.com --publish 444:443 --publish 81:80 --publish 23: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 5d8ab6b06918
  • --hostname :指定容器中绑定的域名,会在建立镜像仓库的时候使用到,这里绑定gitlab.xxx.com
  • --publish:端口映射;容器内的443,80,22端口分别映射到宿主机的444,81,23端口
  • --volume :挂载数据卷,映射到容器中去的容器外部存储空间
  • 5d8ab6b06918 :镜像的ID

数据存储地方centos

当地的位置 容器的位置 做用
/srv/gitlab/config /etc/gitlab 用于存储GitLab配置文件
/srv/gitlab/logs /var/log/gitlab 用于存储日志
/srv/gitlab/data /var/opt/gitlab 用于存储应用数据

经过docker ps 命令看到gitlab容器证实你已经运行成功了bash

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS                                                          NAMES
9e12ae220c14        5d8ab6b06918        "/assets/wrapper"   13 minutes ago      Up 13 minutes (healthy)   0.0.0.0:23->22/tcp, 0.0.0.0:81->80/tcp, 0.0.0.0:444->443/tcp   gitlab

3.配置GitLab

上面的容器使用的是官方Omnibus GitLab软件包,全部的配置都在惟一的配置文件 /etc/gitlab/gitlab.rbapp

固然咱们也能够进入容器内部经过shell会话进行相关操做

docker exec -it gitlab /bin/bash

3.1 SMTP Setting

GitLab的使用过程当中涉及到大量的邮件,而邮件服务你能够选择使用Postfix,sendmai,配置SMTP服务其中一种;

Postfix还要安装其余东西,sendmai又是比较老,相对较下SMTP配置起来会比较方便,我使用的就是SMTP;

1. 编辑/etc/gitlab/gitlab.rb文件(加到文件最后面就行了)。原本想用QQ邮箱的,可是怎奈QQ邮箱配置了半天,仍是报个535(秘钥验证不经过),最后放弃了选择163
gitlab_rails['smtp_enable'] = true

gitlab_rails['smtp_address'] = "smtp.163.com"

gitlab_rails['smtp_port'] = 25

gitlab_rails['smtp_user_name'] = "XXX@163.com"

gitlab_rails['smtp_password'] = "password"

gitlab_rails['smtp_domain'] = "163.com"

gitlab_rails['smtp_authentication'] = :login

gitlab_rails['smtp_enable_starttls_auto'] = true

gitlab_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"] :发出用户,注意跟用户名保持一致

获取邮箱客户端秘钥:

clipboard.png

2.如上配置完成后能够从新加载gitlab的配置
gitlab-ctl reconfigure
3.测试邮件发送
gitlab-rails console
Notify.test_email('543314032@qq.com', 'Message Subject', 'Message Body').deliver_now

应该会成功。。。

注意:

其实你在宿主机的 /srv/gitlab/config 目录的下也能找到gitlab.rb,修改这个文件也能够;可是修改完成后,必须重启容器

docker restart gitlab

只要容器重启Gitlab就会自动从新加载配置;

网上还有不少教程修改的 gitlab的其余配置文件实现SMTP的配置,我不太建议,由于文档上面要求是在gitlab.rb上修改相关的配置的;其余文件修改,若是不是很熟悉可能会混乱。。。也可能会出现莫名其妙的问题。。。

若是你选择的是其余服务商的smtp,具体配置能够看文档

SMTP settings

更多的配置能够参考官方文档:
Omnibus GitLab

来到这里其实你已经能够经过访问81端口来访问咱们的gitlab了

clipboard.png

4.Nginx反向代理

个人nginx是经过rpm安装的;具体的安装这里就很少说了!

打开nginx的配置文件

upstream  git{
    # 域名对应 gitlab配置中的 external_url
    # 端口对应 gitlab 配置中的 nginx['listen_port']
    server  域名:端口;
}


server{
    listen 80;
    # 此域名是提供给最终用户的访问地址
    server_name 域名;

    location / {
        # 这个大小的设置很是重要,若是 git 版本库里面有大文件,设置的过小,文件push 会失败,根据状况调整
        client_max_body_size 50m;

        proxy_redirect off;
        #如下确保 gitlab中项目的 url 是域名而不是 http://git,不可缺乏
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 反向代理到 gitlab 内置的 nginx
        proxy_pass http://git;
        index index.html index.htm;
    }
}

5.问题总结

5.1 external_url 设置

external_url 是一个很重要的配置,GitLab的资源(例如:git创库,文件,图片)都是基于这个URL;说白了就是咱们clone的地址;

external_url 的默认为:

external_url 'GENERATED_EXTERNAL_URL'

其实就是 http://hostname

能够把这个值改为对应的主机名或者ip地址做为项目的仓库地址为:

// http
http://<external_url>:<port>/<组名>/<项目名>.git
// ssh
git@<external_url>:<组名>/<项目名>.git

也能够直接将其改为IP

external_url 'http://10.2.237.56'
5.2 修改SSH

若是是ssh端口,须要修改gitlab_shell_ssh_port

gitlab_rails['gitlab_shell_ssh_port'] = 23

若是要修改 ssh 的域名,就须要修改 gitlab_ssh_host

gitlab_rails['gitlab_ssh_host'] = '10.2.123.123'

5.3 nginx端口

若是你修改了external_url 并加了端口,你会忽然发现,gitalweb 访问不了了,其实你不用慌张,由于这是由于nginx 默认监听的是 external_url 的端口

你只须要更改下 nginx 的端口配置就行了

# nginx['listen_port'] = nil
nginx['listen_port'] = 80

以上的配置都是在 gitlab.rb 里面改的!!!

相关文章
相关标签/搜索