平時項目代碼都託管在Coding,而後每次提交了代碼以後都要SSH到服務器上去git pull一次,非常繁瑣,在看了OverTrue的《使用PHP腳本遠程部署git項目》後就嘗試在本身服務器上搞一下自動化部署,下面把部署步驟列出來算是一個分享與備忘。php
首先在Coding上建立一個項目,而後在本地clone一份。html
公鑰有兩個:1. git用戶公鑰,2. 部署公鑰:git
git用戶公鑰web
1
2
3
|
ssh-keygen -t rsa -C "admin@xsooo.com"
# 而後一直回車就行
# 生成的文件一般是 /root/.ssh/id_rsa,若是非root用戶請查看提示上的路徑
|
部署公鑰shell
sudo -Hu www ssh-keygen -t rsa # 請選擇 「no passphrase」,一直回車下去json
建立和修改目錄權限:服務器
1
2
|
mkdir /home/wwwroot/website.com/hook
chown -R www:www /home/wwwroot/website.com/hook
|
寫入鉤子文件:app
1
|
sudo -Hu www touch /home/wwwroot/website.com/hook/index.php
|
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
27
28
29
30
31
32
|
<?php
error_reporting(1);
$target = '/home/wwwroot/website.com'; // 生產環境web目錄
$token = '您在coding填寫的hook令牌';
$wwwUser = 'www';
$wwwGroup = 'www';
$json = json_decode(file_get_contents('php://input'), true);
if (empty($json['token']) || $json['token'] !== $token) {
exit('error request');
}
$repo = $json['repository']['name'];
// $cmds = array(
// "cd $target && git pull",
// "chown -R {$wwwUser}:{$wwwGroup} $target/",
// );
// foreach ($cmds as $cmd) {
// shell_exec($cmd);
// }
// 感謝@墨跡凡指正,能夠直接用www用戶拉取代碼而不用每次拉取後再修改用戶組
$cmd = "sudo -Hu www cd $target && git pull";
shell_exec($cmd);
|
確保你的hook文件能夠訪問:http://example.com/hook/index.php,鉤子準備完成。composer
1
2
3
|
sudo -Hu www git config --global credential.helper store # 永久保存
sudo -Hu www git config --global user.name "Bantes"
sudo -Hu www git config --global user.email "admin@xsooo.com" # 郵箱請與conding上一致
|
複製/root/.ssh/id_rsa.pub
內容到我的設置頁的SSH公鑰裏添加便可(https://coding.net/user/account/setting/keys)框架
複製/home/www/.ssh/id_rsa.pub
的內容並添加到部署公鑰:
選擇項目 > 設置 > 部署公鑰 > 新建 > 粘貼到下面框並確認
選擇項目 > 設置 > WebHook > 新建hook > 粘貼你的hook/index.php所在的網址。好比:http://example.com/hook/index.php, 令牌可選,可是建議寫上。
稍過幾秒刷新頁面查看hook狀態,顯示爲綠色勾就OK了。
1.咱們須要先在服務器上clone一次,之後均可以實現自動部署了:
1
|
sudo -Hu www git clone https://git.coding.net/yourname/yourgit.git /home/wwwroot/website.com/ --depth=1
|
這個時候應該會要求你輸入一次Coding的賬號和密碼,由於上面咱們設置了永久保存用戶名和密碼,因此以後再執行git就不會要求輸入用戶名和密碼了。
**!!注意,這裏初始化clone必需要用www用戶**
2.往Coding.net提交一次代碼測試:
在本地clone的倉庫執行:
1
2
|
git commit -am "test hook" --allow-empty
git push
|
OK,稍過幾秒,正常的話你在配置的項目目錄裏就會有你的項目文件了。
1. 下載Composer
在項目目錄下執行:
1
2
|
sudo -Hu www curl -sS https://getcomposer.org/installer | php
sudo -Hu www php composer.phar install
|
**!!記得在本地提交的時候在.gitignore中加上composer.phar**
======================================================
以上只是針對我我的服務器環境的一個搭建過程,歡迎你們指正、探討。
服務器環境:Linux(CentOS) - AMH - Nginx & MySql
WWW用戶目錄:/home/www
項目目錄:/home/wwwroot/Dev/website.com/web/
Hook目錄:/home/wwwroot/Dev/m.website.com/web/hook/