Administrator
发布于 2025-11-15 / 3 阅读
0
0

Docker搭建GitLab

官方中文教程:https://www.gitlab.com.cn/ins...
官方安装链接:
https://about.gitlab.com/install
普通方式安装请见:
https://segmentfault.com/a/11...

环境要求:内存至少8G,GitLab是很耗内存滴

一、安装

一般会将 GitLab 的配置 (etc) 、 日志 (log) 、数据 (data) 放到容器之外, 便于日后升级

services:
  gitlab:
    image: gitlab/gitlab-ce:17.10.1-ce.0  # 指定版本,避免自动升级风险
    container_name: gitlab
    hostname: gitlab.nhub.site
    restart: always
    environment:
      TZ: Asia/Shanghai
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://gitlab.nhub.site'
        gitlab_rails['gitlab_ssh_host'] = 'gitlab.nhub.site'
        gitlab_rails['gitlab_shell_ssh_port'] = 2222
        gitlab_rails['time_zone'] = 'Asia/Shanghai'
        gitlab_rails['initial_root_password'] = "idontknow"
        gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
        gitlab_rails['backup_keep_time'] = 604800  # 保留7天备份
        postgresql['shared_buffers'] = "256MB"      # 优化数据库
        nginx['worker_processes'] = 4               # 根据CPU核心数调整
        nginx['client_max_body_size'] = '512m'
        # 关闭电子邮件相关功能
        gitlab_rails['smtp_enable'] = false
        gitlab_rails['gitlab_email_enabled'] = false
        gitlab_rails['incoming_email_enabled'] = false
        # Usage Statistics
        gitlab_rails['usage_ping_enabled'] = false
        gitlab_rails['sentry_enabled'] = false
        # 关闭容器仓库功能
        gitlab_rails['gitlab_default_projects_features_container_registry'] = false
        gitlab_rails['registry_enabled'] = false
        registry['enable'] = false
        registry_nginx['enable'] = false
        # 包仓库
        gitlab_rails['packages_enabled'] = false
        gitlab_rails['dependency_proxy_enabled'] = false
        # GitLab KAS
        gitlab_kas['enable'] = false
        gitlab_rails['gitlab_kas_enabled'] = false
        gitlab_rails['terraform_state_enabled'] = false
        # Mattermost 聊天关闭
        mattermost['enable'] = false
        mattermost_nginx['enable'] = false
        # Kerberos
        gitlab_rails['kerberos_enabled'] = false
        sentinel['enable'] = false
        # 降低后台守护进程并发数
        sidekiq['max_concurrency'] = 8  # 推荐设置为核心数*2
        gitlab_ci['gitlab_ci_all_broken_builds'] = false
        gitlab_ci['gitlab_ci_add_pusher'] = false
        # 禁用 PUMA 集群模式
        puma['worker_processes'] = 4
        puma['min_threads'] = 2
        puma['max_threads'] = 4
        puma['per_worker_max_memory_mb'] = 2048
        # 关闭监控
        prometheus_monitoring['enable'] = false
        alertmanager['enable'] = false
        node_exporter['enable'] = false
        redis_exporter['enable'] = false
        postgres_exporter['enable'] = false
        pgbouncer_exporter['enable'] = false
        gitlab_exporter['enable'] = false
        sidekiq['metrics_enabled'] = false
        gitlab_rails['gitlab_default_projects_features_builds'] = false
    ports:
      - "80:80"
      - "443:443"
      - "2222:22"    # 避免与宿主机SSH冲突
    volumes:
      - /opt/gitlab/config:/etc/gitlab
      - /opt/gitlab/data:/var/opt/gitlab
      - /opt/gitlab/logs:/var/log/gitlab
    shm_size: '512m'  # 避免CI/CD内存不足
    ulimits:
      nproc: 65535
      nofile:
        soft: 65535
        hard: 65535
    deploy:
      resources:
        limits:
          cpus: '4'
          memory: 16G

环境变量

## GitLab URL 配置http协议所使用的访问地址
external_url 'https://gitlab.nhub.site' # clone时显示的地址,gitlab 的域名

# 配置ssh协议所使用的访问地址和端口
gitlab_rails['gitlab_ssh_host'] = 'gitlab.nhub.site'
gitlab_rails['gitlab_shell_ssh_port'] = 10022

