在Linux中部署GitLab并优化

前言

本文并不包含违反中国大陆当地相关法律的内容。

本文中的斜体+加粗的内容为在另外一篇文章中进行讲解。

先决条件

  1. 一台安装有Linux的服务器(或者个人电脑)

    配件 推荐配置 预测(建议)最低配置
    CPU(处理器) x86_64架构(amd64),CPU核心数 >= 4 CPU核心数 * 2
    RAM(内存) >= 6GB 4GB
    DISK(磁盘) >= 20GB(>= 10GB可用) 5GB
    BandWidth(带宽) >= 100Mbps 10Mbps
    OS(操作系统) Linux x86_64(本文以Debian Linux为例) Debian Linux
    Env(环境) Docker Engine(本文以Docker为环境进行部署) [本文暂不讲解裸机安装]
  2. 连接到互联网(由于近期发生的Docker相关网站被阻断或者关停的事件,除非可以访问官方源,否则可以考虑使用自建源

    1. 由于本人服务器位于海外,故本文暂不讲解自建源
  3. 一个人

开始部署

  1. 拉取镜像:

      docker pull gitlab/gitlab-ee:latest
  2. 在指定目录下分别创建日志、数据、配置目录:(这里以/opt目录为存储目录)

      # 创建配置目录
      mkdir -p /opt/gitlab-ee/config
      # 创建日志目录
      mkdir -p /opt/gitlab-ee/log
      # 创建数据目录
      mkdir -p /opt/gitlab-ee/data
  3. 创建Docker容器

      docker run --detach \
      --hostname git.example.com \
      -p 8443:443 \
      -p 8080:80 \
      -p 8022:22 \
      --name gitlab \
      --restart always \
      -v /opt/gitlab-ee/config:/etc/gitlab \
      -v /opt/gitlab-ee/log:/var/log/gitlab \
      -v /opt/gitlab-ee/data:/var/opt/gitlab \
      --shm-size 256m gitlab/gitlab-ee:latest
    1. 命令解释:(使用【】括住的端口一定不要与其他服务重复,可以换成别的端口)

      docker run --detach \
      --hostname 【这里填写你想访问的地址,例如:git.example.com】 \
      -p 【HTTPS端口】:443 \
      -p 【HTTP端口】:80 \
      -p 【SSH端口】:22 \
      --name 【容器名称】 \
      --restart always \
      -v 【上一步创建的配置目录的绝对路径】:/etc/gitlab \
      -v 【上一步创建的日志目录的绝对路径】:/var/log/gitlab \
      -v 【上一步创建的数据目录的绝对路径】:/var/opt/gitlab \
      --shm-size 256m gitlab/gitlab-ee:latest
  4. 优化GitLab

      # 编辑gitlab配置
      vim /opt/gitlab-ee/config/gitlab.rb
    1. 找到如下配置项并指定下面给定的值,修改并保存,然后可以重新启动GitLab容器

      # 新版gitlab没有unicorn,用的puma,所以把puma关掉
      puma['worker_processes'] = 0
      # 适当降低了sidekiq的并发
      sidekiq['concurrency'] = 15
      # 禁用监控
      prometheus_monitoring['enable'] = false
      # 不再使用的内存立即释放
      gitlab_rails['env'] = {
      'MALLOC_CONF' => 'dirty_decay_ms:1000,muzzy_decay_ms:1000'
      }
      gitaly['env'] = {
      'MALLOC_CONF' => 'dirty_decay_ms:1000,muzzy_decay_ms:1000'
      }
  5. 查看GitLab默认密码:(不可以弄丢)

      docker exec -it 【容器名称】 grep 'Password:' /etc/gitlab/initial_root_password
  6. 配置Nginx(非公网可以跳过)【SSL证书申请也会在其他文章中进行讲解】

      # 如果配置的CDN自动跳转HTTPS可以不写这块
      server {
          # HTTP端口监听
          listen 80;
          # 公网访问地址(IP或者域名)【需要与HTTPS的server_name一致】
          server_name git.sgtu.org;
          # 301重定向到HTTPS
          return      301 https://$server_name$request_uri;
      }
      # 这块是必写的
      server {
          # HTTPS端口监听,且启用SSL
          listen 443 ssl;
          # 公网访问地址(IP或者域名)
          server_name git.sgtu.org;
          # SSL证书路径
          ssl_certificate /etc/letsencrypt/live/sgtu.org/fullchain.pem;
          # SSL证书私钥路径
          ssl_certificate_key /etc/letsencrypt/live/sgtu.org/privkey.pem;
          # 根路径
          location / {
              # 设置代理请求头:用于识别通过代理或负载均衡器方式连接到Web的客户端的原始IP地址和HTTP头字段
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              # 设置代理请求头:用于确定客户端发起的请求中使用的初始域名
              proxy_set_header X-Forwarded-Host $http_host:$server_port;
              # 设置代理请求头:用于确定客户端发起的请求中使用的代理服务器
              proxy_set_header X-Forwarded-Server $host;
              # 设置代理请求头:用于确定客户端真实IP
              proxy_set_header X-Real-IP $remote_addr;
              # 设置代理请求头:用于确定客户端发起的请求的协议
              proxy_set_header X-Forwarded-Proto $scheme;
              # 目标地址:http://【Docker容器IP地址】:【GitLab的HTTP端口】
              proxy_pass http://172.0.0.1:81;
              # 上传的最大文件大小
              client_max_body_size 200m;
          }
      }
  7. 至此就可以在浏览器中进行访问了,默认用户名:root(记得带上你的默认密码,除非已经配置过了)

image-20240731201144555.png


摸🐟从未停止,努力从未开始。