环境:
Author: dusuanyun
Date: 2021-07-21,2021-8-14更新
OS: CentOS7.9 mini core
Docker: 20.10.7
gitlab-ce: 14.0.6-ce.0
相关文档:
官方Docker说明:https://hub.docker.com/r/gitlab/gitlab-ce
官网的说明:https://docs.gitlab.com/omnibus/docker/
启用SSL的HTTPS:https://docs.gitlab.com/omnibus/settings/nginx.html#enable-https
请先看完全篇了解整体流程,再开始操作,因为过程中有反复!!!
1.创建目录以便docker容器进行挂载:
例如:home/DATA/Gitlab/
2.下载最新版本镜像并运行: docker pull gitlab/gitlab-ce 此时的最新版就是14.0.6-ce.0
docker run --detach \
--hostname gitlab \
--publish 10443:443 --publish 10080:80 --publish 10022:22 \
--name iGitlab \
--restart always \
--volume /home/DATA/Gitlab/config:/etc/gitlab \
--volume /home/DATA/Gitlab/logs:/var/log/gitlab \
--volume /home/DATA/Gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
命令运行后,自动创建config logs data目录.
本文档中所有docker命令没有使用sudo前缀,是因为配置了当前用户可以直接运行,如果你没有配置过则需要加sudo.
命令说明:
--name 是指创建的容器的名称;
--hostname 是指容器里面的主机名;
--publish 将宿主机的端口10443/10080/10022分别映射到容器内主机的443/80/22端口
Docker里的Gitlab首次启动较慢,大约3-4分钟!
3.防火墙放行使用的端口:
firewall-cmd --zone=public --add-port=10080/tcp --permanent
firewall-cmd --zone=public --add-port=10022/tcp --permanent
firewall-cmd --zone=public --add-port=10443/tcp --permanent
firewall-cmd --reload
4.访问Web界面:
运行成功后:访问http://宿主机的IP:10080/ 即可看到登录界面
使用苹果的浏览器Safari浏览器可以访问:
注意,谷歌浏览器访问会阻挡10080端口,例如:
5.查看创建的root的默认密码
docker logs iGitlab | grep password
其中有一行如下:
Password stored to /etc/gitlab/initial_root_password. This file will be cleaned up in first reconfigure run after 24 hours.
进入/home/DATA/Gitlab/config查看root密码:
[root@server ~]# cd /home/DATA/Gitlab/config
[root@server config]# ls
gitlab.rb initial_root_password ssh_host_ecdsa_key.pub ssh_host_ed25519_key.pub ssh_host_rsa_key.pub
gitlab-secrets.json ssh_host_ecdsa_key ssh_host_ed25519_key ssh_host_rsa_key trusted-certs
[root@server config]# cat initial_root_password
# WARNING: This value is valid only in the following conditions
# 1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.rb`, it was provided before database was seeded for the first time (usually, the first reconfigure run).
# 2. Password hasn't been changed manually, either via UI or via command line.
#
# If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.
Password: 56L6lT/XrR23LscSANda16Q1zCb627qJ+d/n7FB/xh8=
# NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.
[root@server config]#
就可以用Root和上面的密码进行登录了,登录进来以后:
6.公司自用,关闭用户自己注册的功能!
界面提示允许开放注册,我们点击【View settings】进行关闭,公司自用开放注册不安全!!! 下面的界面我使用了网页翻译功能!
然后点击下面的【保存修改】即可!然后退出系统重新登录后就发现不允许自行注册用户了。
7.登录后设置自己使用的界面为中文环境
然后,保存修改,然后刷新浏览器,就可以看到变为中文界面了!
8.至此,搭建其实已经结束了。
不过因为可恶的谷歌浏览器会阻止不常用的端口的访问,可以重新配置新的端口
9.强制删除刚刚部署的容器:
docker rm -f iGitlab
10.使用新的端口重新部署容器
因为10080端口会被谷歌浏览器阻挡,所以端口修改为:1443、1080、1022
docker run --detach --hostname gitlab --publish 1443:443 --publish 1080:80 --publish 1022:22 --name iGitlab --restart always --volume /home/DATA/Gitlab/config:/etc/gitlab --volume /home/DATA/Gitlab/logs:/var/log/gitlab --volume /home/DATA/Gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:latest
11.重新放开新的端口号:
firewall-cmd --zone=public --add-port=1080/tcp --permanent
firewall-cmd --zone=public --add-port=1022/tcp --permanent
firewall-cmd --zone=public --add-port=1443/tcp --permanent
firewall-cmd --reload
至此使用1080端口就可以使用谷歌浏览器访问了,删除旧的开放的端口:
[root@server ~]# firewall-cmd --zone=public --remove-port=10080/tcp --permanent
success
[root@server ~]# firewall-cmd --zone=public --remove-port=10022/tcp --permanent
success
[root@server ~]# firewall-cmd --zone=public --remove-port=10443/tcp --permanent
success
[root@server ~]# firewall-cmd --reload
12.gitlab生成的默认代码仓库地址修改:
参考:https://blog.csdn.net/qq_34313827/article/details/80395190
例如:
ssh://git@gitlab/aladin-projs/ald-uni.git gitlab是容器名,外网不可访问
http://gitlab/aladin-projs/ald-uni.git gitlab是容器名,外网不可访问
ssh的方式永久解决:
修改gitlab.rb文件(关键步骤,文件在/home/DATA/Gitlab/config/gitlab.rb)
cd /home/DATA/Gitlab/config目录下,编辑vim gitlab.rb 修改生成git的ssh克隆地址:
// 修改如下语句
# gitlab_rails['gitlab_ssh_host'] = 'ssh.host_example.com' 66行,取消注释,ssh.host_example.com==》你自己的公网IP地址或者域名
# 配置1022端口
gitlab_rails['gitlab_shell_ssh_port'] = 1022 632行,原值为注释行,值为22
重启容器:
docker restart iGitlab
http的方式永久解决:
31 ##! https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html
32 external_url 'http://111.xxx.zzz.25:1080' // 从外网可以访问的地址及端口,xxx和zzz为敏感信息处理
33
34 ## Roles for multi-instance GitLab
....省略行......
1342 ##! **Override only if you use a reverse proxy**
1343 ##! Docs: https://docs.gitlab.com/omnibus/settings/nginx.html#setting-the-nginx-listen-port
1344 nginx['listen_port'] = 80 // 注意此处必须改,并且是1080端口映射到容器内的端口!!!如果此行维持原样nginx会监听容器内的1080端口,导致通信故障!
1345
重启容器:docker restart iGitlab 即可!
刷新浏览器,看到正常了:
PS:
1.限制内存使用为8GB:
后期运行发现iGitlab吃内存太厉害,达到9个多GB,其实根本不需要这么大的内存!
[root@server ~]# docker stop iGitlab // 停止容器运行,否则如果已用内存超过8GB,下面的设置就会报错!
iGitlab
[root@server ~]# docker update -m 8192M --memory-swap 8192M iGitlab
2.关于gitlab.rb的external_url的坑: ------dbdu 2021-08-14
这个问题如果不使用容器直接在宿主机上,不会有这个问题!
更改了external_url值,会导致容器内的Nginx直接监听external_url值里面的端口号了,但是这个端口号宿主机可能和运行的容器里端口不一样!!!,这样就会通信失败!
解决方式:
方式一:重新配置的宿主机与容器的映射端口,让两者一致即可! 参考:https://blog.csdn.net/hrbbeeant/article/details/104380009
方式二: 当更改gitlab.rb中Nginx监听端口配置,取消注释,强制使用创建容器时映射的端口。即本文上面采用的处理方式!!!