访问 http://gitlab.nhub.site,系统默认的管理员账号为 root,第一次访问 GitLab,会要求初始化管理员账号的密码。

二、备份与恢复

1 数据备份

[root@git-server ~]# vim /etc/gitlab/gitlab.rb

# gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" #备份的路径

###! Docs: https://docs.gitlab.com/ce/raketasks/backup_restore.html#backup-archive-permissions
gitlab_rails['backup_archive_permissions'] = 0644       #备份文件的默认权限

###! The duration in seconds to keep backups before they are allowed to be deleted
gitlab_rails['backup_keep_time'] = 6048000               #保留时长,秒为单位

[root@git-server backups]# /opt/gitlab/bin/gitlab-rake gitlab:backup:create

1.1 创建备份计划任务

[root@jenkins-master backups]# crontab -l
0 2 * * * docker exec gitlab gitlab-rake gitlab:backup:create

2 数据恢复

特别注意:

  • 备份目录和gitlab.rb中定义的备份目录必须一致

  • GitLab的版本和备份文件中的版本必须一致,否则还原时会报错。

[root@jenkins-master backups]# ls
1763056867_2025_11_14_15.11.13_gitlab_backup.tar
[root@jenkins-master backups]# gitlab-rake gitlab:backup:restore BACKUP=1763056867_2025_11_14_15.11.13

三、GitLab内存占用过高解决方法

首先需要确定你已经知道官方明确要求的GitLab的硬件需求了,硬件需求详见GitLab Requirements,简单来讲,官方推荐最低物理配置是2核,4G,下面就总结一下减少GitLab占用内存的一些方法

1.1 调整 Unicorn(或 Puma)配置

GitLab 使用 Unicorn(旧版)或 Puma(新版本)作为其 Web 服务器。可以通过减少并发工作进程的数量来减少内存占用。

修改配置文件/etc/gitlab/gitlab.rb中的worker_processes:

unicorn['worker_processes'] = 2

默认是被注释掉的,官方建议该值是CPU核心数加一,可以提高服务器的响应速度,如果内存只有4G,或者服务器上有其它业务,就不要改了,以免内存不足。另外,这个参数最小值是2,设为1,服务器可能会卡死。

官方推荐为核心数+1,实际请根据服务器事情情况设置大小(值越小占用越少)

1.2 调整 Sidekiq 配置

Sidekiq 是 GitLab 用于处理后台任务的组件。如果 Sidekiq 消耗过多的内存,可以减少其工作进程数。

在 gitlab.rb 配置文件中,找到并调整 sidekiq['concurrency'] 参数:

sidekiq['concurrency'] = 10 # 默认值通常是 25,可以根据需求减少

1.3 优化数据库连接数

GitLab 与 PostgreSQL 进行大量的交互,过多的数据库连接会消耗过多内存。

你可以通过调整 GitLab 配置来限制 PostgreSQL 的连接数,减少连接数可以降低内存占用。

修改 gitlab.rb 文件中的以下参数:

gitlab_rails['db_pool'] = 20

1.4 减少数据库并发数

postgresql['max_worker_processes'] = 8

1.5 减少数据库缓存

postgresql['shared_buffers'] = "256MB" # 默认为256MB,可适当改小

角色权限

Guest,Reporter,Developer,Master,Owner对应的权限。

Guest

Reporter

Developer

Master

Owner

创建新问题(Issue)

*

*

*

*

*

发表评论

*

*

*

*

*

拉取项目代码

*

*

*

*

下载项目

*

*

*

*

创建代码片段

*

*

*

*

创建新的合并请求(Merge Request)

*

*

*

向非受保护分支推送更改

*

*

*

删除非受保护分支

*

*

*

添加标签

*

*

*

编写 Wiki

*

*

*

管理问题跟踪器

*

*

*

添加新团队成员

*

*

向受保护分支推送更改

*

*

管理分支保护

*

*

管理 Git 标签

*

*

编辑项目

*

*

为项目添加部署密钥

*

*

配置项目钩子

*

*

参考链接

Docker搭建GitLab - 全栈开发之路 - SegmentFault 思否


评论