基于docker的gitlab安装,大家一定要看一下官方文档: https://docs.gitlab.com/omnibus/docker/
我的这个gitlab安装有一些约束条件:
1. 没有域名,只有IP
2. 服务器内存只有4G
3. 内部人员协同开发,无需使用电子邮件
4. 仅仅用于最基本的git协同开发,没有使用auto devops
5. 没有采用 https,只暴露80端口,其他的22端口也无需暴露
6. 没有采用 Prometheus
7. 采用 docker-compose 来安装
docker-compose.yml 配置如下:
gitlab:
image: 'gitlab/gitlab-ce:latest'
restart: always
container_name: gitlab
environment:
- GITLAB_OMNIBUS_CONFIG=external_url 'http://192.168.1.100'
- TZ=Asia/Shanghai
ports:
- '80:80'
volumes:
- '/srv/gitlab/config:/etc/gitlab'
- '/srv/gitlab/logs:/var/log/gitlab'
- '/srv/gitlab/data:/var/opt/gitlab'
这个配置文件解释一下:
TZ=Asia/Shanghai详见这篇文章:设定docker容器时间的3种方法
通过 docker-compose up -d gitlab 起来后,别忘记了有一个安全问题,仅内部访问,限制外界访问,详见这篇文章:Docker中限制网络访问中的ext_if是什么?
gitlab起来后,登录 root 的账号,登录后,进行应用管理设置,其中关闭 auto devops 这个功能:
Admin area –> Settings –> CI/CD –> Default to Auto DevOps pipeline for all projects 前面的勾去掉。
修改 /srv/gitlab/config/gitlab.rb,将 prometheus 禁用:
prometheus_monitoring[‘enable’] = false
内存优化
上述过程做好后,过了一天,发现gitlab运行相当慢,一看服务器内存已经没有了,而且使用了大量的swap,于是上网查如何内存优化 gitlab,找到了这篇讲得很全面的文章:解决GitLab内存消耗大的问题。最终我的优化如下:
unicorn['enable'] = true
unicorn['worker_timeout'] = 60
unicorn['worker_processes'] = 2
unicorn['worker_memory_limit_min'] = "300 * 1 << 20"
unicorn['worker_memory_limit_max'] = "500 * 1 << 20"
sidekiq['concurrency'] = 16
postgresql['shared_buffers'] = "256MB"
postgresql['max_worker_processes'] = 8
重启后,观察了2天,内存始终消耗为 1.5-2 G之间。
上述的内容已经有些过时了,最新的gitlab有些不同了,这里做一些补充
- 假如安装的时候,外网不能用80端口,那么docker-compose配置文件应该这么设定:
gitlab:
image: 'gitlab/gitlab-ce:latest'
restart: always
container_name: gitlab
environment:
- GITLAB_OMNIBUS_CONFIG=external_url 'http://192.168.1.100:8000'
- TZ=Asia/Shanghai
ports:
- '8000:8000'
volumes:
- '/etc/gitlab/config:/etc/gitlab'
- '/etc/gitlab/logs:/var/log/gitlab'
- '/etc/gitlab/data:/var/opt/gitlab'
- 内存优化已经改了,成了:
puma[‘enable’] = true
puma[‘worker_timeout’] = 60
puma[‘worker_processes’] = 2
puma[‘max_threads’] = 4
puma[‘per_worker_max_memory_mb’] = 1024
sidekiq[‘max_concurrency’] = 16
postgresql[‘shared_buffers’] = “256MB”
postgresql[‘max_worker_processes’] = 8
- 安装好后,初次登录,居然不能指定root的密码了,需要参照官方文档来进行设定:https://docs.gitlab.com/ee/security/reset_user_password.html ,但是这个文档只是涉及在服务器上传统安装gitlab,那么在docker中该如何设定呢?
先进入容器内,docker exec -it gitlab /bin/bash,然后执行 gitlab-rake “gitlab:password:reset”,意外的事情发生了,居然久久没有反应,感觉像死掉一样,过了大概5分钟,才会出来一些提示,在这个5分钟内,假如你等不及敲了一些回车,对不起,这个过程还要重新再来。所以记住:这个过程会很长,不要着急,千万不要敲回车。(这一段是修改密码的,现在的gitlab有设定初始密码的地方,见下面)
- Visit the GitLab URL, and log in with username
root
and the password from the following command:
docker exec -it gitlab grep ‘Password:’ /etc/gitlab/initial_root_password