GitLab部署与优化

GitLab部署和安装

大纲

GitLab介绍
GitLab安装
下载镜像
创建gitlab容器
进入容器中查看GitLab启动状态
配置SSH访问端口
修改账号密码
使用root账号登录

GitLab介绍

GitLab 是一个基于 web 的 Git 仓库管理工具,提供了代码托管、版本控制、协作开发、持续集成等功能,是一个综合的 DevOps 平台。用户可以使用 GitLab 托管他们的代码仓库,并利用其丰富的功能来管理和协作开发项目。
以下是 GitLab 的一些主要特点和功能:

  1. 代码托管: GitLab 提供了强大的 Git 仓库管理功能,用户可以轻松地创建、克隆、推送和拉取代码,实现团队协作开发。
  2. 问题追踪: 用户可以在 GitLab 中创建和管理问题、任务和缺陷报告,方便团队成员跟踪和解决项目中的各种事务。
  3. 持续集成/持续部署 (CI/CD): GitLab 提供了内置的 CI/CD 功能,支持自动化构建、测试和部署应用程序,帮助团队实现快速交付和持续集成。
  4. 代码审核: GitLab 提供了代码审核功能,可以进行代码评审、审查和讨论,帮助团队改善代码质量和合作效率。
  5. 权限管理: GitLab 具有灵活的权限管理机制,管理员可以根据需要设置不同用户或团队的访问权限,保护代码和项目的安全性。
  6. 集成插件: GitLab 支持与其他 DevOps 工具和服务的集成,如 Jira、Slack、Kubernetes 等,帮助用户构建完整的开发和部署流程。
  7. 自托管选项: 除了 GitLab 的托管服务之外,用户还可以选择在自己的服务器上部署 GitLab,实现自主控制和定制化需求。

GitLab 的功能丰富且易于使用,适用于个人开发者、小型团队和大型企业,帮助他们更高效地管理代码、协作开发并实现持续交付。GitLab 的开源版本和商业版本提供了不同的功能和服务,满足了不同用户的需求。
官网地址:https://about.gitlab.com/solutions/devops-platform/

GitLab安装

下载镜像

方式一:使用下列命令即可在线拉取拉取gitlab镜像,但是镜像很大。

1
docker pull gitlab/gitlab-ce:latest

效果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost tmp]# docker load -i gitlab-ce.tar
ad9512736d82: Loading layer [==================================================>] 21.45MB/21.45MB
cb069c85decc: Loading layer [==================================================>] 798.7kB/798.7kB
e8a079aa9e5c: Loading layer [==================================================>] 2.048kB/2.048kB
9f3f137f705c: Loading layer [==================================================>] 2.048kB/2.048kB
d01ad5c6ecc4: Loading layer [==================================================>] 2.048kB/2.048kB
16731fb67f55: Loading layer [==================================================>] 22.02kB/22.02kB
01266706d081: Loading layer [==================================================>] 2.334GB/2.334GB
Loaded image: gitlab/gitlab-ce:latest
[root@localhost tmp]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gitlab/gitlab-ce latest 46cd6954564a 11 months ago 2.36GB
rabbitmq 3.8-management 699038cb2b96 12 months ago 250MB
[root@localhost tmp]#

创建gitlab容器

1
2
3
4
5
6
7
8
9
10
11
12
#创建数据目录
mkdir -p /home/gitlab/config
mkdir -p /home/gitlab/logs
mkdir -p /home/gitlab/data

#创建容器
docker run -d \
--hostname localhost -p 443:443 -p 80:80 -p 1024:22 \
--name gitlab \
-v /home/gitlab/config:/etc/gitlab \
-v /home/gitlab/logs:/var/log/gitlab \
-v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce

进入容器中查看GitLab启动状态

进入容器

1
docker exec -it gitlab bash

查看状态容器中GitLab的运行状态

1
gitlab-ctl status

效果如下:

image-20240716110742589

启动需要的时间较长,当看到所有15个服务都是run状态之后才能成功访问。

查看日志

1
2
# 查看GitLab所有的logs,用于观察GitLab是否启动完成 按 Ctrl-C 退出
gitlab-ctl tail

