docker pull gitlab/gitlab-ce
这是 Gitlab 社区版的镜像,开源免费。
查看下载好的镜像:
docker images
如果要修改一个容器的配置或者查看它的日志,需要进入到容器里面,不是很方便。所以通常会给容器挂载数据卷,将容器内的重要目录,映射到宿主机中。创建这些卷可以确保即使容器被删除,数据和配置也不会丢失。
mkdir -p /usr/local/software/gitlab/config
mkdir -p /usr/local/software/gitlab/logs
mkdir -p /usr/local/software/gitlab/data
如果没有域名服务,把
yang-gitlab.com
改成虚拟机ip即可
docker run -it \
--hostname yang-gitlab.com \
--name gitlab \
-p 443:443 -p 80:80 -p 23:22 \
--network yang_docker_net \
--ip 172.18.12.50 \
-v /usr/local/software/gitlab/config:/etc/gitlab \
-v /usr/local/software/gitlab/logs:/var/log/gitlab \
-v /usr/local/software/gitlab/data:/var/opt/gitlab \
-d gitlab/gitlab-ce
# 第一次访问,会让修改root密码
# 修改后以root用户登录即可
# 进入容器内部
docker exec -it gitlab bash
# 进入控制台
gitlab-rails console
# root
user=User.find_by_username 'root'
# 修改密码
user.password='12345678'
# 保存
user.save!
然后使用用户名root,密码12345678即可登录。
Preferences => Localization
点击保存之后刷新页面即可生效。
Menu => Admin => Seetings => General => Sign-up restrictions
取消勾选后保存即可生效。
Menu => Admin => Overview => Users => New User
填完必填选项点击 Create user 即可注册用户
设置完成密码后点击保存,即可生效。
首次登录会提示修改密码,回到跳转页面重新登录。
然后就可以使用链接下载项目。
如果没有域名服务且使用了域名,需进行一下操作:
# 进入容器
docker exec -it gitlab bash
# 修改配置文件
vi /etc/gitlab/gitlab.rb
找到external_url
改成external_url 'http://ip地址'
。
然后在容器中输入gitlab-ctl reconfigure
使配置生效
使用docker stats gitlab
查看内存占用
# 进入容器
docker exec -it gitlab bash
# 修改配置文件
vi /etc/gitlab/gitlab.rb
找到gitlab_rails['env']
修改:
gitlab_rails['env'] = {
'MALLOC_CONF' => 'dirty_decay_ms:1000,muzzy_decay_ms:1000'
# "SKIP" => "db,uploads,repositories,builds,artifacts,lfs,registry,pages"
}
MALLOC_CONF
:
这个环境变量是为 jemalloc 分配器设置的,jemalloc 是 GitLab 使用的内存分配器。jemalloc 有助于优化内存使用,防止内存碎片化。
dirty_decay_ms:1000
: 设置脏页(即已修改过的内存页,需要写回内存的页)的衰减时间。这里设置为 1000 毫秒,意味着 jemalloc 将在内存页变脏后 1 秒尝试回收这些页。muzzy_decay_ms:1000
: 设置模糊页(即已经不再使用,但还没有完全清理的内存页)的衰减时间。同样地,这里设置为 1000 毫秒。这些设置可以影响内存的回收策略,可能有助于改善内存使用效率和减少内存占用。
Puma 的设置是用来配置 GitLab 内置的 Puma Web 服务器,这个服务器负责处理 GitLab 的 Web 请求
找到puma['worker_timeout']
和 puma['worker_processes']
puma['worker_timeout'] = 60
puma['worker_processes'] = 0
puma['worker_timeout'] = 60
:
这个配置项设置了 Puma 工作进程在认定为超时之前可以花费的最长秒数。如果一个请求在指定的时间内没有完成,Puma 会认为该工作进程已经卡住,并可能会重启该进程。在这个例子中,worker_timeout
被设置为 60 秒,这意味着如果一个工作进程在 60 秒内没有响应请求,Puma 将会认为它已经超时。
puma['worker_processes'] = 2
:
这个配置项指定了 Puma 应该启动的工作进程数。工作进程是独立的操作系统进程,每个进程都可以并行处理 Web 请求。设置多个工作进程可以提高并发处理能力,因为它们可以同时处理多个 Web 请求。在这个例子中,Puma 被配置为启动 2 个工作进程。
找到 sidekiq['max_concurrency']
修改:
sidekiq['max_concurrency'] = 10
sidekiq['max_concurrency'] = 10
的设定意味着 Sidekiq 被允许同时执行的线程数上限是 10。这就是说,Sidekiq 可以同时处理最多 10 个作业。
在容器中输入gitlab-ctl reconfigure
使配置生效
然后重启容器gitlab-ctl restart
查看内存占用
docker stats gitlab
可以看到内存占用下降了很多,至此内存占用优化完成。