### 整體流程
>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、選擇添加公鑰

2、進入添加公鑰界面,填寫標題和內容,標題隨意,內容為第一步生成的公鑰的內容,保存后添加成功

因為是危險操作,需要輸入用戶github的密碼來確認
添加成功

3、配置webhook,填寫自動部署所需要的腳本和secret

詳細設置

配置完成后,點擊add webhook, github項目的配置即完成。

### 配置域名,拉取代碼到服務器
>位置:服務器
1、添加域名,指向服務器

2、在服務器上拉取項目
~~~
git clone https://github.com/wmhello/apidemo
~~~
3、本地web服務器配置后,域名指向項目(不同的框架可以按不同的要求來配置)
4、服務器代碼部署成功后,通過域名可以訪問網站

### 編寫腳本
>位置:服務器
編寫腳本,存放至配置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倉庫,代碼自動同步到服務器,實現了自動發布的功能