前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Gitlab][docker]自托管代码平台Gitlab | 搭建/使用教程

[Gitlab][docker]自托管代码平台Gitlab | 搭建/使用教程

作者头像
夜梦星尘
发布2024-08-20 17:33:22
2740
发布2024-08-20 17:33:22
举报
文章被收录于专栏:夜梦星尘的折腾日记

本文发布于395天前,最后更新于390天前,其中的信息可能有所发展或是发生改变。

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服务器/域名

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

代码语言:javascript
复制
wget -O box.sh https://raw.githubusercontent.com/BlueSkyXN/SKY-BOX/main/box.sh && chmod +x box.sh && clear && ./box.sh

硬件需求(要求不低)。省流:4C4G起步上不封顶,硬盘越大越好

2.2存储

必要的硬盘空间在很大程度上取决于您想在极狐GitLab 中存储的仓库的大小,但作为准则,您应该至少拥有与所有仓库组合占用的空间一样多的可用空间。

Omnibus GitLab 软件包需要大约 2.5 GB 的存储空间用于安装。

如果您想在未来灵活增加硬盘空间,请考虑使用逻辑卷管理(LVM)进行挂载,以便您在需要更多硬盘空间时进行添加。

除了本地硬盘,您也可以挂载支持网络文件系统(NFS)协议的卷。卷可能位于文件服务器、网络附加存储(NAS)设备、存储区域网络(SAN)或云提供商的弹性块存储卷上。

如果您有足够的 RAM 和较新的 CPU,极狐GitLab 的速度主要受硬盘驱动器寻道时间的限制。使用高转速(7200 转及以上)或固态驱动器(SSD),可提高极狐GitLab 的响应能力。

由于文件系统性能可能会影响极狐GitLab 的整体性能,我们不建议使用基于云的文件系统进行存储。

Git 仓库的 NFS 存储已废弃。

2.3CPU

CPU 需求取决于用户数量和预期的工作负载,确切需求更多地取决于您的工作负载。您的工作负载受多重因素影响,不限于您的用户活跃程度、您使用的自动化程度、镜像、制品库大小和变更大小。

以下是针对部分用户数量群体,推荐的最低 CPU 硬件要求。

  • 4 核 是推荐的最小核数,支持多达 500 名用户
  • 8 核支持多达 1000 名用户

2.4内存

内存需求取决于用户数量和预期的工作负载,确切需求更多地取决于您的工作负载。您的工作负载受多重因素影响,不限于您的用户活跃程度、您使用的自动化程度、镜像、制品库大小和变更大小。

以下是针对部分用户数量群体,推荐的最低内存硬件要求。

  • 4GB RAM必需的最小内存,支持多达 500 名用户
  • 8GB RAM 支持多达 1000 名用户

除了上述需求之外,我们通常建议您的服务器上至少有 2GB 的 swap 存储空间,即使您已有足够可用的 RAM。如果您的可用内存发生变化,swap 可帮助您减小错误发生的概率。我们也建议您将内核的 swappiness 设置为低值,例如 10,在充分利用 RAM 的同时,使 swap 在需要时可用。

尽管不期望出现会降低性能的过大的 swapping,但它是针对内存不足情况的极其重要的最后手段。在出现意外的系统负载期间,例如同一主机上的操作系统更新或其他服务,峰值内存负载峰值可能远高于平均水平。拥有大量 swapping 有助于避免 Linux OOM killer 不安全地终止潜在的关键进程,例如 PostgreSQL,这可能会产生灾难性的后果。

2.5安装docker和docker-compose

【docker】在服务器上安装docker

3.部署(docker)

3.1创建目录

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

代码语言:javascript
复制
sudo mkdir -p /data/gitlab  #/data/gitlab可以修改成合适的目录
cd /data/gitlab

3.2运行容器

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

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
sudo docker logs -f gitlab

您可以使用

代码语言:javascript
复制
sudo docker ps -a

查看容器状况,若显示

代码语言:javascript
复制
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管理员账号和密码,所以我们回到终端,设置管理员的密码。

代码语言:javascript
复制
sudo docker exec -it gitlab /bin/bash

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

代码语言:javascript
复制
gitlab-rails console #这一步比较慢,大概在1分钟左右,请耐心等待

控制台

代码语言:javascript
复制
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> 

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

输入

代码语言:javascript
复制
user=User.find_by_username 'root'

显示

代码语言:javascript
复制
=> #<User id:1 @root>

输入

代码语言:javascript
复制
user.password="yemeng666"

显示

代码语言:javascript
复制
=> "yemeng666"

输入

代码语言:javascript
复制
user.save!

显示

代码语言:javascript
复制
=> true

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

代码语言:javascript
复制
/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的话直接看问题-方式二的配置文件。

代码语言:javascript
复制
mkdir -p /data/docker_data/gitlab
cd /data/docker_data/gitlab
vim docker-compose.yml

docker-compose.yml文件如下:

代码语言:javascript
复制
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'

