Skip to content

docker安装gitlab

环境要求:2G以上的可用内存

一、下载docker镜像

#默认下载最新的镜像

docker pull gitlab/gitlab-ce

二、启动容器

csharp
docker run -d  -p 443:443 -p 8000:8000 -p 222:22 --name gitlab --restart unless-stopped -v /software/gitlab/config:/etc/gitlab -v /software/gitlab/logs:/var/log/gitlab -v /software/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce

注意不要占用8080端口,因为puma[‘port’] = 8080

https自签名证书

把ca.crt和域名证书放到/software/gitlab/config/ssl下,注意域名证书的名字,如域名为test.gitlab.com,证书名称为test.gitlab.com.crt

三、配置gitlab

docker容器运行以后,还需要配置页面的地址和ssh的地址和端口

#编辑配置文件
vim /software/gitlab/config/gitlab.rb

3.1 编辑配置

3.2 http的配置

有些默认是注释的,把注释打开

#页面请求地址--新版本已经去除
#external-url-for-gitlab "http://192.168.1.18"
#http clone地址 页面请求地址,可以添加端口
external_url 'http://192.168.1.18:8000'
#ssh的地址
gitlab_rails['gitlab_ssh_host'] = '192.168.1.18'
#ssh的端口,这里只是外部暴露的端口,内部映射还是22
gitlab_rails['gitlab_shell_ssh_port'] = 222
#时区
gitlab_rails['time_zone'] = 'Asia/Shanghai'
#关闭gitlab自带的nginx转发,外部转发到nginx会有问题
#nginx['enable'] = false

3.3 https的配置

在基于http的基础上修改,

external_url 'https://test.gitlab.com'
nginx['enable'] = true
nginx['redirect_http_to_https'] = true
nginx['redirect_http_to_https_port'] = 80
nginx['listen_port'] = 443
#下面几个证书的名字需要对应
nginx['ssl_client_certificate'] = "/etc/gitlab/ssl/ca.crt"
nginx['ssl_certificate'] = "/etc/gitlab/ssl/test.gitlab.com.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/test.gitlab.com.key"
#下面的nginx配置放开注释
nginx['proxy_set_headers'] = {
  "Host" => "$http_host_with_default",
  "X-Real-IP" => "$remote_addr",
  "X-Forwarded-For" => "$proxy_add_x_forwarded_for",
  "X-Forwarded-Proto" => "https",
  "X-Forwarded-Ssl" => "on",
  "Upgrade" => "$http_upgrade",
  "Connection" => "$connection_upgrade"
}
#关闭letsencrypt证书验证
letsencrypt['enable'] = false

3.4 gitlab-page配置

重启容器

docker restart gitlab

**注意:**如果是有外网代理的服务,如外网代理一个nginx转发gitlab,这里需要使用https的协议,不使用http。

外部nginx的配置一定要加这个

          #后面必须加跳转的端口
            proxy_set_header Host $host:$server_port;

要先生成服务器ip地址的证书,然后映射到容器内部

#http clone地址 页面请求地址,注意后面的端口是https映射出去的,最好是容器端口与宿主机端口一致
external_url 'https://192.168.1.18:${https端口}'
#ssh的地址
gitlab_rails['gitlab_ssh_host'] = '192.168.1.18'
#ssh的端口,这里只是外部暴露的端口,内部映射还是22
gitlab_rails['gitlab_shell_ssh_port'] = 222
#时区
gitlab_rails['time_zone'] = 'Asia/Shanghai'
#https的配置

四、修改密码

默认用户是root超级用户,手动修改密码

  1. 进入容器

    docker exec -it gitlab bash
  2. 进入gitlab的bin目录

    cd /opt/gitlab/bin
  3. 执行下面命令

    gitlab-rails console

出现以下界面表示进入控制台成功

  1. 修改密码

    #设置用户属性
    u=User.where(id:1).first
    #设置密码,注意不要用双引号
    u.password='123456'
    #确认密码
    u.password_confirmation='123456'
    #保存
    u.save

出现以下界面表示执行成功,修改完成

五、优化gitlab

在gitlab16.6.x版本以后,gitlab应用会经常出现502、500等错误,经过查阅发现是由于shm_size配置需要增加,否则gitlab会卡顿和报错。

shm(共享内存)简介:共享内存是一种允许多个进程共享同一块物理内存区域的内存分配方式。在容器中,共享内存通常用于进程间通信(IPC)。容器中的应用程序可以通过共享内存来提高性能和数据传递效率。 有些应用程序(特别是数据库、Web 应用、机器学习应用等)会使用共享内存来提升性能,或者需要共享内存来运行。

解决方式:

docker

docker run --shm-size=1g <image_name>

docker compose

version: '3'
services:
  my-service:
    image: my-image
    shm_size: 1g  # 设置共享内存为 1GB

修改gitlab.rb文件,默认启动12个worker(配置默认不知为何不生效,按需修改参数):

puma['worker_processes'] = 4
puma['min_threads'] = 4
puma['max_threads'] = 4
puma['per_worker_max_memory_mb'] = 1200

六、更新gitlab

按照官方指引,按步骤升级:https://docs.gitlab.com/ee/update/#upgrade-paths

工具:https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/