折腾Docker之Gitlab
三、安装Gitlab
1、打开终端,搜索gitlab.
| |
2、拉取镜像
| |
3.创建容器
创建之前,建议打开Docker Desktop - Preferences - ResourcesAdvanced 页签把 CPU 改成 4, Memory 改成 4GB。File sharing 全部删除,然后添加 /Users 或 /Users/用户名,以减少容器访问磁盘。
终端执行命令:
| |
命令参数解释
--detach 后台运行--hostname gitlab.yourdomain.com 容器的主机名或域名,即192.168.10.10或者 gitlab.example.com--name gitlab 容器的名字--restart always 设置重启方式,always 代表一直开启,服务器开机后也会自动开启的--publish 10080:80 把本机端口映射到容器端口,即访问宿主机10080端口为容器的80端口--volume $HOME/gitlab/config:/etc/gitlab 宿主机目录映射到容器目录--privileged=true 提升容器的root用户拥有真正root权限,否则只是普通用户权限gitlab/gitlab-ce:13.8.1-ce.0 这里我指定了镜像的tag版本,如果你是最新的版本,可以改为gitlab/gitlab-ce
创建成功后会显示一串字符,例如
| |
执行命令docker ps 或者 docker container ls
| |
STATUS 会有下面几种状态
| |
大坑:如果状态一直是unhealthy,在更改CPU=4 , Memory=4GB的情况下,状态变为healthy。恢复CPU=2 , Memory=2GB时,状态又变回unhealthy。说明gitlab很消耗性能。
深坑:在启动容器后, com.docker.hyperkit 进程出现高达 100%、200%的CPU使用率,在提高CPU数量,删除File sharing条目之后得到缓解。
4、访问gitlab
本机打开浏览器访问http://127.0.0.1:10080,会显示Change your password,这是第一次访问,修改管理员账户密码。更改完成后,就进入了登录页面,输入root和刚改的密码,就可以进入gitlab的控制台了。
局域网内其他用户可以通过http://宿主机ip:10080来访问。
5.设置语言
成功登录后,可以设置当前用户的语言为中文。点击右上角的头像,选择Settings,左侧找到Preferences,页面向下滚动就可以看到Localization了,下拉选择中文,最后点击Save changes,刷新页面就可以显示成中文了。如图

6.创建用户
在使用root用户登录之后,点击导航栏的扳手图标,找到左侧用户,点击右侧按钮新用户,之后填写好必填项,初始密码填写12345678,点击最下面的创建用户按钮就可以了。
7.创建一个项目
点击导航栏的Gitlab图标,会显示首页的项目,点击右侧新建项目,选择创建空白项目,也可以选择使用模板创建。
项目名称填入demo,点击新建项目按钮完成。

创建完成后,还需要添加SSH,才可以访问仓库。
点击添加SSH密钥,在密钥输入框中,填写密钥。如果不知道如何添加,可以点击页面中的生成一个链接,会跳转到帮助页面,有文档教你如何创建密钥。
下面以Mac系统为例,创建一个ED25519密钥。
打开命令行,输入ssh-keygen -t ed25519 -C "admin@example.com"回车,记得替换一下邮箱。

注意,输入文件名字时,如果没有指定完整路径,文件会存放在当前用户的目录,即/Users/xxx
查看一下你的密钥对存放的目录
| |
使用cat命令,查看并复制公钥的内容。复制ssh开头的这行内容。
| |
复制后粘贴到gitlab中的密钥输入框内,点击添加密钥。

然后回到demo项目的主页,按照命令行指引,这就完成项目的创建了。
踩坑
坑:Permission denied (publickey,password,keyboard-interactive).
参考:Permission denied (publickey,keyboard-interactive)
参考:SSH Permission denied (publickey,password,keyboard-interactive)
参考:Mac下SSH免密登录Permission denied (publickey,password,keyboard-interactive).
问题的原因应该是SSH端口的问题。
gitlab容器创建时,增加了 10022:22 的映射关系,即宿主机 10022 端口映射到容器的 22 端口。在使用 git clone git@gitlab.yourdomain.com:zzjs/demo.git 命令时会报上面的错误。
同时又因为本地有多个git环境,不同的账号。
不断的google之后,处理如下:
1.创建config文件,来解决不同环境和不同账号的问题。
2.创建authorized_keys文件,来解决免密登录。
| |
可以看到已经存在一个 config 文件了,如果没有这个文件,使用 touch config 创建一个就好了。
在config文件中添加下面的内容
| |
当前目录是没有 authorized_keys 文件的,这里使用管道的方式创建文件。
| |
这两步完成后来测试一下
| |
再次测试,并git clone,成功!
| |
虽然解决了问题,但对于本地来说设置和操作过多,后续尝试使用Nginx去解决这个问题。
坑:Pushing to http://gitlab.yourdomain.com/zzjs/demo.git remote: You are not allowed to push code to this project. fatal: unable to access 'http://gitlab.yourdomain.com/zzjs/demo.git/': The requested URL returned error: 403
这是使用Sourcetree,在推送时的报错。暂时较忙,也没有启用https,在新建克隆时,把http的请求改成git的请求后,问题不在出现。