准备工作:

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项目的更多相关文章

  1. 使用idea来部署git项目

    使用idea来部署git项目 一).将项目交由git管理 VCS ---->import into Version Cntorl ------>create Git Repository ...

  2. idea远程部署SpringBoot项目到Docker

    安装docker服务或者系统学习docker参考这篇文档:https://shimo.im/docs/fE0eJCx8IIojQXzB/ 1.配置docker的远程端口 vim /usr/lib/sy ...

  3. Jenkins与Git持续集成&&Linux上远程部署Java项目

    一.环境搭建 1.安装所需软件 Jdk Maven Jenkins Tomcat Xshell git 以上软件去官网下载,比较简单,不一一描述了 2.安装所需的jenkins插件 Git plugi ...

  4. 脚本:将git项目下载到本地并启动

    大致思路:从git上clone源代码到本地:使用mvn package将源代码达成war/jar包:将打好的包放到tomcatpath/webapps/下:到tomcatpath/bin/下执行res ...

  5. ant+Jacoco 统计tomcat远程部署后项目接口自动化测试或者功能测试代码覆盖率

    1.安装ant 环境,https://ant.apache.org/bindownload.cgi 2.下载jacoco包  https://www.eclemma.org/jacoco/ ,解压后, ...

  6. 利用WebHook实现PHP自动部署Git代码

    平时项目代码都托管在Coding,然后每次提交了代码之后都要SSH到服务器上去git pull一次,很是繁琐,在看了OverTrue的<使用PHP脚本远程部署git项目>后就尝试在自己服务 ...

  7. Jenkins部署git+python项目实现持续集成

    目录 1. 创建 item 2. 配置 3. 构建 1. 创建 item 接下来填写创建任务的名字,并选择创建一个 Freestyle project ,点击确认. 2. 配置 接下来进入到项目相关配 ...

  8. 图文详解远程部署ASP.NET MVC 5项目

    话外篇: 由于感觉自己的机器比较慢,配置不好,所以最近想把之前的项目部署到实验室的服务器上,但是由于常不在实验室,所以在想能不能远程部署.因此今天专门研究了一下具体的过程,下面和大家分享一下.本人新手 ...

  9. 图文详解远程部署ASP.NET MVC 5项目 [转载]

    话外篇: 由于感觉自己的机器比较慢,配置不好,所以最近想把之前的项目部署到实验室的服务器上,但是由于常不在实验室,所以在想能不能远程部署.因此今天专门研究了一下具体的过程,下面和大家分享一下.本人新手 ...

随机推荐

  1. vue表单详解——小白速会

    一.基本用法 你可以用 v-model 指令在表单 <input> 及 <textarea> 元素上创建双向数据绑定. 但 v-model 本质上不过是语法糖.它负责监听用户的 ...

  2. 原生JavaScript实现页面回到顶部的功能

    /*如果想实现点击一个按钮让滚动条回到最顶部的功能,首先可能就会想到它是从底部位置移动到顶部的位置 它是一个运动的过程,只要知道当前位置(current Position)和想要到达的位置(targe ...

  3. 谈谈自己的理解:python中闭包,闭包的实质

    闭包这个概念好难理解,身边朋友们好多都稀里糊涂的,稀里糊涂的林老冷希望写下这篇文章能够对稀里糊涂的伙伴们有一些帮助~ 请大家跟我理解一下,如果在一个函数的内部定义了另一个函数,外部的我们叫他外函数,内 ...

  4. Mysql 5.1的坑

    1.数据库表是区分大小写的 之前程序在5.7数据库没问题,测试环境上数据库是5.1的,就提示表找不到. 2.同样的sql,在5.1上会提示事务获取锁失败,超时返回.而5.7上正常.原因暂未找到.

  5. Linux系统的基本使用

    曾经在网上看到一个一篇文章,说到了Linux学习的入门与学习技巧,也就是:初学者可以自己安装虚拟机,然后把linux常用命令例如cd.ls.chmod.useradd.vi等等多练习几十遍,把自己敲打 ...

  6. 初试valgrind内存调试工具

    虽然GDB调试工具功能强大,但对于平时做题调试的使用并不方便,这里尝试学习使用比较简单的valgrind工具 Valgrind是一个提供程序调试及性能分析的工具集.其包含的工具主要有Memcheck, ...

  7. Android:ImageView控件显示图片

    1)android显示图片可以使用imageView来呈现,而且也可以通过ImageButton来实现给button添加图片. 2)在创建一个ImageView后,显示图片绑定元素是:android: ...

  8. c#:ThreadPool实现并行分析,并实现线程同步结束

    背景: 一般情况下,经常会遇到一个单线程程序时执行对CPU,MEMORY,IO利用率上不来,且速度慢下问题:那么,怎么解决这些问题呢? 据我个人经验来说有以下两种方式: 1.并行.多线程(Parall ...

  9. 1.3WEB API 默认以json格式返回数据,同时定义时间格式,返回格式

    首先我们知道,web api 是可以返回任意类型的,然后在输出的过程中转为(默认的)xml. 但是xml是比较费流量的,而且大多前端都是用json对接,所以我们也只能随大流,把它输出改成json. 不 ...

  10. SQL基础-----DDL

    1 (My)SQL入门 这里用了(My)SQL这样的标题,目的是介绍标准SQL的同时,也将MySQL在标准SQL上的扩展一同介绍给读者. 2:SQL分类 SQL语句主要可以划分为以下3个类别 .DDL ...