0%

通过docker搭建gitlab服务

1. 增加docker yum源

1
2
3
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast

2. 安装docker

yum list docker-ce --showduplicates | sort -r #查看所有有效的 docker-ce 的版本
得到类似如下列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
docker-ce.x86_64         2:18.09.0.ce-0.4.tp4.el7               docker-ce-test  
docker-ce.x86_64 2:18.09.0.ce-0.3.tp3.el7 docker-ce-test
docker-ce.x86_64 2:18.09.0.ce-0.0.tp0.el7 docker-ce-test
docker-ce.x86_64 18.06.3.ce-3.el7 docker-ce-test
docker-ce.x86_64 18.06.3.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.3.ce-3.el7 docker-ce-edge
docker-ce.x86_64 18.06.2.ce-3.el7 docker-ce-test
docker-ce.x86_64 18.06.2.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.2.ce-3.el7 docker-ce-edge
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-test
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-edge
docker-ce.x86_64 18.06.1.ce-3.el7 @docker-ce-edge
docker-ce.x86_64 18.06.1.ce-2.2.rc2.el7 docker-ce-test
docker-ce.x86_64 18.06.1.ce-2.1.rc1.el7 docker-ce-test
docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-test
docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-edge
docker-ce.x86_64 18.06.0.ce-2.3.rc3.el7 docker-ce-test
docker-ce.x86_64 18.06.0.ce-2.2.rc2.el7 docker-ce-test
docker-ce.x86_64 18.06.0.ce-2.1.rc1.el7 docker-ce-test
docker-ce.x86_64 18.05.0.ce-3.el7.centos docker-ce-test
docker-ce.x86_64 18.05.0.ce-3.el7.centos docker-ce-edge
docker-ce.x86_64 18.05.0.ce-2.1.rc1.el7.centos docker-ce-test

yum install docker-ce-18.06.1.ce #安装最新稳定版本

3. 自定义docker配置

默认docker将目录配置到/var/lib/docker目录下,镜像也是访问国外的仓库,我们可以进行配置。
这里我把docker目录配置为/usr/docker,镜像服务使用阿里的:https://cr.console.aliyun.com

1
2
mkdir /etc/docker
vi /etc/docker/daemon.json

写入以下内容

1
2
3
4
{ 
"graph":"/usr/docker",
"registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}

4. 启动docker**

systemctl start docker

查看docker信息,可以看到Docker Root Dir 和 RegistryMirrors 都变成了 /etc/docker/daemon.json 中配置的内容了

docker info

常用docker命令:
docker ps #正在运行的容器
docker ps -a #所有的容器
docker start [NAME]/[CONTAINER ID] #启动容器
docker stop [NAME]/[CONTAINER ID] #停止容器
docker rm [NAME]/[CONTAINER ID] #删除容器
docker update --restart=always [NAME]/[CONTAINER ID] #容器自启
docker exec -it [CONTAINER ID] /bin/bash # 已运行容器进入交互模式

5. 安装gitlab

下载镜像

获取gitlab版本:访问https://hub.docker.com,搜索 Gitlab-ce。 ps: Gitlab Community Edition汉化版,无docker镜像
docker pull gitlab/gitlab-ce:11.10.1-ce.0 #下载镜像,镜像有1g多,需要等待一段时间

数据持久化保存

因为容器的数据是不能持久化保存的。所以我们需要用 docker volume 的方式将存储的数据映射到操作系统的目录中来。这样就算运行的容器崩溃,我们重新启动一个新的容器,原来容器中的数据还是不会丢失
这里使用目录 /usr/gitlab 来保存 gitlab 容器中的数据

运行 gitlab

1
2
3
4
5
6
7
8
docker run --name gitlab -d \
--publish 10080:10080 --publish 10022:22 \
--env GITLAB_OMNIBUS_CONFIG="external_url 'http://服务器ip:10080/'; gitlab_rails['gitlab_shell_ssh_port'] = 10022;" \
--restart unless-stopped \
--volume /usr/gitlab/config:/etc/gitlab \
--volume /usr/gitlab/logs:/var/log/gitlab \
--volume /usr/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:11.10.1-ce.0

这里把主机的10080、10022映射到容器,这样我们可以用10080端口访问web页面,用10022进行clone操作。这里要关闭selinux,开放防火墙的10080、10022端口。
同时使用 –volume /usr/gitlab/config:/etc/gitlab 、 –volume /usr/gitlab/logs:/var/log/gitlab 、 –volume /usr/gitlab/data:/var/opt/gitlab 这三个参数将 gitlab 的配置、数据和日志持久化到实体主机文件系统上来。

修改run参数:停止所有容器,停止docker,进入docker目录/containers/容器id,修改config.v2.json、hostconfig.json
去除不需要的80、443端口监听:修改config.v2.json中的 ExposedPorts ,删除 “443/tcp”:{},”80/tcp”:{}
修改 gtilab.rb 配置文件,下边是我自己的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
external_url 'http://服务器ip/域名:10080'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'xxx@aliyun.com'
gitlab_rails['gitlab_email_display_name'] = 'GitLab'
gitlab_rails['gitlab_email_reply_to'] = 'xxx@aliyun.com'
gitlab_rails['gitlab_shell_ssh_port'] = 10022
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.aliyun.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "xxx@aliyun.com"
gitlab_rails['smtp_password'] = "********"
gitlab_rails['smtp_domain'] = "smtp.aliyun.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
user['git_user_name'] = "GitLab"
user['git_user_email'] = "xxx@aliyun.com"
unicorn['worker_timeout'] = 60
unicorn['worker_processes'] = 2
unicorn['worker_memory_limit_min'] = "100 * 1 << 20"
unicorn['worker_memory_limit_max'] = "200 * 1 << 20"
sidekiq['concurrency'] = 10
postgresql['shared_buffers'] = "128MB"
postgresql['max_worker_processes'] = 4
nginx['listen_port'] = 10080

6. 访问 gitlab web 页面

打开浏览器访问 http://服务器id:10080 进入 gitlab 界面,这一步可能需要等待一段时间,等待 gitlab 启动完成,期间可能会出现502页面,一般没事,多等一会儿就好了
首次访问会让我们设置root账户密码,至于其他操作这里就不介绍了。

这里说一下,如果Clone with SSH的链接的类似 git@28085bf9f5c8:xxx/xxxx.git 的地址,需要改成 git@服务器ip:10022/xxx/xxxx.git
还有,Clone前要先配置 SSH Keys,这里推荐一种方法,使用git bash运行 ssh-keygen,生成id_rsa私钥和id_ras.pub公钥,把id_rsa.pub的内容复制到gitlab上,
再打开TortoiseGit的PuTTYgen,点击 Load,加载id_rsa之后,点击Save private Key保存成ppk,之后就可以使用TortoiseGit加载保存的ppk文件进行后续操作了
像克隆操作,使用的url例如 ssh://git@服务器ip:10022/xxx/xxxx.git