准备工作:
1.coding.net创建私有项目
2.安装了Web服务 Git服务的服务器
服务器端:
1.nginx、php-fpm统一用www用户 www 目录,这个可以通过修改配置文件实现。
[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时认证权限
ssh-keygen -t rsa -C "wangzhenxian@foxmail.com" # 然后一直回车就行 # 生成的文件通常是 /root/.ssh/id_rsa,如果非root用户请查看提示上的路径
3.生成部署公钥
sudo -Hu www ssh-keygen -t rsa # 请选择 "no passphrase",一直回车下去 sudo cat /home/www/.ssh/id_rsa.pub # 查看生成的密钥内容,复制全部
4.准备钩子目录 项目目录
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用户名密码
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.添加部署公钥
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