之前在 服务器都有啥用处 讲了服务器都有什么用。
- 搭建git私服
- 文件存储服务
- 网站
- 学linux
这次卡哥就先带大家部署一个Git 私服。
其实我在两年期就写了这篇文章,当时发布在Gitchat上,现在重新润色再分享出来。
注意这个部署过程需要点linux基础,如果一点linux基础都没有,命令行也没敲过,建议先学学Linux在看本文哈。
前期准备
为什么要搭建 Git 私服
很多同学都问,文章、文档、资料怎么备份啊,自己电脑和公司(或者实验室)电脑怎么随时同步资料啊等等,这里我写一个搭建自己的 Git 私服的详细教程。
为什么要搭建一个 Git 私服呢,而不是用 GitHub、Gitee 免费的私有仓库,有以下几点:
- GitHub、Gitee 私有仓库都是限流的,文件一旦多了,或者有图片文件,git pull 的时候半天拉不下来
- 自己的文档难免有自己个人信息,放在 GitHub 心里也是担心的
- 私有仓库可以N多个人合作使用,不受限制(这个一般同学用不上)
网上可以搜到很多 Git 搭建,但是说的模棱两可,而且有的直接是在本地搭建 Git 服务,既然是备份,搭建在本地哪还有备份的意义,一定要有一个远端服务器呀。
如何找到可以外网访问服务器
有的同学问了,自己的电脑就不能作为服务器么?
这里要说一下,安装家庭带宽,运营商默认是不会给我们独立分配公网 IP 的。一般情况下是一片区域公用一个公网 IP 池,所以外网是不能访问到在家里我们使用的电脑的。
除非我们自己去做映射,这其实非常麻烦,而且公网 IP 池是不断变化的。辛辛苦苦做了映射,运营商给 IP 一换,我们的努力就白扯了。
那我们如何才能找到一个外网可以访问的服务器呢,此时云计算拯救了我们。推荐大家选一家云厂商(阿里云、腾讯云、百度云都可以)在上面上买一台云服务器。
如果大家不知道怎么买,可以在公众号:代码随想录,后台回复:服务器,我会给你购买的详细教程。
云厂商经常做活动,如果从来没有买过云服务器的新用户更便宜,强烈推荐一起买个三年,因为续费非常贵。
买云服务器的时候推荐直接安装 CentOS 系统。(我们接下来要搭建git私服)
有自己云服务器和一个公网 IP 真的是一件非常非常幸福的事情,能体验到自己的服务随时可以部署上去提供给所有人使用的喜悦。
外网可以访问的服务器解决了,接下来就要部署 Git 服务了。
本文将采用 CentOS 系统来部署 Git 私服。
开始搭建
登录服务器
上次组织的免费领阿里云服务器活动中,很多同学可能卖完,都不知道这个服务器要怎么登录。甚至找不到自己的服务器在哪里。
我特意也去买一个阿里云服务器来给大家做一个示范(卡哥就是这么负责 哈哈)
登录阿里云账户,控制后台,可以找到自己的服务器:
点进去这里,就可以看到服务器信息:
找到自己的公网IP,就用用来登录了。
第一次登录,记得重置一下root密码在上图中已经说明。
然后本地安装一个终端登录软件,我是Mac,用的是iterm2,如果windows系统的话,可以用xshell。
在命令行执行:
- ssh root@120.77.8.66
输入密码就可以登录了
就是这样:
服务器端安装 Git
如果自己登录的不是root用户,先切换至 root 账户:
- su root
看一下服务器有没有安装 Git,如果出现下面信息就说明是有 Git 的:
- [root@instance-5fcyjde7 ~]# git
- usage: git [--version] [--help] [-c name=value]
- [--exec-path[=
]] [--html-path] [--man-path] [--info-path] - [-p|--paginate|--no-pager] [--no-replace-objects] [--bare]
- [--git-dir=
] [--work-tree=] [--namespace=] -
[] - ·············
如果没有 Git,就安装一下,yum 安装的版本默认是 1.8.3.1:
- yum install git
安装成功之后,看一下自己安装的版本:
- git --version
服务器端设置 Git 账户
创建一个 Git 的 Linux 账户,这个账户只做 Git 私服的操作,也是为了安全起见。
如果不新创建一个 Linux 账户,在自己的常用的 Linux 账户下创建的话,哪天手抖 来一个 rm -rf * 操作,数据可全没了。
这里 Linux Git 账户的密码设置的尽量复杂一些,我这里为了演示,就设置成为 'gitpassword'。
- adduser git
- passwd gitpassword
然后就要切换成 Git 账户,进行后面的操作了:
- [root@instance-5fcyjde7 ~]# su - git
看一下自己所在的目录,是不是在 git 目录下面:
- [git@instance-5fcyjde7 ~]$ pwd
- /home/git
服务器端密钥管理
创建 .ssh 目录,如果 .ssh 已经存在了,可以忽略这一项。
为啥用配置 SSH 公钥呢,录友们记不记得我急使用 GitHub 上传上传代码的时候也要把自己的公钥配置上 GitHub 上。
这也是方面每次操作 Git 仓库的时候不用再去输入密码。
- cd ~/
- mkdir .ssh
进入 .ssh 文件下,创建一个 authorized_keys 文件,这个文件就是后面就是要放我们客户端的公钥。
- cd ~/.ssh
- touch authorized_keys
别忘了 authorized_keys 给设置权限,很多同学发现自己不能免密登录,都是因为忘记了给 authorized_keys 设置权限:
- chmod 700 /home/git/.ssh
- chmod 600 /home/git/.ssh/authorized_keys
接下来我们要把客户端的公钥放在 Git 服务器上,我们在回到客户端,创建一个公钥。
在我们自己的电脑上,有公钥和私钥。两个文件分别是:id_rsa 和 id_rsa.pub。
- 如果是 Windows 系统公钥私钥的目录在 C:\Users\用户名.ssh 下。
- 如果是 Mac 或者 Linux, 公钥和私钥的目录这里 cd ~/.ssh/, 如果发现自己的电脑上没有公钥私钥,那就自己创建一个。
创建密钥的命令:
- ssh-keygen -t rsa
创建密钥的过程中,一路点击回车就可以了。不需要填任何东西。把公钥拷贝到 Git 服务器上,将我们刚刚生成的 id_rsa.pub,拷贝到 Git 服务器的 /home/git/.ssh/ 目录。
在 Git 服务器上,将公钥添加到 authorized_keys 文件中:
- cd /home/git/.ssh/
- cat id_rsa.pub >> authorized_keys
如何看我们配置的密钥是否成功呢, 在客户点直接登录 Git 服务器,看看是否是免密登录:
- ssh git@git 服务器 ip
例如:
- ssh git@127.0.0.1
如果可以免密登录,那就说明服务器端密钥配置成功了。
服务器端部署 Git 仓库
我们在登录到 Git 服务器端,切换为 Git 账户。如果是 root 账户切换成 Git 账户:
- su - git
如果是其他账户切换为 Git 账户:
- sudo su - git
进入 git 目录下:
- cd ~/git
创建我们的第一个 Git 私服的仓库,我们叫它为 world 仓库。那么首先创建一个文件夹名为 world.git,然后进入这个目录。
有同学问,为什么文件夹名字后面要放 .git, 其实不这样命名也是可以的。但是细心的小伙伴可能注意到,我们平时在 GitHub 上 git clone 其他人的仓库的时候,仓库名字后面,都是加上 .git 的。
例如下面这个例子,其实就是 GitHub 对仓库名称的一个命名规则,所以我们也遵守 GitHub 的命名规则。
- git clone https://github.com/youngyangyang04/leetcode-master.git
所以我们的操作是:
- [git@localhost git]# mkdir world.git
- [git@localhost git]# cd world.git
初始化我们的 world 仓库:
- git init --bare
如果我们想创建多个仓库,就在这里创建多个文件夹并初始化就可以了,和 world 仓库的操作过程是一样一样的。
现在我们服务端的 Git 仓库就部署完了,接下来就看看客户端,如何使用这个仓库呢。
客户端连接远程仓库
我们在自己的电脑上创建一个文件夹也叫做 world 吧。
其实这里命名是随意的,但是我们为了和 Git 服务端的仓库名称保持同步。这样更直观我们操作的是哪一个仓库。
- mkdir world
- cd world
进入 world 文件,并初始化操作:
- cd world
- git init
在 world 目录上创建一个测试文件,并且将其添加到 Git 版本管理中:
- touch test
- git add test
- git commit -m "add test file"
将次仓库和远端仓库同步:
- git remote add origin git@git 服务器端的 ip:world.git
- git push -u origin master
此时这个 test 测试文件就已经提交到我们的 Git 远端私服上了。
Git 私服安全问题
这里有两点安全问题。
Linux Git 的密码不要泄露出去
否则,别人可以通过 ssh git@git 服务器 IP 来登录到你的 Git 私服服务器上。当然了,这里同学们如果买的是云厂商的云服务器,如果有人恶意想通过尝试不同密码链接的方式来链接你的服务器,重试三次以上,这个客户端的 IP 就会被封掉,同时邮件通知我们可以 IP 来自哪里。
所以大可放心,密码只要我们不泄露出去,基本上不会有人同时不断尝试密码的方式来登上我们的 Git 私服服务器。
私钥文件 id_rsa 不要给别人
如果有人得到了这个私钥,就可以免密码登录我们的 Git 私服上了,我相信大家也不至于把自己的私钥主动给别人吧。
总结
这里就是整个 Git 私服搭建的全过程,涉及到的安全问题我也给大家列举了出来。
我自己是一共搭建了三个私有仓库,一个放平时笔记,文章,杂七杂八,一个放刷题笔记,一个放工作资料。
用来备份,和 两个电脑文件夹同步,真的很方便,大家可以用起来。