通过 docker 搭建自用的 gitlab 服务
前言
git 是当下如日中天的版本管理系统。现在如果不是工作在 git 版本管理系统之下,几乎都不好意思和人打招呼了。有很多现成的互联网的 git 服务提供给大家使用,例如号称程序员社交网络的 GitHub,还有低调好用的 bitbucket 。这些给个人使用或者公司用来做开源使用都没有什么问题。但如果在部门内推广使用就会涉及到代码不能公开或者额外的费用的问题。本人原来在部门内采用的是手工在 linux 服务器上来管理代码仓库。权限没法设置,也非常不方便。所以也一直很苦恼。
正好 gitlab 公司提供了 gitlab 社区版,看了看基本满足了部门内 git 管理的需求。gitlab 提供了各种各样的安装方式,最方便的当然还是 docker 方式的安装,适合我这种不想多折腾的。抽空搭建了一个。也趟了几个坑,将步骤记录如下,希望对其他有此需求的人有所帮助。
docker 安装
既然是基于 docker 来安装 gitlab ,首先是安装 docker 环境了。我是在 centos 7 的基础上安装的。根据官网的指南
删除旧版本的 docker
旧版本的 docker 的叫做 docker 或者 docker-engine,如果系统中已经安装旧版本,则需要删除。通过一下命令删除旧的 docker 版本
yum remove docker docker-common docker-selinux docker-engine
复制代码
增加 docker yum 源
新的 docker 叫做 docker-ce ,如果第一次安装 docker-ce 需要设置 docker-ce 的 yum 源。用如下的命令来增加 docker-ce 的yum 源
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --enable docker-ce-edge
yum-config-manager --enable docker-ce-test
复制代码
安装 dokcer-ce
首先我们查看所有有效的 docker-ce 的版本
yum list docker-ce --showduplicates | sort -r
复制代码
得到如下的列表
docker-ce.x86_64 17.12.0.ce-1.el7.centos docker-ce-test
docker-ce.x86_64 17.12.0.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.12.0.ce-1.el7.centos @docker-ce-stable
docker-ce.x86_64 17.12.0.ce-0.4.rc4.el7.centos docker-ce-test
docker-ce.x86_64 17.12.0.ce-0.3.rc3.el7.centos docker-ce-test
docker-ce.x86_64 17.12.0.ce-0.2.rc2.el7.centos docker-ce-test
docker-ce.x86_64 17.12.0.ce-0.1.rc1.el7.centos docker-ce-test
docker-ce.x86_64 17.11.0.ce-1.el7.centos docker-ce-test
docker-ce.x86_64 17.11.0.ce-0.4.rc4.el7.centos docker-ce-test
...
docker-ce.x86_64 17.03.1.ce-0.1.rc1.el7.centos docker-ce-test
docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
复制代码
从这里可以看到最新的稳定版本是 17.12.0.ce。我们用下面的命令选择安装该版本
yum install docker-ce-17.12.0.ce
复制代码
自定义 docker 配置
因为众所周知的原因,访问 docker 的中央仓库下载 docker 镜像的速度非常慢。为了获得较好的体验,我们需要配置一个寻找一个国内的镜像加速服务。
默认情况下,docker 将运行的目录配置到了/var/lib/docker 目录下。通常这个目录是在 linux 的根分区下,空间比较有限,所以我们需要将 docker 的运行目录配置到其他目录下。
镜像加速服务可以使用阿里云的镜像加速服务。注册阿里云的用户后,登录 https://cr.console.aliyun.com ,在管理控制台选择镜像加速服务,则出现如下的信息。这里红色打码部分就是你的阿里云镜像加速服务的地址。
为了自定义 docker 的默认运行目录和镜像仓库地址,我们需要修改 /etc/docker/daemon.json
mkdir /etc/docker
vi /etc/docker/daemon.json
复制代码
输入如下内容
{
"graph":"/u1/docker",
"registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
复制代码
graph 定义 docker 运行的目录, registry-mirrors 定义了 docker 获取镜像的仓库的地址。
启动 docker
执行如下的命令启动 docker 的服务
systemctl start docker
复制代码
执行如下命令查看 docker 信息
docker info
复制代码
可以看到如下的信息
可以看到 Docker Root Dir 和 RegistryMirrors 都变成了 /etc/docker/daemon.json 中配置的内容了
安装 gitlab
下载镜像
执行下面的命令,从 docker 的镜像仓库中下载 gitlab 社区版的镜像
docker pull gitlab/gitlab-ce:latest
复制代码
镜像有 1g 多,所以需要等待一段时间
数据持久化保存
因为容器的数据是不能持久化保存的。所以我们需要用 docker volume 的方式将存储的数据映射到操作系统的目录中来。这样就算运行的容器崩溃,我们重新启动一个新的容器,原来容器中的数据还是不会丢失
我们建立了目录 /u1/gitlab 来保存 gitlab 容器中的数据
准备映射 sshd
另外,为了 git 采用 ssh 协议来操作 git 仓库,我们将主机的 sshd 的 22 端口映射到 容器中去。将主机的 sshd 端口更改为 15678。这里因为 centos 7 更严格的安全机制,算是一个坑,需要按照下面的步骤去进行。
编辑文件 /etc/ssh/sshd_config,将其中的 #Port 22 注释去掉,将数字 22 更改为 15678
执行下面的命令重启 sshd 服务
systemctl restart sshd
复制代码
运行下面的命令使 15678 端口可以对外提供服务。否则无法进行远程的 ssh 登录。
semanage port -a -t ssh_port_t -p tcp 15678
firewall-cmd --permanent --add-port=15678/tcp
firewall-cmd --reload
复制代码
运行 gitlab
docker run \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--volume /u1/gitlab/config:/etc/gitlab \
--volume /u1/gitlab/logs:/var/log/gitlab \
--volume /u1/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce
复制代码
这里把主机的 443、80、22 端口直接转发到容器,同时利用 --volume /u1/gitlab/config:/etc/gitlab 、 --volume /u1/gitlab/logs:/var/log/gitlab 、 --volume /u1/gitlab/data:/var/opt/gitlab 这三个参数将 gitlab 的配置、数据和日志持久化到主机文件系统上来。
管理员配置 gitlab
登录 gitlab
等待 docker 容器启动完成后,访问 http://ip 就进入 gitlab 访问界面。第一次访问是让我们修改管理员密码。如下所示
设置后管理员密码后,就进入登录页面,输入用户名 root 和刚才设置的密码就进入了 gitlab 的控制台。如下图所示
创建组( group)
gitlab 里面有三类对象:组( group)、项目( project)和用户 (people)。
为了方便管理,我们应该基于组来创建项目。一个项目就是一个 git 的仓库。基于组创建项目 ,然后将用户设置合适的权限后加入到组里面。这样用户就有了组里面所有项目的对应权限。
点击 “Create a group” 链接,如下图所示创建一个“健康医疗开发组” 的组
创建用户(people)
点击 “Add people” 链接,如下图所示创建一个 “yanggch” 的用户
因为还没有配置好邮件服务,所以还不能发送用户初始化密码的邮件。我们需要编辑用户,手动设置一个密码。如下图所示。如果用户忘记了密码,充值密码也可以在这里进行。
将用户加入组
为了方便管理,需要将用户加入到对应的组里面。如下图所示,在组管理界面中,点击组的名称,进入组用户设置界面。将刚才创建的用户 “yanggch” 加入到组 “健康医疗开发组”中,并且给他设置为 “Master” 角色。只有 “Master” 或者 “Owner” 角色才能推送 git 的更新。
创建项目(project)
增加 gitlab 组的时候,为了让项目让组里面的人都能访问,注意要将项目建立在组之下。如下图所示,在“健康医疗开发组”之下建立了 “redis_util” 的项目。
这样项目建好之后就可以被组里的用户访问了。
客户端访问
安装 git 客户端
这里演示在 window上安装 git 客户端。首先根据 window 版本下载 git 客户端安装程序。这里我下载的是
https://github.com/git-for-windows/git/releases/download/v2.15.1.windows.2/Git-2.15.1.2-64-bit.exe
复制代码
命令行访问
安装后,在准备 clone 项目的目录下点击鼠标右键,出现下面的右键菜单。
点击 “Git Bash Here” 进入 git 命令行环境。我们会从 redis_util 项目中看到该项目基于 http 协议的 clone 命令是
git clone http://7a45cd079bdc/healthcare_dev/redis_util.git
复制代码
这里的 7a45cd079bdc 实际上是 docker 容器的机器名。实际执行的时候我们把这个字符串更换成容器所在主机的 ip 地址即可。如下所示
git clone http://10.110.2.50/healthcare_dev/redis_util.git
复制代码
这种情况下会要求输入登录的用户名和密码。这里输入刚才创建的用户的用户名和密码即可。在使用前,需要用这个用户登录 gitlab 控制台修改一下初始密码才能使用。
出现如下提示表示从 gitlab clone 项目成功
Cloning into 'redis_util'...
warning: You appear to have cloned an empty repository.
复制代码
免密码登录
刚才那种方式通过 http 协议和 gitlab 进行通信,每次都要输入用户名和密码,非常不方便。用户可以设置通过 ssh 进行交互,将ssh key 加入到用户的 sshkey 设置列表中。
参考“命令访问” 章节进入 git 的 bash 环境。执行下面的命令进入 ssh key 存储目录
cd ~/.ssh
复制代码
目录中 id_rsa.pub 是 ssh 访问的公钥。如果不存在则执行下面的命令生成
ssh-keygen -t rsa
复制代码
全部回车后,会生成 id_rsa.pub 文件。
将文件中的内容拷贝到剪贴板。然后通过前面创建的用户名和密码登录 gitlab 控制台。在下面的界面中,将 id_rsa.pub 文件的内容填入文本框
保存后。再通过 ssh 协议操作 git 仓库,将不再需要输入用户名和密码。如下所示
推送一次提交
首先配置当前仓库的用户名和用户邮箱配置
cd redis_util
git config --local user.name "yanggch"
git config --local user.email "yanggch@inspur.com"
复制代码
然后在 redis_util 目录下加入一个 readme.txt,执行下面的命令提交并将更新推送到 gitlab 远程服务器
#将新文件加入到版本管理
git add readme.txt
#提交
git commit -m"第一次提交"
#将当前分支 master 推送到远程仓库
git push
#以 master 分支为基础建立一个新的 dev 本地分支
git checkout -b dev
#将本地仓库分支推送到远程仓库,在远程仓库建立对应的 dev 分支
git push --set-upstream origin dev
复制代码
到 gitlab 控制台查看 redis_util 的状态。如下图所示
到此,我们就完成了一个公司级别的 gitlab 服务器的搭建工作。小伙伴们就可以在这个上面流畅的进行开发了。
作者:杨高超
链接:https://juejin.im/post/5a4c9ff36fb9a04507700fcc
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
通过 docker 搭建自用的 gitlab 服务的更多相关文章
- docker初体验,搭建自用的gitlab服务
一.前言 git在如日中天的版本管理系统,现在如果不是工作在git版本管理系统下,几乎都不好意思给人打招呼.现在就有现成的互联网的git服务器提供给大家使用,例如号称程序的社交网络github. 正好 ...
- FTP 基础 与 使用 Docker 搭建 Vsftpd 的 FTP 服务
FTP 基础 与 使用 Docker 搭建 Vsftpd 的 FTP 服务 前言 最近的工作中,需要将手机上的文件发送到公司的 FTP 的服务器.按照从前的思路,自然是,先将文件传到电脑,再由电脑上传 ...
- Docker 搭建 ELK 读取微服务项目的日志文件
思路: 在docker搭建elasticsearch与kibana来展示日志,在微服务部署的机子上部署logstash来收集日志传到elasticsearch中,通过kibana来展示,logstas ...
- 【docker构建】基于docker搭建redis数据库缓存服务
搭建redis服务 首先拉取镜像==>运行镜像为容器 # 先搜索下redis镜像 [root@VM_0_10_centos wordpress]# docker search redis # 拉 ...
- 十一、Docker搭建部署SpringCloud微服务项目Demo
环境介绍 技术选型:SpringCloud&SpringCloud Alibaba&Docker 微服务模块划分: 员工模块:ems-employees 部门模块:ems-depart ...
- Docker搭建自己的Gitlab CI Runner
转载自:https://cloud.tencent.com/developer/article/1010595 1.Gitlab CI介绍 CI:持续集成,我们通常使用CI来做一些自动化工作,比如程序 ...
- 从零开始一步一步搭建Ubuntu Server服务器、修改数据源、安装Docker、配置镜像加速器、Compose部署Gitlab服务
场景 最终目的是使用Docker Compose部署一个Gitlab服务. 效果 注: 博客: https://blog.csdn.net/badao_liumang_qizhi关注公众号 霸道的程序 ...
- docker 搭建 web 服务环境
docker容器虽然早就听说过,但是本人还真的没去用过,刚好看到相关的文章,就分享了下,有机会可以实践下...... 做过开发的人对开发环境的安装.配置应该都不会太陌生,不管你做什么开发,对开发环境都 ...
- 使用docker搭建gitlab版本控制系统
1. GitLab 简介 GitLab 是一款基于 git 的开源代码仓库系统 GitLab 与著名的 GitHub 最大的区别就是: 允许我们搭建自己的 git 代码私有仓库,非常方便 2 ...
随机推荐
- MongoDB 4.0 开发环境搭建集群
环境准备 Liunx 服务器一台 以下示例为单机版安装集群, 没有分片 MongoDB 安装 1.下载 MongoDB tgz 安装包: 可以从下载中心下载: https://www.mongodb. ...
- echarts切换tab时,第一个图表显示,第二个图表不显示的解决办法
首先这种情况,我在网上看到了好多人问,确实也有正解,但是只是说出了其错误出现的原因,并没有给出解决方法. 我也是深受其害,所以呢,在这里记录一下,分享给还在困扰着的你们,迅速找出解决办法. 首先,我先 ...
- php原生代码实现explode函数功能
在开始代码前要先介绍几个PHP函数: explode() 把字符串打散成数组 strpos() 返回字符串在另一个字符串第一次出现的位置(对大小写敏感) strstr() 查找 ...
- T5大牛带你解析:如何实现分布式技术
1.分布式事务 2. 分布式锁 Java 原生 API 虽然有并发锁,但并没有提供分布式锁的能力,所以针对分布式场景中的锁需要解决的方案. 分布式锁的解决方案大致有以下几种: 基于数据库实现 基于缓存 ...
- 文本分布式表示(三):用gensim训练word2vec词向量
今天参考网上的博客,用gensim训练了word2vec词向量.训练的语料是著名科幻小说<三体>,这部小说我一直没有看,所以这次拿来折腾一下. <三体>这本小说里有不少人名和一 ...
- 阿里ECS配置MSSQL远程连接的坑
mssql 2012 r2远程配置的相关文档有太多: 如:sql server2012 远程访问设置 这里不做远程配置的设置介绍.这篇随笔存在的意义在于,你除了要设置服务器,还需要到阿里云控制台设置安 ...
- 大名鼎鼎的红黑树,你get了么?2-3树 绝对平衡 右旋转 左旋转 颜色反转
前言 11.1新的一月加油!这个购物狂欢的季节,一看,已囊中羞涩!赶紧来恶补一下红黑树和2-3树吧!红黑树真的算是大名鼎鼎了吧?即使你不了解它,但一定听过吧?下面跟随我来揭开神秘的面纱吧! 一.2-3 ...
- Hadoop3.2.0使用详解
1.概述 Hadoop3已经发布很久了,迭代集成的一些新特性也是很有用的.截止本篇博客书写为止,Hadoop发布了3.2.0.接下来,笔者就为大家分享一下在使用Hadoop3中遇到到一些问题,以及解决 ...
- WebApiClient的JsonPatch局部更新
1. 文章目的 随着WebApiClient的不断完善,越来越多开发者选择WebApiClient替换原生的HttpClient,本文将介绍使用WebApiClient来完成JsonPatch提交的新 ...
- 记一次按需加载和npm模块发布实践
按需加载 在使用 lodash 的时候我们可以使用这样的代码 //一 import {omit} from "lodash"; //二 import l from "lo ...