GitLab搭建(Docker版)

参考地址:GitLab官网地址

来到GitLab的官网地址,安装如图开始操作:

点击install

选择系统环境包

当然,上述选择系统环境包的时候是传统的二进制包安装方式,你点击进去根据页面的描述跟着走就行,这里咋们是使用Docker的方式安装,所以继续往下看就行。

选择Docker的安装方式

选择installation篇章

你可以直接安装官方文档的走也可以,不过我自己感觉有点散,所以我就写了这篇文章来总结一下。

1. Docker-Compose编写

这里我使用docker-compose的方式来搭建GitLab。

参考官方给到的docker-compose文件,直接复制过来改改:

docker-compose篇幅

我改造过后的docker-compose文件如下:

services:
  gitlab:
    image: gitlab/gitlab-ce:latest
    container_name: gitlab
    restart: always
    hostname: '192.168.3.69'
    environment:
      TZ: 'Asia/Shanghai'
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://192.168.3.69:1015' #定义外部访问web地址
        gitlab_rails['gitlab_shell_ssh_port'] = 1022 #定义ssh端口,通过ssh拉取仓库代码需要用到
    ports:
      - '1015:1015' # HTTP访问端口;注意宿主机和容器内部的端口要一致,否则external_url无法访问
      - '1016:1016' # HTTPS访问端口
      - '1022:22' # SSH克隆端口
    volumes:
      - ./gitlab/config:/etc/gitlab       # GitLab配置文件
      - ./gitlab/logs:/var/log/gitlab     # 日志文件
      - ./gitlab/data:/var/opt/gitlab     # 应用数据
    shm_size: '256m'

这里与官方文档有几点不同:

  1. 官方使用的镜像是gitlab-ee(企业版)、我这里使用的是gitlab-ce(社区版);企业版有部分功能是需要付费的,而社区版是完全免费的。个人用户或小团队用社区版完全是足够的

    [!tip]

    其实我们2000+人的公司也是用的社区版,社区版是真的够用。

  2. 端口访问处,我修改了HTTP、HTTPS访问端口以及SSH克隆端口。因为我是家宽,所以80和443这两个端口运营商是不开放的,如果你是云服务器,那么完全就可以用80和443这两个端口。

    但是有一点需要注意,正如我上面所提到的宿主机和容器内部的端口要一致,否则external_url无法访问

  3. external_url是外部访问的地址,相当于你必须要输入和external_url一样的地址(包括端口)才能够访问自己搭建的GitLab服务。如果你有域名,那么这里你就可以用域名访问,同时你要注意HTTP和HTTPS,并且如果你不是用的80或443端口,用的其他端口,后面也应该跟上端口,这样才能够访问。

docker-compose文件准备好了,接下来就是创建GitLab需要所需的文件以及文件夹,需要和你自己配置的volumes对应:

mkdir -p ./gitlab/config ./gitlab/logs /gitlab/data

创建好了之后,就可以使用命令启动GitLab:

docker-compose up -d

启动之后,你可以使用命令查看GitLab启动的日志:

docker logs -f gitlab

查看GitLab启动的状态

docker exec -it gitlab gitlab-ctl status

查看启动状态

可见如上服务全部都是run的时候,就表明启动成功啦。

服务启动成功之后,就可以访问GitLab啦,访问地址就是你docker-compose文件中的external_url这个配置项的值。

初始的账号为root

密码需要使用命令来获取:

docker exec -it gitlab cat /etc/gitlab/initial_root_password

或者直接在你挂载的目录中查看文件./gitlab/config/initial_root_password中的密码。

2. HTTPS访问配置

如果你只是想HTTP访问,那么你完全不用看本小节。

参考地址:GitLab官方SSL配置

网上很多都在说需要改gitlab.rb文件配置,其实不然,因为咋们是Docker的方式配置的,我们完全可以在docker-compose文件中的GITLAB_OMNIBUS_CONFIG配置项配置。

给我出我的完整的docker-compose文件:

services:
  gitlab:
    image: gitlab/gitlab-ce:latest
    container_name: gitlab
    restart: always
    hostname: 'xx.xxx.cn'
    environment:
      TZ: 'Asia/Shanghai'
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://xx.xxx.cn:1016' #定义外部访问web地址
        gitlab_rails['gitlab_shell_ssh_port'] = 1022 #定义ssh端口,通过ssh拉取仓库代码需要用到
        letsencrypt['enable'] = false #使用自己手动创建的证书,则必须禁用 Let's Encrypt 集成,否则证书可能会因自动续订而被覆盖。
        nginx['redirect_http_to_https']= true   #如果你要使用https访问,则需要重定向所有的http流量到https,
        nginx['ssl_certificate'] = "/etc/gitlab/ssl/xx.xxx.cn.crt"    #放置对应的证书名称(容器内地址)
        nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/xx.xxx.cn.key" #放置对应的证书名称(容器内地址)

    ports:
      - '1015:1015' # HTTP访问端口;注意宿主机和容器内部的端口要一致,否则external_url无法访问
      - '1016:1016' # HTTPS访问端口
      - '1022:22' # SSH克隆端口
    volumes:
      - ./gitlab/config:/etc/gitlab       # GitLab配置文件
      - ./gitlab/logs:/var/log/gitlab     # 日志文件
      - ./gitlab/data:/var/opt/gitlab     # 应用数据
    shm_size: '256m'

这里需要注意的配置如下:

  1. letsencrypt['enable']:该值可以为true也可以为false,如果你是使用的自己手动创建的证书,那么你必须设置为false,防止因为证书自动续订而覆盖你手动创建的证书。

  2. nginx['redirect_http_to_https']:如果你要使用https访问,则需要重定向所有的http流量到https,所以这个配置项要设置为true。

  3. nginx['ssl_certificate']:该值为容器内的地址,通常就是容器内的/etc/gitlab/ssl/域名.crt,对应你自己的挂载位置在./gitlab/config/ssl/域名.crt

  4. nginx['ssl_certificate_key']:该值为容器内的地址,通常就是容器内的/etc/gitlab/ssl/域名.key,对应你自己的挂载位置在./gitlab/config/ssl/域名.key

  5. external_url:该值要为https开头,并且如果你是非443端口,那么你也要明确吧端口写出来,就如上述地址:

    https://xx.xxx.cn:1016
    

[!caution]

如果在你的挂载目录中没有ssl相关的目录,那么你需要手动创建出来。

https访问