GitLab介绍

GitLab是一个代码仓库管理系统,其功能近似于GitHUb,但不同之处在于GitLab是一个开源项目,使用MIT许可证可以进行私有化部署。

 

  • GitLab主要是由以下几个组件构成:

    • Nginx:静态代理服务器(WEB服务器)
    • gitlab-shell:用于处理Git 命令和修改authorized keys 列表
    • gitlab-workhorse:轻量级的反向代理服务器
    • logrotate: 日志文件管理工具
    • PostgreSQL:关系型数据库
    • Redis:缓存数据库
    • sidekiq:用于在后台执行队列任务(异步执行)
    • unicorn:An HTTP server for Rack applications,GitLab Rails
  • GitLab目录结构

    • /var/opt/gitlab/git-data/repositories/:库默认存储目录
    • /opt/gitlab: 应用代码和相应的依赖程序
    • /var/opt/gitlab:gitlab-ctl reconfigure 命令编译后的应用数据和配置文件,不需要人为修改配置
    • /etc/gitlab: 配置文件目录
    • /var/log/gitlab:此目录下存放了gitlab 各个组件产生的日志
    • /var/opt/gitlab/backups/:备份文件生成的目录

GitLab 部署

GitLab支持以服务进程的方式部署(包管理器部署),同时也支持使用Docker镜像进行容器化部署,本篇主要介绍容器化部署方式。
部署环境基于Rocky 9.3 Linux进行,默认宿主机已安装Docker、Docker Compose。

 

  1. 部署GitLab Docker镜像

    • 因为我们所部署的是社区版本,所以镜像名称应当是gitlab/gitlab-ce,TAG可以选择Latest也可以根据版本号进行选择。我个人建议根据版本号选择,且在升级GitLab的时候要逐级递增的方式升级,切忌不要跨版本,尤其是跨大版本升级。由于每个版本内的GitLab所依赖的组件也会进行变动,所以跨版本可能会导致不兼容的情况发生从而导致升级失败。

      1. 下载GitLab镜像
        sudo docker pull gitlab/gitlab-ce:latest
      • 如果Docker镜像源是默认地址且服务器在国内,建议换源成国内镜像源
      sudo vi /etc/docker/daemon.json
      
      {
      "registry-mirrors": ["https://registry.docker-cn.com"]
      }
    1. 配置容器数据持久化目录
      • 在想要指定的数据目录下创建一个空文件夹,并将这个空文件夹的path设置环境变量如下
        # path为绝对路径
        export GITLAB_HOME=空文件夹path
      • 也可以在docker cmd中直接设置挂载路径
  2. 运行GitLab Docker镜像

    # $GITLAB_HOME 为步骤ii中设置的环境变量指向的路径
    sudo docker run --detach 
      --hostname gitlab.example.com 
      --env GITLAB_OMNIBUS_CONFIG="external_url
      'http://gitlab.example.com'" 
      --publish 443:443 --publish 80:80 --publish 22:22 
      --name gitlab 
      --restart always 
      --volume $GITLAB_HOME/config:/etc/gitlab 
      --volume $GITLAB_HOME/logs:/var/log/gitlab 
      --volume $GITLAB_HOME/data:/var/opt/gitlab 
      --shm-size 256m 
      gitlab/gitlab-ce:latest
  3. Docker compose方式部署

    1. 创建一个docker-compose.yml文件,文件位置自定义
    version: '3.6'
    services:
      gitlab:
        image: gitlab/gitlab-ce:latest
        container_name: gitlab
        restart: always
        hostname: 'gitlab.example.com'
        environment:
          TZ: 'Asia/Shanghai'
          # Add any other gitlab.rb configuration here, each on its own line
          GITLAB_OMNIBUS_CONFIG: |
            external_url 'https://gitlab.example.com'
            gitlab_rails['time_zone'] = 'Asia/Shanghai'
       ports:
          - '80:80'
          - '443:443'
          - '22:22'
        volumes:
          - '$GITLAB_HOME/config:/etc/gitlab'
          - '$GITLAB_HOME/logs:/var/log/gitlab'
          - '$GITLAB_HOME/data:/var/opt/gitlab'
        shm_size: '256m'
    1. 如果要自定义GitLab的端口,可以参考如下yml文件
    version: '3.6'
    services:
      gitlab:
        image: gitlab/gitlab-ce:latest
        container_name: gitlab
        restart: always
        hostname: 'gitlab.example.com'
        environment:
          TZ: 'Asia/Shanghai'
          # Add any other gitlab.rb configuration here, each on its own line
          GITLAB_OMNIBUS_CONFIG: |
            external_url 'https://gitlab.example.com:2424'
            gitlab_rails['gitlab_shell_ssh_port'] = 2424
            gitlab_rails['time_zone'] = 'Asia/Shanghai'
       ports:
          - '8929:8929'
          - '443:443'
          - '2424:2424'
        volumes:
          - '$GITLAB_HOME/config:/etc/gitlab'
          - '$GITLAB_HOME/logs:/var/log/gitlab'
          - '$GITLAB_HOME/data:/var/opt/gitlab'
        shm_size: '256m'
  4. 运行docker compose

    # 创建并运行GitLab容器
    sudo docker compose up -d
    # 查看容器名为gitlab的容器运行日志且实时更新
    sudo docker compose logs -f gitlab
  5. 使用随机初始化密码登录GitLab

    • 查看GitLab持久化目录下的config目录内的initial_root_password文件,使用该文件里的password以root用户登录GitLab

file