前言
我们都会使用 Git
,但是我们都其实还需要一个 Git
仓库来存放我们的代码,也就是所谓的版本控制,代码托管。那么现在的平台有这么两个:GitHub
和 Gitee
(码云,OSCHINA 出的)。而我们知道代码是不可能公开放在云上面的,也就是说企业内部的代码不可能发布到别人家的平台,即使是要发布上去,也是要购买私人仓库的,所以我们也需要有一个本地的管理。
早期呢大家都是用的 SVN
,在本地架设 SVN
服务器,使用 SVN
进行代码托管。但是 SVN
有种种缺陷,后面 Git
应运而生,文件的存储方式和管理方式也都发生了变化,功能也变得丰富。为了解决本地 Git
管理的问题,就有一个开源社区开发了 GitLab
这么一个版本管理系统。
所以在现在的企业开发中也都在使用 GitLab
来作为我们的本地仓库管理系统。
介绍
GitLab
是利用 Ruby on Ralis 一个开源的版本管理系统,实现一个自托管的 Git
项目仓库,可通过 Web 界面进行访问公开的或私人项目。它与 GitHub
有类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常利于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单程序(Wall)进行交流。它还提供了一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。
安装
因为 Docker
太香了~所以我们这里使用 Docker
来安装和运行 GitLab
中文版。因为正常情况下它默认是英文版的,有爱好者将 GitLab
的英文版翻译成了中文版。由于新版本问题较多,这里我们目前使用相对稳定的 9.4 版本。
配置
docker-compose.yml
配置如下:
version: '3'
services:
myGitLab:
image: 'twang2218/gitlab-ce-zh:9.4'
restart: 'no'
hostname: 192.168.1.102
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://192.168.1.102:8080'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['gitlab_shell_ssh_port'] = 2222
unicorn['port'] = 8888
nginx['listen_post'] = 8080 ports:
- '8080:8080'
- '8443:443'
- '2222:22'
volumes:
- D:/ProgramData/Docker/gitlab/config:/etc/gitlab
- D:/gitlab/data:/var/opt/
- D:/ProgramData/Docker/gitlab/logs:/var/log/gitlab
说明:
- 从 image 镜像配置可以看出我们这里用的是 twang2218 发布的 gitlab-ce-zh:9.4 版本。
ce - 社区版
zh - 中文版
来源:直接从 Docker Hub 上找
![68d5f747c7dfe8e5ba72f960cdadc4e1.png](https://i-blog.csdnimg.cn/blog_migrate/59628f6ca3fb06ae6fdcadefab04cf59.png)
我们实际要找的?
![dac6a433360fcd97783f573ac23ad420.png](https://i-blog.csdnimg.cn/blog_migrate/67d87f6d6c8bb011553bab6f7c20ede1.png)
services:myGitLab
- 我要创建的是名为 myGitLab 的服务services:myGitLab.restart='false'
- 开机不自启services:myGitLab.environment
- 环境变量
external_url 'http://192.168.1.102:8080' - Web URL 的访问地址
gitlab_rails['gitlab_shell_ssh_port'] = 2222 - SSH 连接的端口号,本身连接服务器就要使用 22 (默认)这个端口,
GitLab
也不例外一样需要 22,怕GitLab
要使用的 22 端口和宿主机的端口号冲突,所以就要修改GitLab
的 SSH 连接端口号避免冲突。unicorn['port'] = 8888 - 内置端口
nginx['listen_post'] = 8080 -
GitLab
是基于Nginx
反向代理访问到的,那么整个GitLab
镜像里就会包含GitLab
和Nginx
两样东西。TZ: 'Asia/Shanghai' - 时区:亚洲/上海
GITLAB_OMNIBUS_CONFIG - GitLab 的配置参数
services:myGitLab.ports
- 端口映射
这样就是为了我们的 GitLab
就可以像 GitHub
一样支持 HTTP、HTTPS 和 SSH 三种连接方式。
- '8080:8080' - 宿主机的 9899 映射 到容器的 9899。
GitLab
镜像默认安装时 expose 出来的端口为 80,但是由于我修改了上面GitLab
的配置,我将Nginx
监听端口的 80 手动改为了 9899,所以此时映射的端口就是 9899。 - '8443:443' - 安全连接端口
- '2222:22' - SSH 端口
services:myGitLab.volumes
- 容器数据卷(Docker 数据持久化的一种方式)
【踩坑说明】(因为我这里是在 Windows
环境下 用 Docker Desktop
安装的)
- 容器数据卷的配置
volumes:
- D:/ProgramData/Docker/gitlab/config:/etc/gitlab
- D:/gitlab/data:/var/opt/
- D:/ProgramData/Docker/gitlab/logs:/var/log/gitlab
中间的 D:/gitlab/data:/var/opt/
不能改成另外两个一样 D:/ProgramData/Docker/gitlab/data:/var/opt/gitlab
不然启动会报错?
Error executing action `run` on resource
'ruby_block[directory resource: /var/opt/gitlab/git-data]'
到网上查了很多解决方案,似乎是因为 Windows
下 volume
的挂载权限问题
https://gitlab.com/gitlab-org/omnibus-gitlab/issues/2280
但是在 Linux
系统下如果写成?就没问题……
/usr/local/docker/gitlab/data:/var/opt/gitlab
- 需要在设置里把
Docker Desktop
的通知打开,后面镜像挂载的时候会弹出通知要你开启上面容器数据卷(volumes)目录的文件共享,不然会报错:Filesharing has been cancelled
安装
在我们的 docker-compose.yml
文件所在目录下运行命令
docker-compose up -d
就会开始进行镜像的下载拉取……因为第一次配置过程有点慢,比较耗内存,当然也要看电脑配置?
官方介绍是只需要 1G 内存,但实际使用时却需要 8G 内存。因为我们在使用
GitLab
的时候会使用到它的很多功能,比如邮件、持续集成功能。这俩就很耗内存,如果这俩玩意不开启,2G 足矣,但完全不是 1G 内存就能运行。而我们的GitLab
可能是全公司人都会去使用,整个如果研发部人数比较多,那它就对服务器的要求就更高。*
![6c0f0e71a73b4ecdad49d8027d6cfe86.png](https://i-blog.csdnimg.cn/blog_migrate/c8b22371685339be9fd500e435a33591.jpeg)
等到下面这一步花了我将近 10 min……(忘截图了,到网上找了张)
![96c35a9eae25ce6218c6d403611dbccb.png](https://i-blog.csdnimg.cn/blog_migrate/a616a5c7b8fce0a280fdae797871a7c8.png)
然后我又等了 5 min 正式启动完成,才能正常访问咱 GitLab
的页面 http://localhost:8080(端口 8080 是我们在配置中设置的外部访问地址为 8080,默认是 80)
![c259d79475c508f087e1bcf1c2157806.png](https://i-blog.csdnimg.cn/blog_migrate/449a39667eb1761e08c67bb7147cd218.png)
安装成功!!!
安装完成后第一件事就是设置管理员密码(至少 8 位)。设置完成后就进入登录界面,进行登录,账号:root
root 是 GitLab
默认的超级管理员账号
![125958b1e7df885b4a7dbffcef406552.png](https://i-blog.csdnimg.cn/blog_migrate/5ae81903238bd499d0ad5fbadd8b5199.png)
登录成功
![44c088c298974281525d97b77ab2d380.png](https://i-blog.csdnimg.cn/blog_migrate/692c2ae628e18a70e0ee5416f8c53680.png)
附:此时已经我的 GitLab
容器运行中的状态
![d9776029a44eec9cc21418fd6dc379bb.png](https://i-blog.csdnimg.cn/blog_migrate/2b952630473dd4dc53d1dd9f6a72b276.png)
设置
管理区域
只有管理员账号才有管理区域按钮
![c5cffd17cc9ad06695eea89c2121aae7.png](https://i-blog.csdnimg.cn/blog_migrate/b420808a95a1f816d63279735a9187e5.png)
进入设置
![149d5bbd6cf52285568b9535b9c320f6.png](https://i-blog.csdnimg.cn/blog_migrate/8c04fac7e61dcbc775793f73c5f22c7e.png)
启用的 Git 访问协议:SSH 和 HTTP(S)
这个是默认选上的,也就是当初
docker-compose.yml
的启动配置里面配的。关闭 Gravatar 头像(这个头像是网络头像)
不难发现我们右上角自己账号就有个头像,这个头像就是基于这个服务得到的,这个就是属于软件即服务的一种体现,这个网站就是 https://en.gravatar.com/。
![131f5cf0573d5d5cb31575402c1425d2.png](https://i-blog.csdnimg.cn/blog_migrate/40048dc8b2fd875691e4222bb7c922f5.png)
这个头像是国际化的,也就是说你没有头像你就可以接入这个网站的 API 就可以获得头像,然后我们所有的头像就可以使用 Gravatar 来上传和管理你的头像,没有头像会默认分配给你一个头像。包括 GitHub
在内的很多大型网站都是使用的 Gravatar 。所以它是全球统一头像管理服务平台,就和我们使用的第三方登录差不多。
因为它是在国外的,所以有的时候网络环境不行的话它会被抢掉,被抢掉以后我们去访问 GitLab
的时候可能会出现比较卡顿的情况,所以我们要把它关了。
关闭注册:因为公司都是内部使用,不提供对外服务,所以注册需要关闭掉。
关闭用量统计
账户管理
使用时建议不要直接使用 root 账号进行操作,需要先创建账号,然后所有的操作都去基于这个账号来操作,如果你是管理员账号就还需要为其他开发人员分配账号。
新建账户
因为我们的 GitLab
并没有配置邮箱服务,所以并不会发送初始密码邮件,创建成功之后可以直接进入编辑页面该账号的密码。
新账号登录
因为我们是直接在后台修改的密码,所以为了安全起见,登录进去之后它会要求用户自己修改成自己的密码然后再进行登录。
使用
成功登录之后,它操作的模式和 GitHub
差不多,也就是我们依然需要创建项目、群组或代码片段。由于我们可以使用自己的 GitLab
来托管我们的项目,所以基于微服务分布式架构部署,通常我们需要创建一个群组类项目直接新建一个项目。
![51b7f98f1dfa7883c88af1ea99e73c15.png](https://i-blog.csdnimg.cn/blog_migrate/141863932193d4ffa026c1666aaa9e7b.png)
在这里的新建项目等同于我们开发时的单体项目。新建群组由这个群组来统一管理项目才相当于是做分布式项目,也就是说我的一个产品由多个项目组成。
我们在首页的菜单这也可以进入群组项目
![79286b98e0b0d8014b908deea94d4642.png](https://i-blog.csdnimg.cn/blog_migrate/d4d154d6f2bd0b264669a59097961e34.png)
![9898925a75460b41c385ed1aaf944eb7.png](https://i-blog.csdnimg.cn/blog_migrate/47b05f4724a199b9cac89b41dbb6782c.png)
而在这里群组它只是管理的,所以我们需要在群组里面新建项目。
![4b26e9bac27e39159a89553efc7770ea.png](https://i-blog.csdnimg.cn/blog_migrate/81a8e233167030b9ae749ad76188533d.png)
![f89da04e32b27961ced23f76fcefce13.png](https://i-blog.csdnimg.cn/blog_migrate/d4ffe393d4b6a9054fbd75c25b55bc9f.png)
然后就直接在我们想存放项目的目录下克隆就好了
git clone http://192.168.1.102:8080/test/my-test-demo.git
![8a609e160723c6e0a00996207ff37461.png](https://i-blog.csdnimg.cn/blog_migrate/c5b6f72f5db7767c47163bffd7007796.png)
账号密码应该就不用多说了吧?
项目拉下来了之后,后面的操作就都和 GitHub
一样了。
最后
如果本文对你有帮助的话不妨点个?呦。
分享技术,稳住,我们能赢?!