本文发布于395天前,最后更新于390天前,其中的信息可能有所发展或是发生改变。
1.前言
GIT(必装):Git – Downloading Package (git-scm.com)。装完以后在目标文件夹右键会有Git Bash Here
和Git 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
变量,您就可以运行镜像:
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
文件如下:
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
环境变量是已定义的:
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
:
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问题描述
本部分参考文档:
- gitLab—docker部署时ssh更改端口完美解决方案_gitlab修改ssh端口
- gitlab配置ssh key后,还是需要输入密码,git clone http可以
- Docker-Gitlab 与主机共用 ssh 的 22 端口 · Zs’s Blog
- Docker 图形化工具 Portainer,必须推荐给你
推荐配合 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
中的
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
文件
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
部分:
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
文件如下:
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