使用PHP脚本远程部署git项目
准备工作:
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
使用PHP脚本远程部署git项目的更多相关文章
- 使用idea来部署git项目
		
使用idea来部署git项目 一).将项目交由git管理 VCS ---->import into Version Cntorl ------>create Git Repository ...
 - idea远程部署SpringBoot项目到Docker
		
安装docker服务或者系统学习docker参考这篇文档:https://shimo.im/docs/fE0eJCx8IIojQXzB/ 1.配置docker的远程端口 vim /usr/lib/sy ...
 - Jenkins与Git持续集成&&Linux上远程部署Java项目
		
一.环境搭建 1.安装所需软件 Jdk Maven Jenkins Tomcat Xshell git 以上软件去官网下载,比较简单,不一一描述了 2.安装所需的jenkins插件 Git plugi ...
 - 脚本:将git项目下载到本地并启动
		
大致思路:从git上clone源代码到本地:使用mvn package将源代码达成war/jar包:将打好的包放到tomcatpath/webapps/下:到tomcatpath/bin/下执行res ...
 - ant+Jacoco 统计tomcat远程部署后项目接口自动化测试或者功能测试代码覆盖率
		
1.安装ant 环境,https://ant.apache.org/bindownload.cgi 2.下载jacoco包 https://www.eclemma.org/jacoco/ ,解压后, ...
 - 利用WebHook实现PHP自动部署Git代码
		
平时项目代码都托管在Coding,然后每次提交了代码之后都要SSH到服务器上去git pull一次,很是繁琐,在看了OverTrue的<使用PHP脚本远程部署git项目>后就尝试在自己服务 ...
 - Jenkins部署git+python项目实现持续集成
		
目录 1. 创建 item 2. 配置 3. 构建 1. 创建 item 接下来填写创建任务的名字,并选择创建一个 Freestyle project ,点击确认. 2. 配置 接下来进入到项目相关配 ...
 - 图文详解远程部署ASP.NET MVC 5项目
		
话外篇: 由于感觉自己的机器比较慢,配置不好,所以最近想把之前的项目部署到实验室的服务器上,但是由于常不在实验室,所以在想能不能远程部署.因此今天专门研究了一下具体的过程,下面和大家分享一下.本人新手 ...
 - 图文详解远程部署ASP.NET MVC 5项目 [转载]
		
话外篇: 由于感觉自己的机器比较慢,配置不好,所以最近想把之前的项目部署到实验室的服务器上,但是由于常不在实验室,所以在想能不能远程部署.因此今天专门研究了一下具体的过程,下面和大家分享一下.本人新手 ...
 
随机推荐
- Spring Security 入门(3-10)Spring Security 的四种使用方式
			
原文链接: http://www.360doc.com/content/14/0724/17/18637323_396779659.shtml 下面是作者的一个问题处理
 - NHibernate的基本使用
			
一.O/R Mapping 概论 工厂模式+反射+每个数据库的DAL层来解决数据访问层的代码 针对数据库表中字段的变化我们是无法预料的,所以每一次用户需求的修改都会直接导致我们程序员来修改—实体类(B ...
 - linux系统命令学习系列-定时任务crontab命令
			
上节内容复习: at命令的使用 作业:创建一个任务10分钟后关机 at now+10 minutes at>shutdown at><EOT> 本节我们继续来说例行任务管理命令 ...
 - 文本处理三剑客之grep
			
grep grep(支持基本正则表达式),egrep(支持扩展的正则表达式),fgrep(快速的grep,不支持正则表达式) grep是一个最初用于Unix操作系统的命令行工具.在给出文件列表或标准输 ...
 - 如何把百度统计代码放入JS文件中?百度统计的JS脚本原理分析
			
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script&quo ...
 - requests-get请求
			
import requests response= requests.get('http://www.baidu.com')#get方法请求网址 print(response) print(respo ...
 - urllib.error
			
#捕获异常 import urllib.request import urllib.error try: response = urllib.request.urlopen('http://sasd. ...
 - React 深入系列3:Props 和 State
			
文:徐超,<React进阶之路>作者 授权发布,转载请注明作者及出处 React 深入系列3:Props 和 State React 深入系列,深入讲解了React中的重点概念.特性和模式 ...
 - Animations in UWP Community Toolkit - Overview
			
概述 UWP Community Toolkit 中有一个 Animations 的集合,它们可以帮助开发者实现很多的动画,本篇我们先来看一下 Animations 的功能都有哪些,再后面会针对每一 ...
 - [LeetCode] Set Intersection Size At Least Two 设置交集大小至少为2
			
An integer interval [a, b] (for integers a < b) is a set of all consecutive integers from a to b, ...