每个人在通往牛逼的道路上总是充满着傻逼
——陈师傅
在服务器上搭建 Git(需要提前安装Git)
1.首先创建一个git用户和git组
[root@docker ~]# groupadd git
[root@docker ~]# useradd -ggit git
禁止 git 用户 ssh 登录服务器,修改/etc/passwd文件 ,git-shell 是git的受限 shell 工具,你可以方便地将用户 git 的活动限制在与 Git 相关的范围内。该工具随 Git 软件包一同提供。
将git:x:1001:1002::/home/git:/bin/bash修改为
git:x:1001:1002::/home/git:/usr/bin/git-shell
这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。
2.创建Git版本仓库
[root@docker ~]# cd/home/git/
[root@docker git]# mkdirstudy.git
[root@docker git]# git init--bare study.git
这一步是将study.git初始化成git裸仓库,之所以叫裸仓库是因为这个仓库只保存git历史提交的版本信息,而不允许用户在上面进行各种git操作,裸仓库没有工作区,服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区。
[root@docker git]# chown -Rgit:git study.git
把仓库所属用户改为git
3.克隆远程仓库
git clone git@173.168.16.222:/home/git/study.git
如果SSH用的不是默认的22端口,则需要使用以下的命令
git clone ssh://git@173.168.16.222:500/home/git/study.git
注意:这里我在克隆时出现了一点错误,后面的路径写错了,git用户没有权限访问远程仓库都会报错,出现下面的报错信息建议检查以上两点是否有错误
4.创建并配置密钥登陆
创建密钥是为了在进行git clone操作的时候免密登入,
首先编辑ssh的配置文件/etc/ssh/sshd_config添加如下三行内容,修改完成之后重启ssh服务:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile.ssh/authorized_keys
管理 Git 服务的用户是 git,所以实际存放公钥的路径是/home/git/.ssh/authorized_keys
在git服务器上创建存放公钥的目录
[root@docker git]# mkdir.ssh
[root@docker git]# chmod 700.ssh
[root@docker git]# touch.ssh/authorized_keys
[root@docker git]#chmod 600.ssh/authorized_keys
最后在客户端生成密钥对并将公钥传到服务端的/home/git/.ssh/authorized_keys文件里,使用ssh-keygen生成密钥对,可以使用scp命令将生成的公钥传到服务端
这样Git服务器就搭建完成了
在centos7上搭建GitLab
1.安装所需依赖环境
[root@localhost ~]# yum -yinstall policycoreutils openssh-server openssh-clients postfix
2.启动postfix并让他开机自启
[root@localhost~]#systemctl enable postfix && systemctl start postfix
3.下载并安装gitlab
[root@localhost ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-8.9.5-ce.0.el7.x86_64.rpm
[root@localhost ~]# rpm -igitlab-ce-8.9.5-ce.0.el7.x86_64.rpm
4.修改配置文件,定义服务器ip
Gitlab的配置文件位于/etc/gitlab/gitlab.rb,因为gitlab是由Ruby语言编写的,所以配置文件后缀是rb,将配置文件里的external_url项修改为自己的ip,比如:external_url 'http://192.168.188.222’
5.重置gitlab
[root@localhost ~]# gitlab-ctlreconfigure
运行此命令其实就是运行了一个自动化配置的脚本,它会自动安装gitlab需要的组件
[root@localhost ~]#gitlab-ctl restart
重启之后可以看到相关的组件已经安装完成并成功运行
6.进入gitlab
输入ip地址即可进入gitlab页面,他会提示你去设置一个用于登录的密码
这样Gitlab的搭建就完成了
Gitlab的使用
单击屏幕右上角的小扳手可以进入管理区域,单击‘NewGroup’可以创建一个组,公司里的一个项目可能会有好几个开发团队来进行开发,可以为每一个团队创建一个项目组
在‘Group path’栏里可以输入组的路径,在‘Visibility Level’栏里可以设置安全级别,第一级private表示只有授权过的人才能访问项目,第二级internal表示只有能登陆gitlab的人才能够访问项目,第三级public表示所有能访问到gitlab上的人才能访问项目,点击左下角‘Create group’即可创建组
单击‘Add users to group’可以将用户添加进组里
再次单击右上角的小扳手就又回到了管理区域,单击‘NewUser’可以添加用户,在‘Account’处可以设置用户信息,在‘Access’处可以设置用户的权限,比如‘Project limit’可以设置该用户允许创建私人库的最大数目,‘Can create group’表示该用户是否可以创建组,‘Admin’表示是否将其设置为管理员,单击左下角‘Create user’即可创建用户
我在这里创建了两个用户,一个叫dev,另一个叫ops,现在我要把这两个用户都加到刚才新建的组里,单击‘Groups’下的数字1就可以进入新建的组里,在右边表单的第一列可以选择要添加的用户,第二列选择用户的权限,单击‘Add users to group’即可添加用户到组,下面完整列出了Guest,Reporter,Developer,Master,Owner对应的权限。
Guest |
Reporter |
Developer |
Master |
Owner |
|
Create new issues |
* |
* |
* |
* |
* |
Leave comments |
* |
* |
* |
* |
* |
Pull the project code |
* |
* |
* |
* |
|
Download a project |
* |
* |
* |
* |
|
Create code snippets |
* |
* |
* |
* |
|
Create new merge requests |
* |
* |
* |
||
Push changes to nonprotected branches |
* |
* |
* |
||
Remove nonprotected branches |
* |
* |
* |
||
Add tags |
* |
* |
* |
||
Write a wiki |
* |
* |
* |
||
Manage the issue tracker |
* |
* |
* |
||
Add new team members |
* |
* |
|||
Push changes to protected branches |
* |
* |
|||
Manage the branch protection |
* |
* |
|||
Manage Git tags |
* |
* |
|||
Edit the project |
* |
* |
|||
Add deploy keys to the project |
* |
* |
|||
Configure the project hooks |
* |
* |
接下来开始创建一个新项目,再次点击小扳手图标进入到管理区域,单击‘New Project’创建一个新项目,单击‘Project owner’可以选择一个项目的属主,在‘Project name’一栏设置项目名称,‘Visibility Level’会自动继承属主的权限,单击左下角的‘Create project’可以创建新项目
可以看到新项目已经创建成功了
对gitlab进行权限的配置,单击左侧菜单栏打开侧边栏,找到‘Profile Settings’单击‘SSH Keys’为开发者添加ssh-key,添加ssh-key可以使开发者下的所有项目都赋予可以让开发者上传的权限,如何生成密钥对我在搭建Git服务器那一部分中提到过,进入/root/.ssh/目录下查看公钥的内容,并将内容复制到gitlab上,单击‘Add key’即可成功添加ssh-key
添加完ssh-key我们进行clone测试
[root@localhost ~]# gitclone git@192.168.188.222:gitlab1/project1.git
打开新建的项目可以看到项目的概览,项目会自动继承所属组里的用户权限,当然也可以单独在项目那里添加用户,在project members处单击‘Manage Access’可以为项目单独添加用户并授权,可以看到这个项目的组里有了两个用户,一个是超级管理员,一个是我在组里添加的用户dev,而在项目用户那里我新添加了一个ops用户
新建一次提交
在所在的项目页面单击右上角的加号按钮,有一个‘Newfile’选项,单击它会创建一个新文件,按照表单输入文件名,文件内容,提交描述信息,单击‘CommitChanges’就可以新建一个提交了,初次提交会创建一个master的主分支,可以看到我这里提交了一个README的文件
在客户端使用git pull测试,可以看到目录下面多了一个README文件
Gitlab备份
首先编辑配置文件/etc/gitlab/gitlab.rb,找到配置文件里的备份目录,存在于201行,这行默认是注释的,需要取消注释,备份文件路径默认存在于/var/opt/gitlab/backups目录,当然也可以在配置文件中自己定义备份文件的路径,除此之外还要设置备份文件存在时间,默认是7天,也就是604800秒,关于备份文件存在时间的配置在配置文件的204行,也是需要取消注释的,修改完之后保存退出
运行gitlab-ctl reconfigure重置gitlab的配置,不然修改的配置不会生效,重置完之后重启
运行下面的命令即可将gitlab进行备份
[root@localhost gitlab]#/usr/bin/gitlab-rake gitlab:backup:create,如果想让gitlab定时备份,可以将命令放到cron定时任务里去
我们可以进入备份目录里查看备份的结果
Gitlab恢复
在恢复之前需要停止数据写入,运行下面的两个命令
[root@localhostbackups]# gitlab-ctl stop unicorn
[root@localhost backups]# gitlab-ctl stop sidekiq
恢复命令如下
[root@localhost backups]#gitlab-rake gitlab:backup:restore BACKUP=1533281464 #BACKUP后面加的是备份文件前面的时间戳
恢复完成后重启之前停掉的那两个服务
[root@localhost backups]#gitlab-ctl start unicorn
[root@localhost backups]# gitlab-ctlstart sidekiq
也可以重启所有服务
[root@localhost backups]#gitlab-ctl restart
这里我之前把项目删除了,进行恢复测试了一下,项目成功恢复
如有问题或者建议欢迎各位在下方或者GitHub上评论
参考链接:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770360579bc4b458f044ce7afed3df579123eca000
如果想要获取全部笔记可以访问https://github.com/chances-for-those-who-have-prepared/study/tree/master/git或者阅读原文下载