Docker 搭建 Gitlab(新手村试炼版)

1 拉取镜像

搭建 gitlab 环境除了 gitlab 本身镜像外,还需要 redis 和 postgresql 镜像,docker 命令如下:
拉取 redis:docker pull sameersbn/redis
拉取 postgresql:docker pull sameersbn/postgresql
拉取 gitlab:docker pull gitlab/gitlab-ce:13.6.7-ce.0
注意:此处拉取的 13.6.7-ce.0 版本,如果需要进行数据还原,需要确保 gitlab 版本和备份版本一致

2 创建容器

2.1 postgresql

docker run -d \
--name postgresql \
--privileged=true \
--restart always \
-e 'DB_NAME=gitlabhq_production' \
-e 'DB_USER=gitlab' \
-e 'DB_PASS=${password}' \
-e 'DB_EXTENSION=pg_trgm' \
-v /data/postgresql/data:/var/lib/postgresql \
sameersbn/postgresql

参数说明

参数名称说明
d后台运行
name容器名称,执行 docker 容器命令时可以使用该名称来替换容器 ID
privileged让容器获取宿主机 root 权限
restart设置容器每次都跟随 docker 重启
e ‘DB_NAME=gitlabhq_production’设置环境变量 DB_NAME 的值为 gitlabhq_production
e ‘DB_USER=gitlab’设置环境变量 DB_USER 的值为 gitlab
e ‘DB_PASS=’${password}’设置环境变量 DB_PASS 的值为 ${password},需要将 ${password} 替换成自己想要设置的密码
e ‘DB_EXTENSION=pg_trgm’设置环境变量 DB_EXTENSION 的值为 pg_trgm
v /data/postgresql/data:/var/lib/postgresql将容器 /var/lib/postgreaql 挂载到宿主机 /data/postgresql/data,宿主机路径不存在会自动创建
sameersbn/postgresql镜像名称,可用镜像 ID 代替。如果不是最新版本还需要携带版本信息

2.2 redis

docker run -d \
--name redis \
--privileged=true \
--restart always \
-v /data/redis/data:/var/lib/redis \
sameersbn/redis

参数说明

参数名称说明
d后台运行
name容器名称,执行 docker 容器命令时可以使用该名称来替换容器 ID
privileged让容器获取宿主机 root 权限
restart设置容器每次都跟随 docker 重启
v /data/redis/data:/var/lib/redis将容器 /var/lib/redis 挂载到宿主机 /data/redis/data,宿主机路径不存在会自动创建
sameersbn/redis镜像名称,可用镜像 ID 代替。如果不是最新版本还需要携带版本信息

2.3 gitlab

docker run -d \
--name gitlab \
--privileged=true \
--restart always \
--link postgresql:postgresql \
--link redis:redisio \
--hostname 192.168.1.188 \
-p 8443:443 \
-p 9080:80 \
-p 8022:22 \
-e 'GITLAB_HOST=192.168.1.188' \
-e 'GITLAB_PORT=9080' \
-e 'GITLAB_SSH_PORT=8022' \
-v /data/gitlab/etc:/etc/gitlab \
-v /data/gitlab/log:/var/log/gitlab \
-v /data/gitlab/opt:/var/opt/gitlab \
gitlab/gitlab-ce:13.6.7-ce.0

参数说明

参数名称说明
d后台运行
name容器名称,执行 docker 容器命令时可以使用该名称来替换容器 ID
privileged让容器获取宿主机 root 权限
restart设置容器每次都跟随 docker 重启
link postgresql:postgresql链接 postgresql 容器
link redis:redisio链接 redis 容器
hostname 192.168.1.188指定容器主机名,根据需求修改
p 8443:443将容器的 443 端口映射到宿主机的 8443 端口
p 9080:80将容器的 80 端口映射到宿主机的 9080 端口,如此配置 9080 将成为 HTTP 访问端口,可根据需求修改
p 8022:22将容器的 22 端口映射到宿主机的 8022 端口,如此配置 8022 将成为 SSH 访问端口,可根据需求修改
e ‘GITLAB_HOST=192.168.1.188’设置环境变量 GITLAB_HOST 的值为 192.168.1.188,根据需求修改
e ‘GITLAB_PORT=9080’设置环境变量 GITLAB_PORT 的值为 9080,根据需求修改
e 'GITLAB_SSH_PORT=‘8022’设置环境变量 GITLAB_SSH_PORT 的值为 8022,根据需求修改
v /data/gitlab/etc:/etc/gitlab将容器 /etc/gitlab 挂载到宿主机 /data/gitlab/etc,宿主机路径不存在会自动创建
v /data/gitlab/log:/var/log/gitlab将容器 /var/log/gitlab 挂载到宿主机 /data/gitlab/log,宿主机路径不存在会自动创建
v /data/gitlab/opt:/var/opt/gitlab将容器 /var/opt/gitlab 挂载到宿主机 /data/gitlab/opt,宿主机路径不存在会自动创建
gitlab/gitlab-ce:13.6.7-ce.0镜像名称,可用镜像 ID 代替。如果不是最新版本还需要携带版本信息

