本文参考连接 https://blog.csdn.net/qq_18358973/article/details/82218823
linux 权限详解 https://blog.csdn.net/u013178472/article/details/78984183
先感慨下,最近工作不是很忙,自己买了台阿里云服务器,想着自己做个项目放上去玩玩,于是乎,就先开始研究,git 在服务器搭建仓库,并实现代码自动同步部署到web 目录下。然后通过nginx 起个服务,来访问页面。
但是这个看似简单的流程,对于我这种没搞过的人来说,在网上找了3天的教程,硬是没有一个能成功的!皇天不负有心人,今天找到一篇写的很不错的,抱着试试的心态,照着博客撸了一遍,(就是顶部的参考链接博主写的很好,很全面,很细致,包括了测试服务器,和正式服务器的自动部署)竟然成功了,为了纪念这个让人沉痛的坑我决定记录一下!也方便其他小伙伴学习!如果想要测试服务器,正式服务器全面的教程,可以点击顶部的参考链接。(不过正常情况下更新正式服务器代码,都是测试区没问题了,手动更新的)废话不多说了,开工!
服务器环境: 阿里云 centOS 7.3 64位
1,服务器上安装git
yum install git -y #安装git -y可以免去中途的一些提示
git --version #查看git版本 ,显示版本信息,说明安装成功,现在yum 源上最新的应该是1.8.3.1版本
2, 创建用于运行gitlab 的用户git
adduser git #建立git用户
groupadd git #建立git用户组
usermod -G git git #将git用户加入git用户组同时从其他组移除
usermod -a -G root git #将git用户加入root用户组,有-a参数不从其他组移除,此时git用户同时属于git组和root组
passwd git #为git用户设置登录密码(这里回车以后会提示输入两次密码,两次密码都相同的话,设置密码成功)
3,创建git仓库目录
cd /home/git #进入git用户目录(/home下的git目录是我们在第二步创建完git用户以后自动在/home目录下生成的)
#确保git目录拥有者是git用户,不是就修改chown git:git /home/git -R
mkdir test.git #创建git仓库目录
cd test.git #进入目录
git init --bare #初始化仓库目录
cd ../ #返回上层目录
chown git:git test.git -R #修改git仓库目录拥有者为git
www目录就创建完了,如果是用nginx运行的需要将nginx以git用户运行,否则可以忽略此步修改nginx.conf文件,在文件头部:
user git; #以git身份运行
4,创建服务器上web项目目录
大多数读者喜欢在www 目录下 部署web项目,我们这里就以www 目录为例
cd /home #示例是在/home目录下,读者可以自行选择
mkdir www #创建www目录用于放web项目代码
chown git:git www -R #拥有者改为git
chmod 755 www -R #权限设为755
5,在web项目目录下克隆git仓库
从这一步开始往下所有服务器端的操作都是在git用户下操作完成的
su - git #切换为git用户 (切换回root 用户时可能会要输入密码,密码就是服务器的远程连接密码。切换命令 su - root)
cd /home/www #进入www目录
git clone git@{服务器公网ip}:test test #克隆线上仓库到test目录
此时会提示输入密码,输入我们刚刚设置的git密码就可以克隆成功。但是如果没有设置git密码,或者即使设置了密码,每次连接线上git库都需要输入密码,这是一件很头疼的事,所以需要免密码连接。
生成密钥后,/home/git/.ssh/ 目录下会出现 如下两个文件
.ssh
├── id_rsa
└── id_rsa.pub #公钥 服务端需要里边内容验证连接着身份
接着修改权限:
chmod 700 /home/git/.ssh # 700是只git用户有读、写、执行权限。
6,ssh免密码验证连接
cd /home/git #进入git目录
ssh-keygen -C 'your@email.com' -t rsa #为你生成rsa密钥,可以直接一路回车,执行默认操作
此处要确保你的RSA认证是打开的!
vim /etc/ssh/sshd_config
确保文件里这三项是打开的(前边有#号的要去掉):
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
如果没有的就加上,修改完之后重启sshd:
systemctl restart sshd
同理,后边我们在客户端(自己开发的电脑上)克隆项目的时候也会让输入密码,所以我们也要在客户端生成一下rsa秘钥,(生成git 秘钥方法网上有很多,这里不再多赘述),我们需要把生成的id_rsa.pub (这个文件是公钥)里的内容拷贝出来放到接下来创建的 authorized_keys 文件中
vim /home/git/.ssh/authorized_keys #创建authorized_keys文件
###将客户端的id_rsa.pub中的内容全部粘贴进去,保存
chmod 600 /home/git/.ssh/authorized_keys #修改权限 600是只有拥有者有读写权限。
7,创建git钩子(hooks)web项目目录下代码自动同步
创建post-receive 文件,此文件作用是当用户push代码时,触发的脚本文件,通过触发此文件内的shell脚本,实现web项目目录下代码同步功能
cd /home/git/test.git/hooks #进入hooks目录
vim post-receive #创建post-receive文件
#####填入如下内容
#!/bin/bash
DIR=/home/www/test #指定代码自动检出目录
git --work-tree=${DIR} clean -fd
git --work-tree=${DIR} checkout --force #直接强制检出
DIR 变量对应的目录就是 放置web项目代码的目录,也是线上git仓库的工作区
修改权限:
chmod +x post-receive #赋予执行权限
到此为止,服务器端的git仓库,和web项目目录下代码同步功能就算搭建完了,接下来我们需要在客户端克隆一份,然后提交代码验证一下是否成功
客户端先cd 到自己的工作目录下,然后克隆服务器端git仓库代码
git clone git@192.168.0.103:/home/git/test.git #192.168.0.103 是服务器的公网ip ,这里是随便写的,请自行改正
这里克隆的时候应该不会提示输入密码了,因为在第6步 的时候已经把客户端的秘钥加入到 服务器的authorized_keys 文件中了,
如果这里还是提示要输入密码,请仔细检查authorized_keys 文件中的公钥,和客户端的公钥是否一致,公钥正常情况下都是一行代码的,不会换行,在复制过去的时候有可能会换行,换行边界出现空格等问题,如果都没问题,就要仔细核对一下上边的这些步骤!
如果都没问题就继续往下走:
测试代码是否同步
在客户端创建一个index.html 文件,里边随便写点代码,然后
git add .
git commit -m "第一次提交"
git push origin master
push成功以后,去服务器上的/home/www/test 目录下查看是否有index.html 文件,并vim index.html 打开此文件查看内容是否完整。
至此,整个代码同步功能就完成了!以后就不用再去服务器端的web项目目录下手动去pull 代码了
下一篇文章会记录服务器端nginx 的安装和简单配置,通过nginx 服务实现 静态html 文件通过公网ip 方式在浏览器打开
服务器nginx 简单安装配置 https://blog.csdn.net/shi851051279/article/details/95379232