[Gitlab][docker]自托管代码平台Gitlab | 搭建/使用教程
本文发布于310天前,最后更新于305天前,其中的信息可能有所发展或是发生改变。如有疑问请联系邮箱:admin@yemengstar.com。

1.前言

GIT(必装):Git – Downloading Package (git-scm.com)。装完以后在目标文件夹右键会有Git Bash HereGit GUI Here两个选项

官网:GitLab.com · GitLab

部署:GitLab下载安装_GitLab最新中文免费版下载安装-极狐GitLab

官方文档:极狐GitLab Docker 镜像 | 极狐GitLab

2.准备

2.1服务器/域名

服务器(九折+10元优惠券):https://www.rainyun.com

一个域名(可选):namesilo.com,优惠码dreamorrow

在开始之前,请设置至少2Gswap

wget -O box.sh https://raw.githubusercontent.com/BlueSkyXN/SKY-BOX/main/box.sh && chmod +x box.sh && clear && ./box.sh

2.5安装docker和docker-compose

【docker】在服务器上安装docker

3.部署(docker)

3.1创建目录

为gitlab的数据创建一个目录,用来存储gitlab在运行过程中产生的数据。

sudo mkdir -p /data/gitlab  #/data/gitlab可以修改成合适的目录
cd /data/gitlab

3.2运行容器

参考文章:5分钟搭建自己的代码托管平台gitlab

您可以微调这些目录以满足您的要求。 一旦设置了 GITLAB_HOME 变量,您就可以运行镜像:

sudo docker run --detach \
  --hostname gitlab.yemengstar.com \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --volume /data/gitlab/config:/etc/gitlab \
  --volume /data/gitlab/logs:/var/log/gitlab \
  --volume /data/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

这将下载并启动极狐GitLab 容器,并发布访问 SSH、HTTP 和 HTTPS 所需的端口。所有极狐GitLab 数据将存储在 $GITLAB_HOME 的子目录中。系统重启后,容器将自动 restart

初始化过程可能需要很长时间。 您可以通过以下方式跟踪此过程:

sudo docker logs -f gitlab

您可以使用

sudo docker ps -a

查看容器状况,若显示

CONTAINER ID   IMAGE                     COMMAND             CREATED       STATUS                 PORTS                                                                                                         NAMES
a6ffada5d2e6   gitlab/gitlab-ce:latest   "/assets/wrapper"   3 hours ago   Up 2 hours (healthy)   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:22->22/tcp, :::22->22/tcp   gitlab

表明容器已经成功启动。

启动容器后,您可以访问 gitlab.example.com。Docker 容器开始响应查询可能需要一段时间。

3.3重置管理员密码

此时gitlab已经成功安装。但是我们还不知道gitlab管理员账号和密码,所以我们回到终端,设置管理员的密码。

sudo docker exec -it gitlab /bin/bash

然后用下面命令进入 到gitlab的rails控制台

gitlab-rails console #这一步比较慢,大概在1分钟左右,请耐心等待

控制台

root@www:/# gitlab-rails console
--------------------------------------------------------------------------------
 Ruby:         ruby 3.0.6p216 (2023-03-30 revision 23a532679b) [x86_64-linux]
 GitLab:       16.1.2 (e60fc11f2d3) FOSS
 GitLab Shell: 14.23.0
 PostgreSQL:   13.11
------------------------------------------------------------[ booted in 49.88s ]
Loading production environment (Rails 6.1.7.2)
irb(main):001:0> 

当打开控制台后依次输入下面命令来重置管理员账号和密码。

输入

user=User.find_by_username 'root'

显示

=> #<User id:1 @root>

输入

user.password="yemeng666"

显示

=> "yemeng666"

输入

user.save!

显示

=> true

密码需要一定长度,否则会在save的时候报错

