0.为什么不用rpm包安装gitlab
gitlab rpm包需要依赖 openssh-server,而suse系统自带openssh(含client和server端)。
- 虽然suse自带openssh,但是rpm安装还会报错找不到依赖openssh-server
- 尝试网上找openssh-server的rpm包安装后会有更多依赖报错,放弃;
- rpm安装时尾部追加参数
--nodeps --force
强制跳过依赖,能正常安装完毕。但是本人在公司内网机器环境下gitlab-ctl status
命令有些服务是down,查日志无果。放弃 - 上述更换机器、确保内存free足够的情况下,仍然不行,放弃rpm
1. 内网下以docker安装gitlab
我们准备两台Linux机器
- 内网服务器待安装gitlab 为A(suse)
- 可连接外网的服务器为B
1.1 安装docker
- 自行下载匹配docker tar包,传入A。x86_64/docker-20.10.6.tgz
- tar -xzvf docker-20.10.6.tgz
- cp docker/* /usr/bin/
- dockerd &
- docker -v 有信息说明成功
两台机器均要安装
1.2 获取镜像和配置
B机器执行
- docker pull gitlab/gitlab-ce:latest
- docker save gitlab/gitlab-ce:latest -o gitlab.tar
- 下载生成的tar到本地,把tar上传到A
A机器安装镜像(参考官网文档 https://docs.gitlab.cn/jh/install/docker.html)
- docker load < gitlab.tar
-
mkdir -p /data04/gitlab/config
mkdir -p /data04/gitlab/logs
mkdir -p /data04/gitlab/data -
chmod 777 /data04/gitlab/config
chmod 777 /data04/gitlab/logs
chmod 777 /data04/gitlab/data -
docker run --detach \
–publish 8443:443 --publish 8888:80 --publish 8222:22 \
–name gitlab --restart unless-stopped \
–volume /data04/gitlab/config:/etc/gitlab \
–volume /data04/gitlab/logs:/var/log/gitlab \
–volume /data04/gitlab/data:/var/opt/gitlab \
–privileged=true \
gitlab/gitlab-ce:latest
记得带上–privileged=true,让容器获取宿主机root权限。不写之后会有权限相关错误
#进入容器:
docker exec -it gitlab /bin/bash
#修改gitlab.rb:
vi /etc/gitlab/gitlab.rb
#加入如下
#gitlab访问地址,可以写域名。如果端口不写的话默认为80端口,端口和docker -p参数要对应
external_url 'http://B机器的IP'
#ssh主机ip
gitlab_rails['gitlab_ssh_host'] = '192.168.124.194'
#ssh连接端口
gitlab_rails['gitlab_shell_ssh_port'] = 9922
# 让配置生效
gitlab-ctl reconfigure
# 重启
gitlab-ctl restart
启动前请参考 https://zhuanlan.zhihu.com/p/546533347 文章调小puma 核数,否则会按你机器的核数不断加线程吃内存,导致前端浏览器概率爆500、502错误,但是刷新几次又可以正常使用的情况!
注意:在修改配置文件中的external_url时,如果你的url前缀是http,则GitLab容器会在80端口提供web服务;如果你的url前缀是https,则GitLab容器会在443端口提供web服务;如果你的这个url后面带了端口,则会在相应的端口提供web服务。
注意弄好容器的端口映射关系
1.3 访问
#启动
gitlab-ctl restart
前端浏览器访问:http://B机器的IP:8888
。
第一次用root账号登录
root密码在
cat /data04/gitlab/etc/initial_root_password
文件中,24h该文件会被 gitlab-ctl reconfigure 删除
2.相关命令
docker stats #查看docker容器的性能消耗
docker exec -it 容器名 /bin/bash 浸入容器
3.测试ssh git clone 命令
4. 关于external_url
external_url 要不要写成 'ip:port’带端口的形式?
上述安装启动容器时--publish 8888:80
参数会导致一个问题:
在external_url设置ip+port却无法访问到GitLab,如果直接设置成ip地址可以访问但是在项目的checkout地址一栏,其git地址却不包含端口号,导致http的checkout地址不可用。在用http方式clone项目需要手动补上端口号8888。
解决办法:https://zhuanlan.zhihu.com/p/46275204
- 首先gitlab的nginx默认监听的http访问端口是80端口,nginx conf文件在docker容器内的位置是
/var/opt/gitlab/nginx/conf/gitlab-http.conf
。 - 不考虑防火墙映射等等外部规则:我们docker run命令启动容器时
--publish 8888:80
参数的意思是,将容器端口80映射到宿主机8888。也就是说,我们没有改gitlab容器的默认http端口80,只是在docker映射时改到了对外宿主机的端口到8888。80到8888 是docker在“容器外”做的映射。 - 此时对于容器内的gitlab,是没有影响的,默认http的80端口没有改变。所以
external_url
的写法不需要带端口,直接ip就行了。对于docker容器外的访客来说,则需要在浏览器带端口ip:8888
去访问
参考:https://www.hash070.top/archives/gitlab-withdocker.html文章来源:https://www.toymoban.com/news/detail-549085.html
上述说了一大堆,总结下文章来源地址https://www.toymoban.com/news/detail-549085.html
- docker run启动镜像时,如果关于http端口的参数是
--publish 80:80
,那么一切正常,external_url
只需要填写http://ip
即可。前端浏览器访问http://ip
即可; - 如果关于http端口的参数是
--publish 你自定义非80的端口:80
,external_url
填写http://ip
不能带端口,前端浏览器访问http://ip:你自定义非80的端口
。这样会导致一个问题:你在用http的方式clone项目的时候,http url会不带端口,导致clone失败!需要手动补充端口,例如:http://ip:你自定义非80的端口/XXX/项目名.git
。(ssh clone是正常带端口的,前面在gitlab.rb配置了gitlab_shell_ssh_port) - 解决2的办法来自官网:将参数改为
--publish 你自定义非80的端口:你自定义非80的端口
并将external_url
改为http://ip:你自定义非80的端口
,官网这里的的例子就是--publish 8989:8989
,external_url改为http://ip:8989
已经建立容器的,就先停止容器再删除容器。但是不要将映射的配置文件删除(gitlab.rb文件),docker在删除容器的时候不会将映射的文件删除。
当然也可以不管它……反正ssh配置好了够用……
到了这里,关于suse内网基于Gocker部署Gitlab私服的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!