Skip to content

Gitlab单机

关键字说明

  • 字体代表
  • 字体代表

实验明细

docker-compose.yaml

yaml
# 可参考 https://hub.docker.com/r/gitlab/gitlab-ce
# 内置变量,可参考 https://blog.csdn.net/weixin_44749269/article/details/134937579
version: '3'
networks:
  gitlab-network:
    driver: bridge
volumes:
  gitlab-runner-data:
services:
  redis:
    image: registry.cn-shanghai.aliyuncs.com/odboy/ops:redis-7.4.0-alpine3.20
    container_name: gitlab-redis
    hostname: gitlab-redis.odboy.local
    restart: unless-stopped
    command: redis-server --requirepass redisadmin --appendonly yes --protected-mode yes --loglevel notice --databases 100 --always-show-logo no --rdbcompression yes --rdbchecksum yes --replica-serve-stale-data yes --replica-read-only yes --jemalloc-bg-thread yes
    environment:
      TZ: Asia/Shanghai
      LANG: en_US.UTF-8
    volumes:
      - "./gitlab-redis:/data"
    networks:
      - gitlab-network
    ports:
      - "16379:6379"
    healthcheck:
      test: [ "CMD", "redis-cli", "ping" ]
      interval: 1s
      timeout: 3s
      retries: 30
  gitlab:
    image: registry.cn-shanghai.aliyuncs.com/odboy/ops:gitlab-ce-14.8.2
    #image: registry.cn-shanghai.aliyuncs.com/odboy/ops:gitlab-ce-16.11.3
    #image: registry.cn-shanghai.aliyuncs.com/odboy/ops:gitlab-ce-17.2.2
    #image: registry.cn-shanghai.aliyuncs.com/odboy/ops:gitlab-ce-17.3.1
    restart: unless-stopped
    container_name: gitlab-core
    environment:
      TZ: Asia/Shanghai
      # 这个环境变量千万不能加, 为什么呢?因为它会影响数据库, 留着是为了警示自己
      # LANG: en_US.UTF-8
      CI_REGISTRY: 192.168.235.100:22250
      CI_REGISTRY_USER: gitlabadmin
      CI_REGISTRY_PASSWORD: gitlabadmin
      GITLAB_OMNIBUS_CONFIG: |
        # ================ 主服务 ================
        # 设置url地址, web站点访问地址
        external_url 'http://192.168.235.100:20080'
        # 设置ssh地址, ssh访问地址
        gitlab_rails['gitlab_shell_ssh_port'] = 20022
        # 设置时区
        gitlab_rails['time_zone'] = 'Asia/Shanghai'
        # 开启大文件存储
        gitlab_rails['lfs_enabled'] = true
        # ================ Nginx配置 ================
        # Gitlab默认用这个端口号作为其Nginx的监听端口
        nginx['listen_port'] = 20080
        nginx['client_max_body_size'] = '1024m'
        # nginx进程数
        nginx['worker_processes'] = 4 
        # 设置是否监听https
        nginx['listen_https'] = false
        # ================ http服务器 ================
        # http服务器, worker=cpu核数+1
        puma['worker_processes'] = 4
        puma['worker_timeout'] = 90
        # ================ Sidekip是Gitlab的异步任务队列 ================
        # 设置sidekiq并发数, 默认值25。
        sidekiq['concurrency'] = 5
        sidekiq['max_concurrency'] = 5
        # ================ API限流 ================
        # 关闭速率限制
        gitlab_rails['api_rate_limit_enabled'] = false
        # 每个周期内请求限制(例如,每分钟请求数)
        gitlab_rails['api_rate_limit_requests_per_period'] = 100
        # 周期时间(秒)
        gitlab_rails['api_rate_limit_period'] = 60
        gitlab_rails['api_rate_limit_cache_key'] = 'api_rate_limit'
        # ================ 数据库 ================
        # 使用内置的postgresql
        postgresql['enable'] = true
        # 设置数据库缓存, 默认256MB, 这里设置为1GB
        postgresql['shared_buffers'] = "1GB"
        # 设置数据库并发数
        postgresql['max_worker_processes'] = 4
        # 设置数据库连接池大小
        gitlab_rails['db_pool'] = 10
        # 使用外置的redis(单实例、或主从集群)
        redis['enable'] = false
        gitlab_rails['redis_host'] = "gitlab-redis.odboy.local"
        gitlab_rails['redis_port'] = 6379
        gitlab_rails['redis_password'] = "redisadmin"
        gitlab_rails['redis_database'] = 1
        # ================ 禁用 容器仓库 ================
        registry['enable'] = false
        registry_nginx['enable'] = false
        #registry_nginx['listen_port'] = 22250
        #registry_external_url 'http://192.168.235.100:22250'
        gitlab_rails['gitlab_default_projects_features_container_registry'] = false
        gitlab_rails['registry_enabled'] = false
        # ================ 关闭 包仓库、依赖管理 ================
        gitlab_rails['packages_enabled'] = false
        gitlab_rails['dependency_proxy_enabled'] = false
        # ================ 关闭 GitLab Pages ================
        gitlab_pages['enable'] = false
        pages_nginx['enable'] = false
        # ================ 关闭 邮箱 ================
        gitlab_rails['smtp_enable'] = false
        gitlab_rails['smtp_address'] = "smtp.qq.com"
        gitlab_rails['smtp_port'] = 587
        gitlab_rails['smtp_user_name'] = "tianjun@odboy.cn"
        gitlab_rails['smtp_password'] = "xxxxxxxxxxxx"
        gitlab_rails['smtp_domain'] = "smtp.qq.com"
        gitlab_rails['smtp_authentication'] = "login"
        gitlab_rails['gitlab_email_from'] = "tianjun@odboy.cn"
        gitlab_rails['smtp_enable_starttls_auto'] = true
        gitlab_rails['smtp_tls'] = true
        # ================ 关闭 监控和性能基准相关功能 ================
        prometheus_monitoring['enable'] = false
        prometheus['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
        grafana['enable'] = false
        sidekiq['metrics_enabled'] = false
        # ================ 设置gitlab_rails组件的内存消耗 ================
        # dirty_decay_ms 脏页延迟回收时间(已使用过的)
        # muzzy_decay_ms 脏页延迟回收时间(未使用过的)
        gitlab_rails['env'] = {
          'MALLOC_CONF' => 'dirty_decay_ms:250,muzzy_decay_ms:250'
        }
        # ================ 应用性能分析和上报 Usage Statistics ================
        gitlab_rails['usage_ping_enabled'] = false
        gitlab_rails['sentry_enabled'] = false
        grafana['reporting_enabled'] = false
        # ================ 关闭对k8s的cd功能 ================
        # GitLab-KAS And Terraform
        gitlab_kas['enable'] = false
        gitlab_rails['gitlab_kas_enabled'] = false
        gitlab_rails['terraform_state_enabled'] = false
        # ================ 关闭Kerberos和sentinel ================
        gitlab_rails['kerberos_enabled'] = false
        sentinel['enable'] = false
        # ================ 关闭自带聊天Mattermost ================
        mattermost['enable'] = false
        mattermost_nginx['enable'] = false
    networks:
      - gitlab-network
    ports:
      - '20080:20080' # 注意宿主机和容器内部的端口要一致,否则external_url无法访问
      - '20443:443'
      - '20022:20022'
      - '22250:22250'
    volumes:
      - './gitlab-core/config:/etc/gitlab'
      - './gitlab-core/logs:/var/log/gitlab'
      - './gitlab-core/data:/var/opt/gitlab'
#      - './gitlab-core/registry:/var/opt/gitlab/gitlab-rails/shared/registry'
    shm_size: 256mb # set shared memory limit when using docker-compose
    privileged: true
    depends_on:
      - redis
  gitlab-runner:
    image: registry.cn-shanghai.aliyuncs.com/odboy/ops:gitlab-runner-v14.8.2
    #image: registry.cn-shanghai.aliyuncs.com/odboy/ops:gitlab-runner-v16.11.3
    #image: registry.cn-shanghai.aliyuncs.com/odboy/ops:gitlab-runner-v17.2.1
    #image: registry.cn-shanghai.aliyuncs.com/odboy/ops:gitlab-runner-v17.3.1
    container_name: gitlab-runner
    hostname: gitlab-runner.odboy.local
    restart: unless-stopped
    privileged: true
    networks:
      - gitlab-network
    volumes:
      #      - ./gitlab-runner:/etc/gitlab-runner # 如果要使用这种写法,需要当前的gitlab-runner目录有和容器内/etc/gitlab-runner一样的内容
      - gitlab-runner-data:/etc/gitlab-runner
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - gitlab

docker-compose.yaml(无外部依赖版)

yaml
# 可参考 https://hub.docker.com/r/gitlab/gitlab-ce
# 内置变量,可参考 https://blog.csdn.net/weixin_44749269/article/details/134937579
version: '3'
networks:
  network-dev:
    driver: bridge
volumes:
  gitlab-runner-data:
services:
  gitlab:
    image: registry.cn-shanghai.aliyuncs.com/odboy/ops:gitlab-ce-14.8.2
    restart: unless-stopped
    container_name: gitlab-core
    environment:
      TZ: Asia/Shanghai
      GITLAB_OMNIBUS_CONFIG: |
        # ================ 主服务 ================
        # 设置url地址, web站点访问地址
        external_url 'http://192.168.235.100:20080'
        # 设置ssh地址, ssh访问地址
        gitlab_rails['gitlab_shell_ssh_port'] = 20022
        # 设置时区
        gitlab_rails['time_zone'] = 'Asia/Shanghai'
        # 开启大文件存储
        gitlab_rails['lfs_enabled'] = true
        # ================ Nginx配置 ================
        # Gitlab默认用这个端口号作为其Nginx的监听端口
        nginx['listen_port'] = 20080
        nginx['client_max_body_size'] = '1024m'
        # nginx进程数
        nginx['worker_processes'] = 4 
        # 设置是否监听https
        nginx['listen_https'] = false
        # ================ http服务器 ================
        # http服务器, worker=cpu核数+1
        puma['worker_processes'] = 4
        puma['worker_timeout'] = 90
        # ================ Sidekip是Gitlab的异步任务队列 ================
        # 设置sidekiq并发数, 默认值25。
        sidekiq['concurrency'] = 5
        sidekiq['max_concurrency'] = 5
        # ================ API限流 ================
        # 关闭速率限制
        gitlab_rails['api_rate_limit_enabled'] = false
        # 每个周期内请求限制(例如,每分钟请求数)
        gitlab_rails['api_rate_limit_requests_per_period'] = 100
        # 周期时间(秒)
        gitlab_rails['api_rate_limit_period'] = 60
        gitlab_rails['api_rate_limit_cache_key'] = 'api_rate_limit'
        # ================ 数据库 ================
        # 使用内置的postgresql
        postgresql['enable'] = true
        # 设置数据库缓存, 默认256MB, 这里设置为1GB
        postgresql['shared_buffers'] = "1GB"
        # 设置数据库并发数
        postgresql['max_worker_processes'] = 4
        # 设置数据库连接池大小
        gitlab_rails['db_pool'] = 10
        # 使用内置的redis
        redis['enable'] = true
        # ================ 禁用 容器仓库 ================
        registry['enable'] = false
        registry_nginx['enable'] = false
        gitlab_rails['gitlab_default_projects_features_container_registry'] = false
        gitlab_rails['registry_enabled'] = false
        # ================ 关闭 包仓库、依赖管理 ================
        gitlab_rails['packages_enabled'] = false
        gitlab_rails['dependency_proxy_enabled'] = false
        # ================ 关闭 GitLab Pages ================
        gitlab_pages['enable'] = false
        pages_nginx['enable'] = false
        # ================ 关闭 邮箱 ================
        gitlab_rails['smtp_enable'] = false
        gitlab_rails['smtp_address'] = "smtp.qq.com"
        gitlab_rails['smtp_port'] = 587
        gitlab_rails['smtp_user_name'] = "tianjun@odboy.cn"
        gitlab_rails['smtp_password'] = "xxxxxxxxxxxx"
        gitlab_rails['smtp_domain'] = "smtp.qq.com"
        gitlab_rails['smtp_authentication'] = "login"
        gitlab_rails['gitlab_email_from'] = "tianjun@odboy.cn"
        gitlab_rails['smtp_enable_starttls_auto'] = true
        gitlab_rails['smtp_tls'] = true
        # ================ 关闭 监控和性能基准相关功能 ================
        prometheus_monitoring['enable'] = false
        prometheus['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
        grafana['enable'] = false
        sidekiq['metrics_enabled'] = false
        # ================ 设置gitlab_rails组件的内存消耗 ================
        # dirty_decay_ms 脏页延迟回收时间(已使用过的)
        # muzzy_decay_ms 脏页延迟回收时间(未使用过的)
        gitlab_rails['env'] = {
          'MALLOC_CONF' => 'dirty_decay_ms:250,muzzy_decay_ms:250'
        }
        # ================ 应用性能分析和上报 Usage Statistics ================
        gitlab_rails['usage_ping_enabled'] = false
        gitlab_rails['sentry_enabled'] = false
        grafana['reporting_enabled'] = false
        # ================ 关闭对k8s的cd功能 ================
        # GitLab-KAS And Terraform
        gitlab_kas['enable'] = false
        gitlab_rails['gitlab_kas_enabled'] = false
        gitlab_rails['terraform_state_enabled'] = false
        # ================ 关闭Kerberos和sentinel ================
        gitlab_rails['kerberos_enabled'] = false
        sentinel['enable'] = false
        # ================ 关闭自带聊天Mattermost ================
        mattermost['enable'] = false
        mattermost_nginx['enable'] = false
    networks:
      - network-dev
    ports:
      - '20080:20080' # 注意宿主机和容器内部的端口要一致,否则external_url无法访问
      - '20443:443'
      - '20022:20022'
      - '22250:22250'
    volumes:
      - './gitlab-core/config:/etc/gitlab'
      - './gitlab-core/logs:/var/log/gitlab'
      - './gitlab-core/data:/var/opt/gitlab'
    shm_size: 256mb
    privileged: true
  gitlab-runner:
    image: registry.cn-shanghai.aliyuncs.com/odboy/ops:gitlab-runner-v14.8.2
    container_name: gitlab-runner
    restart: unless-stopped
    privileged: true
    networks:
      - network-dev
    volumes:
      - gitlab-runner-data:/etc/gitlab-runner
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - gitlab

获取密码

shell
# 账号 root
docker ps|grep 'gitlab'|grep -v 'runner'|grep -v 'redis'|awk '{print $1}'|xargs -I{} docker exec {} cat /etc/gitlab/initial_root_password|grep 'Password:'

效果图

jietu

访问地址

text
http://192.168.235.100:20080

镜像仓库(优化弃用)

text
docker login --username=gitlabadmin --password=gitlabadmin 192.168.235.100:22250

注册runner

TOKEN从哪来

jietu1jietu2

非交互式注册runner

shell
# 参考 https://docs.gitlab.com/runner/register/?tab=Docker
docker ps|grep gitlab|grep -v redis|grep -v gitlab-core|awk '{print $1}'

# 上条命令拿到容器的Id为 4c68527daec4
docker exec -it 4c68527daec4 bash

# 执行命令
gitlab-runner register --non-interactive --url "http://192.168.235.100:20080/" --registration-token "ok8RGwzVkwufekDsfcxz" --executor "shell" --description "shell-runner"

注册成功截图

jietu2

注销runner

shell
# 通过名称注销。若有重名,只注销第一个
gitlab-runner unregister --name shell-runner
# 注销所有
gitlab-runner unregister --all-runners