执行完上述步骤后,可以通过 http://192.168.1.188:9080 访问(根据 2.3 中创建 gitlab 容器时的参数调整

3 克隆路径问题

执行完步骤后,在浏览器中使用:http://192.168.1.188: 9080 可以访问 gitlab。但是项目的克隆路径是错的,缺少了端口,因为 gitlab 容器中默认是使用 80 端口,所以路径中没有端口。

按照以下步骤可以解决这个问题:

3.1 方法一

3.1.1 修改配置文件

在 /data/gitlab/etc/gitlab.rb 中(根据 2.3 中创建 gitlab 容器时的参数调整
在这里插入图片描述
增加以下内容:

external_url 'http://192.168.1.188:9080'
gitlab_rails['gitlab_ssh_host'] = '192.168.1.188'
gitlab_rails['gitlab_shell_ssh_port'] = 8022
nginx['listen_port'] = 80

参数说明

参数名称说明
external_url项目克隆路径 ,主机和端口需和步骤 2.3 中配置的主机与 HTTP 访问端口一致
gitlab_rails[‘gitlab_ssh_host’]SSH 访问主机,需和步骤 2.3 中配置的主机一致
gitlab_rails[‘gitlab_shell_ssh_port’]SSH 访问端口,需和步骤 2.3 中配置 SSH 端口一致

3.1.2 重启容器

docker restart gitlab

3.2 方法二

创建容器时不对 80 端口进行映射,而是直接映射 external_url 中的端口(即原本 -p 9080:80 修改成 -p 9080:9080),同时不要设置 nginx['listen_port'],因为 nginx 会自动监听 external_url 中的端口,若 external_url 未指定端口,则监听 80。

3.2.1 重新创建容器

停止 gitlab 容器,并删除

docker stop gitlab
docker rm gitlab

重新创建容器,其中 9080 为 external_url 中设置的的端口

docker run -d \
--name gitlab \
--privileged=true \
--restart always \
--link postgresql:postgresql \
--link redis:redisio \
--hostname 192.168.1.188 \
-p 8443:443 \
-p 9080:9080 \
-p 8022:22 \
-e 'GITLAB_HOST=192.168.1.188' \
-e 'GITLAB_PORT=9080' \
-e 'GITLAB_SSH_PORT=8022' \
-v /data/gitlab/etc:/etc/gitlab \
-v /data/gitlab/log:/var/log/gitlab \
-v /data/gitlab/opt:/var/opt/gitlab \
gitlab/gitlab-ce:13.6.7-ce.0

3.2.2 修改配置

在 /data/gitlab/etc/gitlab.rb 中(根据 2.3 中创建 gitlab 容器时的参数调整)增加以下内容:

external_url 'http://192.168.1.188:9080'
gitlab_rails['gitlab_ssh_host'] = '192.168.1.188'
gitlab_rails['gitlab_shell_ssh_port'] = 8022

3.1.2 重启容器

docker restart gitlab

4 头像显示问题

经过上面的一顿操作,理论上是没有什么问题了,但是可能会出现头像加载不出来的情况,需要将存储头像的链接修改成国内的。

在 /data/gitlab/etc/gitlab.rb 中(根据 2.3 中创建 gitlab 容器时的参数调整)增加以下内容:

gitlab_rails['gravatar_plain_url'] = 'http://cdn.libravatar.org/avatar/%{hash}?s=%{size}&d=identicon'
gitlab_rails['gravatar_ssl_url'] = 'https://cdn.libravatar.org/avatar/%{hash}?s=%{size}&d=identicon'

登录容器:

docker exec -it gitlab /bin/bash

然后重新加载配置并重启 gitlab

gitlab-ctl reconfigure
gitlab-ctl restart

5 内存占用过多问题

在 /data/gitlab/etc/gitlab.rb 中(根据 2.3 中创建 gitlab 容器时的参数调整)增加以下内容:

unicorn['worker_processes'] = 2
unicorn['worker_memory_limit_max'] = "1280 * 1 << 20"
postgresql['shared_buffers'] = "256MB"

登录容器:

docker exec -it gitlab /bin/bash

然后重新加载配置并重启 gitlab

gitlab-ctl reconfigure
gitlab-ctl restart
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值