启动

代码语言:javascript
复制
docker-compose up -d

你可以通过

代码语言:javascript
复制
docker ps -a

查看容器ID

代码语言:javascript
复制
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

通过

代码语言:javascript
复制
sudo docker exec -it <CONTAINER ID> grep 'Password:' /etc/gitlab/initial_root_password

查看初始密码

代码语言:javascript
复制
Password: yourPassword

然后你可以通过

root/yourPassword登录Gitlab

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

5.升级

5.1docker升级

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

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

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

代码语言:javascript
复制
sudo docker stop gitlab

3.移除现有容器:

代码语言:javascript
复制
sudo docker rm gitlab

4.拉取新镜像:

代码语言:javascript
复制
sudo docker pull gitlab/gitlab-ce:latest

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

代码语言:javascript
复制
echo $GITLAB_HOME

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

代码语言:javascript
复制
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 实例:

代码语言:javascript
复制
docker compose pull 
docker compose up -d 

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

6.配置

你可以通过

代码语言:javascript
复制
docker ps -a

查看容器ID

代码语言:javascript
复制
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 会话。这将允许您浏览所有目录并使用您喜欢的文本编辑器:

代码语言:javascript
复制
sudo docker exec -it <CONTAINER ID> /bin/bash

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
sudo docker restart gitlab

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

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

7.问题

7.1问题一

7.1.1问题描述

本部分参考文档:

推荐配合 Portainer 使用。

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

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

7.1.2方式一

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

进入容器

代码语言:javascript
复制
sudo docker exec -it <CONTAINER ID> /bin/bash

进入配置文件夹

代码语言:javascript
复制
cd /etc/gitlab

安装vim编辑器

代码语言:javascript
复制
apt-get update -y
apt-get install vim -y
vi -v 

编辑配置文件

代码语言:javascript
复制
vim gitlab.rb

代码语言:javascript
复制
gitlab_rails['gitlab_shell_ssh_port'] = 22

修改为

代码语言:javascript
复制
gitlab_rails['gitlab_shell_ssh_port'] = 222  #222可以改为未占用的端口

然后将docker-compose.yml中的

代码语言:javascript
复制
ports:
      - '80:80'
      - '443:443'
      - '23:22'

修改为

代码语言:javascript
复制
ports:
      - '80:80'
      - '443:443'
      - '23:222'

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

代码语言:javascript
复制
docker exec -it <CONTAINER ID> /bin/sh
vim /assets/sshd_config
代码语言:javascript
复制
service ssh restart # 重启ssh服务 ,注意是重启容器里的ssh

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

代码语言:javascript
复制
sudo docker restart <CONTAINER ID>
7.1.3方式二

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

代码语言:javascript
复制
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容器即可

代码语言:javascript
复制
sudo docker restart <CONTAINER ID>
7.1.4方式二讲解

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

代码语言:javascript
复制
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问题二

如果提示:

代码语言:javascript
复制
git@xxx.com: Permission denied (publickey).
fatal: Could not read from remote repository.

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

7.3问题三

页面502报错

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

8.优化

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

代码语言:javascript
复制
               total        used        free      shared  buff/cache   available
Mem:           16000        4207       10449         155        1343       11315
Swap:           4095           0        4095

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

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

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

我们先进入容器:

代码语言:javascript
复制
sudo docker exec -it <CONTAINER ID> /bin/bash

然后修改配置文件:

代码语言:javascript
复制
vi /etc/gitlab/gitlab.rb

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

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

代码语言:javascript
复制
unicorn['worker_processes'] = 2

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

代码语言:javascript
复制
postgresql['shared_buffers'] = "256MB"

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

代码语言:javascript
复制
postgresql['max_worker_processes'] = 8

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

代码语言:javascript
复制
sidekiq['concurrency'] = 25

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

代码语言:javascript
复制
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'

你可以补充以下内容

代码语言:javascript
复制
        # 关闭电子邮件相关功能
        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

内存占用如下:

代码语言:javascript
复制
               total        used        free      shared  buff/cache   available
Mem:            1680         298         691           2         689        1218
Swap:           4095           0        4095
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-7-21 2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.前言
  • 2.准备
    • 2.1服务器/域名
      • 2.2存储
        • 2.3CPU
          • 2.4内存
            • 2.5安装docker和docker-compose
            • 3.部署(docker)
              • 3.1创建目录
                • 3.2运行容器
                  • 3.3重置管理员密码
                    • 3.4登录
                    • 4.部署(推荐docker-compose)
                    • 5.升级
                      • 5.1docker升级
                        • 5.2docker-compose升级
                        • 6.配置
                        • 7.问题
                          • 7.1问题一
                            • 7.1.1问题描述
                            • 7.1.2方式一
                            • 7.1.3方式二
                            • 7.1.4方式二讲解
                            • 7.1.5结果
                          • 7.2问题二
                          • 8.优化
                          相关产品与服务
                          容器服务
                          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档