前言
因为目前我实习的项目经常和仓库,docker,gitlab打交道,同时为了巩固这些相关知识,特此开这个专栏。一方面是做记录,另一方面就是回忆,应该会分2-3期。
目的:如何快速的部署个人的仓库,同时因为是部署到docker上的,也方便迁移和部署。
本期目的:
1.了解git是什么,因为git是一切的前提,git是如何进行通信,这部分应该比较快的过一遍
2.如何安装gitlab,同时通过网页进行访问
3.如何生成一个上述的镜像。
1.git是什么?
1.1定义
-
Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
-
我们之前背过的八股也知道,git其实就是个分布式管理仓库的一个系统,除了git其实还有svm也是进行代码管理,但是因为不是分布式管理,也逐渐被淘汰。还有一点八股常背就是,git通过乐观锁的思想来实现冲突控制。
1.2 启动环境
- 这里我采用docker的方式,来启动两个容器,一个作为git server,一个作为git client,命令如下,用ubuntu的也行,centos也行,甚至gitlab也提供一个自身的镜像。
ps:当然我这里为了模拟从0开始,就用ubuntu作为我的底层image。后续也可以将命令集成到dockerfile来build image,这里我为了集图就一步步来了
# 1.如果没有docker环境先预装一个,这里我省略了,直接拉取ubuntu镜像
docker pull ubuntu
# 2.起两个容器
docker run -it -p 12345:80 --privileged --name git-server1 ubuntu /bin/bash
docker run -it --name git-client1 ubuntu /bin/bash
启动成功,这里的参数就不解释了哈。-p是为了后面gitlab服务器启动之后将80端口,通过nginx转发到宿主机上进行访问。
# 1.update
apt-get update
# 2.安装
apt-get install vim git -y
# 3. check
git version #显示有东西就是安装成功
3.在服务器端git-server1的容器进行操作,类似创建一个服务器上的仓库,来给客户端进行访问和拉取
- 这一步主要是为了设置用户组,因为一般我们在服务器会进行权限划分,一般不会在root用户下进行操作,这里我设置一个叫git的用户,同时创建了一个名叫example的仓库
useradd git
passwd git
mkdir /git-root/
cd /git-root/
git init --bare example.git
- 这一步,是提权给git用户组,因为我之前都是在root用户下操作,这里也是我之前经常犯错的点,用户权限不对就可能导致一些问题。
chown -R git:git example.git/
- 这一步,是进入git用户,生成密钥(也许是公钥?),这里是不是很熟悉,https的相关知识,需要注意的点是,通过useradd 方式是不会生成用户目录的,需要手动创建
mkdir /home/git
chown -R git:git git/
mkdir /home/git/.ssh
su - git #不报错,什么都不显示就表示进入了,因为linux的思想就是不显示就是成功
ssh-keygen -t rsa
成功!
- 复制公钥文件多一份,叫
authorized_keys
,这里主要是为了给后面客户端进行免密登录用的
#如果还在git下,切换回root
exit
cd /home/git/.ssh
cp id_rsa.pub authorized_keys
apt-get install openssh-server
service ssh status
service ssh start
4.客户端操作,客户端就简单了,但是还是会有一点坑
- 生成密钥
# 需要知道两台容器的ip地址,因为一般的ubuntu纯净版是没有的,需要自己安装
apt-get install net-tools -y
ifconfig -a
ssh-keygen #一路回车
ssh-copy-id git@{服务端ip}
#输入密码
5.拉仓库
git clone git@{server ip}:/git-root/example.git
配置用户名等信息,主要就是name和email,然后就是老生常谈的add commit push
git config --global user.name "test"
git config --global user.email "test@test.com"
可以看到,新的push已经有了,但是我很奇怪的是,服务端竟然没办法感知,这个我后面在研究一下
小结:学会了如何部署一个本地的简单git!(后面会补充如果再加一个client2,看能不能感知到这次的变化)
2.gitlab部署
先咕咕,后面补