开发app
项目的时候,我们的接口是多人开发的。但是app
调用接口又必须固定一个域名。为了多人协作开发。所以使用了webhooks
的方法来运维项目。这个方法真的非常的方便。下面就和大家详细讲解一下
使用环境
一般的APP开发都是前后端分开的。前端工程师专门做前端的事情,后端工程师专门为前端提供接口。前端工程师看我们的接口文档来进行开发。这样就是有效的配合完成。
但是问题来了。如果只有一个后端工程师的话,我们可以有很多解决办法让我们的接口可以直接放前端访问。但是我们多人开发的时候怎么办啦?我们之前用的是ftp在线同步服务器上面的文件,这样的话,如果A和B同时需要修改同一个文件,那么就会后提交者就会把先提交者的代码给替换了。这样先提交者代码又不见了。因为这个问题一定要解决。
这里就需要用到webhooks
的技术了。
环境需要
- gitee账号
- 项目部署服务器(linux centos7)
实现步骤
gitee
创建项目,并配置webhooks
- 服务器进入
www
用户 - 生成一对秘钥
- 克隆项目到网站目录
- 编写
php
执行文件 - 本地克隆项目
- 测试推送,查看网站是否有变化
实现详细过程
创建webhooks
这里需要输入一个
URL
地址。和一个密码。这个密码不是必须的。虽然我们不知道这个密码有什么用。等一下我们测试一下就知道了。
服务器生成秘钥对
首先我们要搞清楚,你的Nginx
到底是被哪个用户来执行的。
1
2
3
4
5
# 查询配置文件路径
find / -name nginx.conf
# 打印查询文件
more /www/server/nginx/conf/nginx.conf
通过查看配置文件,我知道我的执行用户是
www
然后需要从root
进入到www
用户。生成一对秘钥
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 编辑用户文件
vim /etc/passwd
# 查询www用户在哪一行
# 在命令模式下执行
/www
# 查询到了这样的结果。则表示www用户不准登录
# www:x:1000:1000::/home/www:/sbin/nologin
# 修改www用户为可登陆用户
# 按i 进去输入模式
# 将/sbin/nologin 改为 /bin/bash
# www:x:1000:1000::/home/www:/bin/bash
# 按esc退出编辑模式
# :wq 保存退出
# 切换到www用户
su www
# 创建秘钥对
ssh-keygen -t rsa -C "811403726@qq.com"
# 狂按回车就可以了
# 查看公钥
cat ~/.ssh/id_rsa.pub
照着上面的操作。我们得到了一串字符串。这是公钥。我们需要在项目的ssh里面添加这一条公钥。
将公钥粘贴在这里
服务器克隆项目
然后在www
用户下。将这个项目克隆下来
1
2
3
4
git clone git@gitee.com:Z_Chen/test.git
# 将文件夹的权限修改一下
chmod -R 755 test/
现在已经不需要在www
用户里面去了。回到我们的root
1
2
su
# 输入密码就可以回到root
修改/etc/passwd
文件,将www
用户改为不登录
1
2
3
4
vim /etc/passwd
# 改为
# www:x:1000:1000::/home/www:/sbin/nologin
编辑webhooks
的请求文件
在https://test.zrongdong.com/
网页创建test.php
的文件。然后接受参数。并将参数保存起来
1
2
3
$f = fopen('log.txt', 'a');
fwrite($f, file_get_contents('php://input') . PHP_EOL);
fclose($f);
点击测试
解析json
数据发现,刚才我们输入的password
就携带在json
数据的password
里面。我们就可以通过这个来做验证,是否为我们gitee
的请求数据
这里我只是提供一个方法。如果你用的不是
gitee
。用的是github
或者gitlab
。都可以通过这个方法来找出你出入的那个密码到底被放在哪里用来请求你的。
然后你可以用这个password
来做安全验证。下面我就不做了。简单点
1
2
exec("cd /www/test && git fetch && git reset --hard origin/master", $array);
print_r($array);
现在。你再测试webhooks
。然后php
就会帮你自动的将git
上面的最新版本给拉下来。也不会出现什么冲突的操作。
以后你的每一次push
都会在服务器上面自动部署了。是不是非常方便
总结
学会使用这个方法,会让你的项目部署事半功倍。以后部署项目就不用这么麻烦了。团队协作开发也更加方便了。
参考文章
在
原文声明
作者:张晨
email:93593814@qq.com