注意:gitlab依赖的服务较多,启动所需内存官方建议为4G以上,不要立马就访问要等两三分钟左右。

等启动完毕,浏览器访问:http://192.168.100.132:80,效果如下图:

image-20240716110806602image.png

配置SSH访问端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 进入容器
docker exec -it gitlab /bin/bash

# 编辑gitlab.rb文件
vi /etc/gitlab/gitlab.rb
# 进入文件编辑,跳转到文件末位
G

# 把下面这3个配置放到文件末尾
# 配置http协议所使用的访问地址,不加端口号默认为80
external_url 'http://192.168.100.132'

# 配置ssh协议所使用的访问地址和端口 # 此端口是run时22端口映射的1024端口
gitlab_rails['gitlab_ssh_host'] = '192.168.100.132'
gitlab_rails['gitlab_shell_ssh_port'] = 1024

# 退出文件编辑
:wq

# 重新配置gitlab
gitlab-ctl reconfigure

下面命令不用,了解即可。

1
2
3
4
5
6
7
8
9
10
11
# 拉取/var/log/gitlab下子目录的日志
gitlab-ctl tail gitlab-rails

# 拉取某个指定的日志文件
gitlab-ctl tail nginx/gitlab_error.log

# 启动 gitlab 服务
gitlab-ctl start

# 停止 gitlab 服务
gitlab-ctl stop

修改账号密码

初始化 gitlab 中的 root 账号密码:
1、登录容器

1
docker exec -it -u root gitlab /bin/bash

2、登录GitLab的Rails控制台

1
gitlab-rails console

等待一段时间后,可以在控制台中输入命令

image-20240716110820940

3、定位到root用户

1
user = User.where(id: 1).first

图片

4、修改root密码

1
2
3
4
5
6
# 执行下面的命令,将 xxxxx 改为自己的密码
# 注意:密码至少需要8个字符
user.password='cxypa123456'

# 修改后,保存用密码
user.save

5、下面命令不用,了解即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 查询所有的用户
user = User.all
# 通过条件查询用户 常见的where条件有 username email state
user = User.where(id:1).first
user = User.find_by(email: 'admin@local.host')
# 通过id查询用户
user = User.find(1)

# 查询用户某个字段的值 显示当前用户的email
user.email

# 修改密码
user.password = 'cxypa123456'
user.password_confirmation = 'cxypa123456'
user.save
echo 'user = User.find_by(username: "root");user.password="secret_pass!";user.password_confirmation="secret_pass!";user.save' | sudo gitlab-rails console

# 修改用户状态
user.state = 'active'
user.save

使用root账号登录

来到登录页面,使用root账号和刚才设置的密码登录gitlab。效果如下图:

image-20240716110837004登录后的效果:

image-20240716110847345
到此就完成了gitlab的安装和登录。

Gitlab优化

代码库最近换了,使用了 GitLab。这两天观察了下服务器的使用情况,发现 GitLab 很吃内存。直接占用了 30 多个G的内存。

一、发现问题

  使用 top 命令查看内存时,发现前几十个都是同一个应用程序。再通过 ll /proc/pid 命令查找具体程序位置,发现都是 GItLab 。

  这其中包含了 gitlab、postgresql、nginx 等各种 gitlab 所需的服务。具体如下图:

img

二、查找原因

  经过查证。GitLab 在默认情况下,其配置是很吃配置的,如工作的核数,是当前机器 CPU 核数 +1。再加上数据库缓存、Sidekiq 等都需要设置。

  具体可以参考:

    解决 GitLab 内存消耗大

    Puma 介绍

    Sidekiq 介绍

三、解决

  问题已经找到,那就直接修改问题即可。

  主要就是修改 gitlab.rd 配置文件即可。(下面的配置可以满足几十人的工作需求)

1、修改 Puma(在 13.0版本后是这个,以前是unicorn)

    主要是设置工作进程个数和最大、最小线程个数。

img

2、修改 Sidekiq

    设置 Sidekiq 并发个数,建议是设置成相同的数值。

img

3、修改 postgresql

    设置缓存大小、工作进程个数。

img

img