/opt/gitlab/embedded/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/validations.rb:80:in `raise_validation_error': Validation failed: Password is too short (minimum is 8 characters) (ActiveRecord::RecordInvalid)
如果你想退出容器,请输入exit

3.4登录

密码设置成功以后,就可以返回到gitlab登录页面登录了。

用户名为root

密码为你设置的密码

下面是登录成功的页面

4.部署(推荐docker-compose)

本方法有点小问题,如果你想自己折腾的话可以接着看下去,如果不想折腾只想安安静静使用Gitlab的话直接看问题-方式二的配置文件。

mkdir -p /data/docker_data/gitlab
cd /data/docker_data/gitlab
vim docker-compose.yml

docker-compose.yml文件如下:

version: '3.6'
services:
  web:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    hostname: 'yourDomain.com(yemengstar.com)'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://yourDomain.com(yemengstar.com)'
    ports:
      - '80:80'
      - '443:443'
      - '23:22'
    volumes:
      - '/data/docker_data/gitlab/config:/etc/gitlab'
      - '/data/docker_data/gitlab/logs:/var/log/gitlab'
      - '/data/docker_data/gitlab/data:/var/opt/gitlab'
    shm_size: '128m'

启动

docker-compose up -d

你可以通过

docker ps -a

查看容器ID

CONTAINER ID   IMAGE                                         COMMAND             CREATED       STATUS                 PORTS                                                                                                         NAMES
c5b91e12743e   registry.gitlab.cn/omnibus/gitlab-jh:latest   "/assets/wrapper"   3 hours ago   Up 3 hours (healthy)   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:23->22/tcp, :::23->22/tcp   data_web_1

通过

sudo docker exec -it <CONTAINER ID> grep 'Password:' /etc/gitlab/initial_root_password

查看初始密码

Password: yourPassword

然后你可以通过

root/yourPassword登录Gitlab

如果你想退出容器,请输入exit

5.升级

5.1docker升级

要升级使用 Docker Engine 安装的极狐GitLab:

1.进行备份,作为最低要求,备份数据库和极狐GitLab secrets 文件。

2.停止正在运行的容器:

sudo docker stop gitlab

3.移除现有容器:

sudo docker rm gitlab

4.拉取新镜像:

sudo docker pull gitlab/gitlab-ce:latest

5.确保 GITLAB_HOME 环境变量是已定义的:

echo $GITLAB_HOME

6.使用先前指定的选项再次创建容器:

sudo docker run --detach \
--hostname gitlab.yemengstar.com \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--restart always \
--volume /data/gitlab/config:/etc/gitlab \
--volume /data/gitlab/logs:/var/log/gitlab \
--volume /data/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest

在第一次运行时,极狐GitLab 将重新配置并升级自身。

5.2docker-compose升级

要升级使用 Docker Compose 安装的极狐GitLab:

1.进行备份,作为最低要求,备份数据库和极狐GitLab secrets 文件。

2.下载最新版本并升级您的极狐GitLab 实例:

docker compose pull 
docker compose up -d 

如果您使用标签代替,则需要先编辑 docker-compose.yml

6.配置

你可以通过

docker ps -a

查看容器ID

CONTAINER ID   IMAGE                                         COMMAND             CREATED       STATUS                 PORTS                                                                                                         NAMES
c5b91e12743e   registry.gitlab.cn/omnibus/gitlab-jh:latest   "/assets/wrapper"   3 hours ago   Up 3 hours (healthy)   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:23->22/tcp, :::23->22/tcp   data_web_1

要访问极狐GitLab 配置文件,您可以在正在运行的容器的上下文中启动 shell 会话。这将允许您浏览所有目录并使用您喜欢的文本编辑器:

sudo docker exec -it <CONTAINER ID> /bin/bash

您也可以只编辑/etc/gitlab/gitlab.rb

sudo docker exec -it <CONTAINER ID> editor /etc/gitlab/gitlab.rb

打开 /etc/gitlab/gitlab.rb 后,请确保将 external_url 设置为指向有效 URL。

要从极狐GitLab 接收电子邮件,您必须配置 SMTP 设置,因为极狐GitLab Docker 镜像没有安装 SMTP 服务器。您可能还对启用 HTTPS 感兴趣。

完成所需的所有更改后,您需要重新启动容器以重新配置极狐GitLab:

sudo docker restart gitlab

每当容器启动时,极狐GitLab 都会重新配置自身。 有关配置极狐GitLab 的更多选项,请查看配置文档

如果你想退出容器,请输入exit

7.问题

7.1问题一

7.1.1问题描述

本部分参考文档:

推荐配合 Portainer 使用。

在新建完成仓库以后,你可以通过HTTP协议clone至本地。

但是,如果你尝试使用SSH协议进行操作,多半会提示输入密码。

7.1.2方式一

这时需要我们在配置中修改SSH端口。具体操作如下:

进入容器

sudo docker exec -it <CONTAINER ID> /bin/bash

进入配置文件夹

cd /etc/gitlab

安装vim编辑器

apt-get update -y
apt-get install vim -y
vi -v 

编辑配置文件

vim gitlab.rb

gitlab_rails['gitlab_shell_ssh_port'] = 22

修改为

gitlab_rails['gitlab_shell_ssh_port'] = 222  #222可以改为未占用的端口

然后将docker-compose.yml中的

ports:
      - '80:80'
      - '443:443'
      - '23:22'

修改为

ports:
      - '80:80'
      - '443:443'
      - '23:222'

如果我们修改gitlab.rb配置文件,情况可能出乎我们的意料。此时你会发现复制ssh地址时是完整且正确的,但是却无法克隆git会告诉我们连接被拒绝。你会惊奇的发现当前ssh监听端口依然为22并没有因为配置文件的修改而改变。这里我们换需要手动修改容器ssh端口,根据如下操作将默认端口改为我们设定的端口。

docker exec -it <CONTAINER ID> /bin/sh
vim /assets/sshd_config
service ssh restart # 重启ssh服务 ,注意是重启容器里的ssh

你也可以在修改完成以后重启容器

sudo docker restart <CONTAINER ID>

7.1.3方式二

当然,你可以直接修改docker-compose.yml文件

version: '3.6'
services:
  web:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    hostname: 'yourDomain.com(yemengstar.com)'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://yourDomain.com(yemengstar.com)'
        gitlab_rails['gitlab_shell_ssh_port'] = 222
    ports:
      - '80:80'
      - '443:443'
      - '222:22'
    volumes:
      - '/data/docker_data/gitlab/config:/etc/gitlab'
      - '/data/docker_data/gitlab/logs:/var/log/gitlab'
      - '/data/docker_data/gitlab/data:/var/opt/gitlab'
    shm_size: '128m'

然后重启docker容器即可

sudo docker restart <CONTAINER ID>

7.1.4方式二讲解

下面是另一个 docker-compose.yml 示例,其中极狐GitLab 在自定义 HTTP 和 SSH 端口上运行。注意 GITLAB_OMNIBUS_CONFIG 变量如何匹配 ports 部分:

version: '3.6'
services:
  web:
    image: 'registry.gitlab.cn/omnibus/gitlab-jh:latest'
    restart: always
    hostname: 'gitlab.example.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://gitlab.example.com:8929'
        gitlab_rails['gitlab_shell_ssh_port'] = 2224
    ports:
      - '8929:8929'
      - '2224:22'
    volumes:
      - '$GITLAB_HOME/config:/etc/gitlab'
      - '$GITLAB_HOME/logs:/var/log/gitlab'
      - '$GITLAB_HOME/data:/var/opt/gitlab'
    shm_size: '256m'

7.1.5结果

修改前git地址:git@yourDomain.com:User/R.git

修改后git地址:ssh://git@yourDomain.com:222/User/R.git

7.2问题二

如果提示:

git@xxx.com: Permission denied (publickey).
fatal: Could not read from remote repository.

说明SSH公私钥不匹配,重新生成后上传即可。

7.3问题三

页面502报错

gitlab未能完全启动,请稍等片刻。也有可能是炸内存了,建议到终端看看情况。

8.优化

gitlab一启动就占用了不少内存了,如果使用的人再多一点就真的要爆内存了。

               total        used        free      shared  buff/cache   available
Mem:           16000        4207       10449         155        1343       11315
Swap:           4095           0        4095

但是夜梦的机器配置就这么点,怎么办呢?

这里我们需要修改配置文件,减少gitlab对内存的消耗。

参考文章:低配置服务器安装GitLab_gitlab最低配置

我们先进入容器:

sudo docker exec -it <CONTAINER ID> /bin/bash

然后修改配置文件:

vi /etc/gitlab/gitlab.rb

删除#号取消以下设置的注释,并修改参数
tip:vi编译器中搜索的方法: 命令模式下,输入/字符串,按下回车,得到搜索的结果,按n键切换搜索结果

1、减少进程数,修改worker_processes,官方建议CPU核心数加一,最小值是2

unicorn['worker_processes'] = 2

2、减少数据库缓存,可适当改小

postgresql['shared_buffers'] = "256MB"

3、减少数据库并发数,可适当改小

postgresql['max_worker_processes'] = 8

4、减少sidekiq并发数,可适当改小

sidekiq['concurrency'] = 25

总体优化完毕以后的docker-compose.yml文件如下:

version: '3.6'
services:
  web:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    hostname: 'yourDomain.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://yourDomain.com'
        gitlab_rails['gitlab_shell_ssh_port'] = 222

        # 数据库降低
        unicorn['worker_processes'] = 2
        postgresql['shared_buffers'] = "128MB"
        postgresql['max_worker_processes'] = 8
        sidekiq['concurrency'] = 25
    ports:
      - '80:80'
      - '443:443'
      - '222:22'
    volumes:
      - '/data/docker_data/gitlab/config:/etc/gitlab'
      - '/data/docker_data/gitlab/logs:/var/log/gitlab'
      - '/data/docker_data/gitlab/data:/var/opt/gitlab'
    shm_size: '128m'

你可以补充以下内容

        # 关闭电子邮件相关功能
        gitlab_rails['smtp_enable'] = false
        gitlab_rails['gitlab_email_enabled'] = false
        gitlab_rails['incoming_email_enabled'] = false

        # Terraform
        gitlab_rails['terraform_state_enabled'] = false

        # Usage Statistics
        gitlab_rails['usage_ping_enabled'] = false
        gitlab_rails['sentry_enabled'] = false
        grafana['reporting_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

        # Mattermost
        mattermost['enable'] = false
        mattermost_nginx['enable'] = false

        # Kerberos
        gitlab_rails['kerberos_enabled'] = false
        sentinel['enable'] = false

        # GitLab Pages
        gitlab_pages['enable'] = false
        pages_nginx['enable'] = false

        # 禁用 PUMA 集群模式
        puma['worker_processes'] = 0
        puma['min_threads'] = 1
        puma['max_threads'] = 2

        # 降低后台守护进程并发数
        sidekiq['max_concurrency'] = 5

        gitlab_ci['gitlab_ci_all_broken_builds'] = false
        gitlab_ci['gitlab_ci_add_pusher'] = false

        # 关闭监控
        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
        grafana['enable'] = false
        sidekiq['metrics_enabled'] = false

内存占用如下:

               total        used        free      shared  buff/cache   available
Mem:            1680         298         691           2         689        1218
Swap:           4095           0        4095
本文为夜梦星尘原创文章。
文章作者:夜梦星尘
文章链接:[Gitlab][docker]自托管代码平台Gitlab | 搭建/使用教程
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自夜梦星尘
支持作者:夜梦星尘的爱发电
上一篇
下一篇