### 整体流程
>1、在服务器上生成部署公钥
>2、在github上对项目做部署配置
>3、配置域名,初次拉取代码到服务器
>4、编写脚本,保存至服务器
>5、测试脚本,发布项目
### 需求
> 把github上的项目自动发布到指定的服务器,即自动部署
### 环境与设备说明
> 1、远程服务器一台(代码自动部署到此服务器)
> 2、github项目(我们的代码存到github)
> 3、开发计算机(本地开发)
> 4、域名管理
### 生成发布公钥
> 位置:服务器
1、在服务器上安装git,省略
2、git安装完毕后,执行命令
~~~
ssh -keygen
~~~
后面直接回车,不要输入密码,这样使用公钥的时候就无需密码了
3、生成的公钥默认存放在用户目录下的.ssh目录,默认名称为id_ras和id_ras.pub,其中id_ras.pub为公钥文件,也就是要上传到github上的文件
### github项目配置
>位置: github
1、选择添加公钥
![添加公钥](https://box.kancloud.cn/ea6d2514a7eca99fb654473d74f8b587_1059x439.jpg =600x300)
2、进入添加公钥界面,填写标题和内容,标题随意,内容为第一步生成的公钥的内容,保存后添加成功
![填写页面](https://box.kancloud.cn/44114a14a8ab3718a69368664346b972_1048x521.png =600x300)
因为是危险操作,需要输入用户github的密码来确认
添加成功
![证书添加成功](https://box.kancloud.cn/747bf9725452a297682b5be2370102bd_1080x298.png =600x300)
3、配置webhook,填写自动部署所需要的脚本和secret
![新建webhook](https://box.kancloud.cn/c4494d475f59a9186a64ba3f151f35a9_1157x442.png =600x300)
详细设置
![webhook的详细设置](https://box.kancloud.cn/ac40968b66bdfb14e41f5953bb83d71c_993x650.png =600x300)
配置完成后,点击add webhook, github项目的配置即完成。
![webhook配置成功](https://box.kancloud.cn/13b87309d9c1394696cdd4ec2cb993e9_1067x355.png =600x300)
### 配置域名,拉取代码到服务器
>位置:服务器
1、添加域名,指向服务器
![域名管理](https://box.kancloud.cn/9e66c773001ab324e625499dea209fe7_1207x324.png =600x300)
2、在服务器上拉取项目
~~~
git clone https://github.com/wmhello/apidemo
~~~
3、本地web服务器配置后,域名指向项目(不同的框架可以按不同的要求来配置)
4、服务器代码部署成功后,通过域名可以访问网站
![ 服务器部署](https://box.kancloud.cn/902f4d61772c067c086903886c7b9a75_1352x424.png =600x300)
### 编写脚本
>位置:服务器
编写脚本,存放至配置webhook时指定的存放位置,并注意名称一定要相符
~~~
<?php
// 与webhook配置相同,为了安全,请设置此参数
$secret = "wmhello";
// 项目路径
$path = "d:/www/apidemo";
// 校验发送位置,正确的情况下自动拉取代码,实现自动部署
$signature = $_SERVER['HTTP_X_HUB_SIGNATURE'];
if ($signature) {
$hash = "sha1=".hash_hmac('sha1', file_get_contents("php://input"), $secret);
if (strcmp($signature, $hash) == 0) {
echo shell_exec("cd \ && cd {$path} && git pull 2>&1");
exit();
}
}
http_response_code(404);
?>
~~~
### 测试自动发布
>位置:开发机 服务器
在本地计算机增加代码后,提交到github仓库,代码自动同步到服务器,实现了自动发布的功能