前言:我们现在搭建远程仓库,常见的,是去github、gitlab、gitee等这类第三方平台网站上进行部署。咱就顺道说说这三个的区别。
github 是面向全世界的,由国外开发的,基本上放在上面都是开源的,私人仓库好像是要收费的;
gitlab 同github一样,但是他的私人仓库是免费了,基于github还增加了许多新特性;还有一点是,他支持部署在自己的服务器上;
gitee 是国内开发的,也是支持开源仓库和私有仓库,和github一样,是需要部署在这个平台上的。
gitee相信大家使用的会比较多,因为是国内开发的,访问效率是会比github快的,但因为他也是需要部署在第三方平台上,就等于是,我们的项目代码,这些资源都存到别人哪里去了,有时候考虑到安全性、隐私性,所以gitlab的优势就出来了。因为gitlab是可以部署在我们自己的服务器上。可以理解为,我们使用的依然是git,不过安装了gitlab官网的软件,我们可以在自己的服务器上视图化来进行管理,就跟"宝塔"是一样的。
但是!!!
咱们今天不讲gitlab,而是纯git来部署远程仓库。
场景:
假设,我们开发一个项目,我们一般都是在本地敲代码的,完成后再push上去,那么push的远程仓库,就需要搭建了。再假设,我们不使用上面的三个,而是纯git来部署。
解释:为什么不使用上面三个,而是纯git来部署呢。因为我们不想托管在第三方平台,而是在自己服务器上部署,这样资源就不会泄露出去。
我们搭建远程仓库,因为使用的是linux操作系统,所以需要了解并会一些Linux的命令,因为本次流程会涉及。
来啦来啦,正题来啦!
服务器是linux,服务器是linux,服务器是linux,三遍 三遍 三遍!!!
linux版本信息:
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.9.2009 (Core)
Release: 7.9.2009
Codename: Core
git版本信息:
git version 2.38.1
1. 创建git账号
1) 使用 useradd 命令创建一个账号
useradd git
如果什么都没提示,那就是创建成功。如果该账号此前已经创建过,那么可能会提示:
(1) useradd: warning: the home directory already exists. 主目录已存在
(2) Not copying any file from skel directory into it. 没有复制
(3) Creating mailbox file: File exists 邮箱文件已存在
如果这个账号以前创建过,并且删除过,提示这些也就没关系,也是正常创建账号,只是会提示此前已经有过该账号的信息。
2) 使用 cat /etc/passwd 就能看见新创建的账号
cat /etc/passwd
会显示出所有的账号信息,我们是刚创建新的账号,所以会在最后一行看见。
2. 配置SSH
备注:这里的配置很重要,请不要随意删除文件修改内容等
1) 输入命令进入 ssh文件
#进入ssh文件夹
cd /etc/ssh/
#显示所有文件/文件夹
ls
2) 在这里我们能看见一个"sshd_config"文件,使用vim 将其打开并编辑
vim sshd_config
修改配置
StrictModes no #由yes改为no
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys #这里要取消注释
我的服务器修改前,记得是:
StrictModes 默认为 yes,默认情况下是注释掉了的,我们将其释放并改为no
RSAAuthentication 是没有的,需要我们直接添加
PubkeyAuthentication 默认是 yes 不过是注释了的,需要释放
AuthorizedKeysFile 默认有可能注释了,需要释放
3. 重启SSH
第二步配置做完后,需要重启SSH配置才能生效
注意呀!一定要检查好修改的配置内容,检查好 检查好 检查好!
重启SSH命令:
service sshd status 查看状态
service sshd restart 重启服务
status 查看状态,看到 Active: active (running) 这类时,代表正在运行中。
restart 重启服务,看到 Redirecting to /bin/systemctl restart sshd.service 就代表重启成功。
然后再 status 看一下状态,可以看到 Active: active (running) 后面会跟一个重新运行的时间,是当前的时间就是OK的,代表重启成功。
4. AuthorizedKeysFile 中的 .ssh/authorized_keys
从第二步修改配置时,最后有一个 AuthorizedKeysFile,这个是"授权密钥文件",配置文件中能看到,它是放在 ".ssh/authorized_keys" 这个文件里的。
这里要注意了,我们使用的当前账号,一般情况下,都是root,所以这个文件的路径在:root/.ssh/authorized_keys
但是我们是创建了一个git账号来玩的,所以就不能在root的路径里,而是要去找到 git账号的路径。
返回到根目录,我们查看,使用 "ls"命令查看
cd / 返回根目录
ls 查看当前位置下的目录
我们就能看到,有一个 "home" 文件夹,进入 home ,再使用 ls,能看到我们之前创建的 git 账号文件夹。
这个 git 文件夹下,基本上是空目录,"其实使用 ls -al 命令还能看到一些隐藏文件,但我们并不需要"
返回到上面说的,AuthorizedKeysFile 文件,它指向的是文件是放在 ".ssh/authorized_keys", 所以我们需要在 git 文件夹里,创建 ".ssh"文件夹,然后在 ".ssh"文件夹里再创建 "authorized_keys" 文件
先用 pwd 看一下我们目前所处的位置:
pwd
使用 mkdir 创建 ".ssh"文件
再使用 ls -al 查看
mkdir .ssh 创建目录
ls -al 查看
进入 ".ssh"目录
cd .ssh 进入目录
pwd 查看当前位置
创建文件 "authorized_keys"
touch authorized_keys 创建文件
ls 查看
文件创建好了之后,我们可以先消停一下了,先喝口水。。。
5. 文件权限
回到git目录下,我们能看到,.ssh 这个目录是root创建的,权限也是root的
但它应该是git账号的,所以我们需要把它指定给git,".ssh"目录的权限得是700,并且需要指定给git用户,命令:
chown -R git:git .ssh 指定给git
chmod -R 700 .ssh 修改目录权限
修改后,就能看到,目录权限和用户跟之前是不同的。
修改了".ssh"目录之后,"authorized_keys"文件也需要修改,它是600的权限
cd .ssh 进入目录
ls -al 查看
能看到,用户已经是git了,并且权限也是700,因为我们上面使用 chown -R,chmod -R,这里的"-R" 代表当前目录及下面的所有子目录文件全都修改。
权限是700,需要修改为600:
chmod 600 authorized_keys 修改文件权限
ls -al 查看
权限和之前的就不同了,成功。
6. 搭建远程仓库(裸仓库)
假设我们在这个目录下搭建远程仓库
先创建一个 git 目录,主要是做好一个分类。
mkdir git 创建目录
ls 查看
然后我们进入 git 目录
cd git 进入目录
开始搭建一个远程仓库,也叫"裸仓库"
git init --bare project.git
这样也就搭建好了一个远程仓库,可以进入这个目录看一下
cd project.git
ls
这个远程仓库也就是"裸仓库",它不能进行 push 和 pull,可以理解为一个不能操作的"仓库",它只进行存储,不进行其他的操作。
比如,lucky同学和baby同学,lucky今天更新了代码,push上去了,就会进入到这个仓库,baby同学就可以进行pull 获取到这些内容,而baby同学push上去后,lucky同学也能pull。
如果这个时候,我们的项目,还有开发环境、测试环境、生产环境,这三个环境,也只是pull 就可以了,它们pull的数据,其实也是从这个"裸仓库"中拿到的。
到这里其实也就差不多完了。。。 但是还有一点,权限呀~~~
这里我们能看到,因为是root账号创建的,所以它的权限是给的root,而我们是用的git账号,所以要将这个目录的权限给到git
chown -R git:git project.git
7. 服务器上clone仓库
好了,我们的远程仓库搭建好了,那么我们现在就需要 git clone ,将这个远程仓库进行关联。
因为我们这个仓库,是部署在我们服务器上的,如果我们的项目,也在这台服务器上,那么就比较简单了。
先回到"wwwroot"目录,跟 git 目录同级的
然后直接来一手 "git clone" 让它防不胜防
git clone /www/wwwroot/git/project.git 克隆
就能看到,clone 成功,也出现了该目录,我们进入 project 目录看一下
因为是一个空的仓库,所以我们需要进行一次操作:
touch README.md 创建文件
git add . 提交到缓存区
git commit -m "first commit" 提交到本地库
如果在 commit 时,发生以下错误,是因为我们git还没有设置 用户、邮箱
那我们就需要设置以下 git的用户邮箱了:
git config --global user.email "you@example.com" 邮箱
git config --global user.name "Your Name" 用户
git config -l 查看
然后我们再进行 commit 试一下呢
git commit -m "first commit"
好的,成功了!!!
不过这里也只是本地库,所以我们需要补充,提交到远程仓库里,使用下面的命令:
git push origin 提交到远程
git branch -a 查看本地分支、远程分支
好了 大功告成!!!!!
等等喔,上面只是说服务器上的部署好了,那我们本地的呢???
8. 本地clone远程仓库
其实我们本地跟上面的步骤是一样的,唯独要注意两点:
1). 因为不是同一个环境下,所以我们想 clone 这个远程仓库,需要提交我们本地的 ssh 公钥。一般存放在C盘/用户/.ssh
2). git clone 时,就不能直接像上面那样 "/www/wwwroot",因为不是同一个环境下,所以我们需要指定服务器的IP,或者域名
先来处理第一点
我这边是Windows11系统,所以就拿Windows10 / Windows11 举例,在 "C:\Users\我的\.ssh" 下找到 "id_rsa.pub",打开文件,里面的内容进行复制 (如果本地没有ssh,要么是没有找到,要么是没有生成,需要去了解下生成ssh)
然后我们回到部署的远程仓库服务器里,找到这个文件
使用 vim 进行编辑,将我们复制的公钥放进去
vim authorized_keys 编辑文件
这里我没有附图说明具体操作,因为是隐私操作。其实也就是将Windows中我们的ssh公钥 放进去,保存好就行。
接着第二点
在本地时,我们打开 "git Bash here" 或者 cmd 终端,输入:
git clone git@127.0.0.1:/www/wwwroot/git/project.git
"127.0.0.1" 请将这个替换成我们的服务器IP或者域名。
拉取成功
可以看到,在linux服务器上 commit 过的记录,这边也有。
撒花~