使用PHP腳本遠程部署git項目

準備工做:php

1.coding.net建立私有項目html

2.安裝了Web服務 Git服務的服務器nginx

服務器端:

1.nginx、php-fpm統一用www用戶 www 目錄,這個能夠經過修改配置文件實現。git

[root@yz_test www]# ps -ef|grep nginx
root      7826     1  0 Jul01 ?        00:00:00 nginx: master process nginx
www       7827  7826  0 Jul01 ?        00:00:01 nginx: worker process
root      9482  9437  0 06:33 pts/0    00:00:00 grep nginx

[root@yz_test www]# ps -ef|grep php-fpm
root      7800     1  0 Jul01 ?        00:00:00 php-fpm: master process (/usr/local/php-5.6.22/etc/php-fpm.conf)
www       7801  7800  0 Jul01 ?        00:00:01 php-fpm: pool www
www       7802  7800  0 Jul01 ?        00:00:00 php-fpm: pool www
www       7803  7800  0 Jul01 ?        00:00:01 php-fpm: pool www
www       7804  7800  0 Jul01 ?        00:00:00 php-fpm: pool www
www       7805  7800  0 Jul01 ?        00:00:01 php-fpm: pool www
www       7806  7800  0 Jul01 ?        00:00:01 php-fpm: pool www
www       7807  7800  0 Jul01 ?        00:00:01 php-fpm: pool www
www       7808  7800  0 Jul01 ?        00:00:01 php-fpm: pool www
www       7809  7800  0 Jul01 ?        00:00:01 php-fpm: pool www
www       7810  7800  0 Jul01 ?        00:00:01 php-fpm: pool www
www       7811  7800  0 Jul01 ?        00:00:01 php-fpm: pool www
www       7812  7800  0 Jul01 ?        00:00:00 php-fpm: pool www
www       7813  7800  0 Jul01 ?        00:00:01 php-fpm: pool www
www       7814  7800  0 Jul01 ?        00:00:00 php-fpm: pool www
www       7815  7800  0 Jul01 ?        00:00:00 php-fpm: pool www
www       7816  7800  0 Jul01 ?        00:00:01 php-fpm: pool www
www       7817  7800  0 Jul01 ?        00:00:01 php-fpm: pool www
www       7818  7800  0 Jul01 ?        00:00:00 php-fpm: pool www
www       7819  7800  0 Jul01 ?        00:00:00 php-fpm: pool www
www       7820  7800  0 Jul01 ?        00:00:00 php-fpm: pool www
root      9484  9437  0 06:34 pts/0    00:00:00 grep php-fpm

 

2.生成Git用戶公鑰:用於clone時認證權限web

ssh-keygen -t rsa -C "wangzhenxian@foxmail.com"
# 而後一直回車就行
# 生成的文件一般是 /root/.ssh/id_rsa,若是非root用戶請查看提示上的路徑

3.生成部署公鑰shell

 sudo -Hu www ssh-keygen -t rsa # 請選擇 "no passphrase",一直回車下去
 sudo cat /home/www/.ssh/id_rsa.pub # 查看生成的密鑰內容,複製所有

 4.準備鉤子目錄 項目目錄json

chown -R www:www /www/hook 
chown -R www:www /www/repos 
sudo -Hu www touch /mnt/www/hook/index.php
<?php

error_reporting(1);
// 生產環境web目錄
$target = '/home/wwwroot/website.com';
$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'];

$cmd = "sudo -Hu www cd $target && git pull";

shell_exec($cmd);

5.修改git配置和保存git用戶名密碼bash

sudo -Hu www git config --global credential.helper store # 永久保存
sudo -Hu www git config --global user.name "wangzhenxian" 
sudo -Hu www git config --global user.email "wangzhenxian@foxmail.com" # 郵箱請與conding上一致


在Coding.net
1.添加用戶公鑰服務器

2.添加部署公鑰ssh

3.添加hook

 

我的感悟:

1.nginx .php-fpm 執行的用戶組、用戶保持統一

2.生產www用戶的公鑰,確保www用戶在執行操做時 能從/home/www/.ssh 目錄下到到公鑰。

參閱:

http://blog.csdn.net/liu510817387/article/details/51594699

http://overtrue.me/articles/2015/01/how-to-deploy-project-with-git-hook.html

相關文章
相關標籤/搜索