之前已经用Git实现了自己博客的提交自动部署,并自动提交到GitHub和coding以备不时之需。平时项目代码都托管在Coding或者GitHub上,也已经用上了coding提供的webhook功能,偶尔个别自己玩玩的项目提交了代码之后再SSH到服务器上去 git pull 一次,刚好一起做成了自动部署,方法记录起来备忘。

实现步骤

在服务器上

以Nginx环境为例,Apache请看OverTrue的教程

生成公钥

公钥有两个:1. git用户公钥,2. 部署公钥:

git用户公钥

  1. 1
    2
    3
  1. ssh-keygen -t rsa -C "[email protected]"
  2.  
  3. #生成的文件通常是 /root/.ssh/id_rsa,如果非root用户请查看提示上的路径

部署公钥

  1. 1
  1. sudo -Hu www ssh-keygen -t rsa

准备钩子文件

创建和修改目录权限

  1. 1
    2
  1. mkdir /home/wwwroot/website.com/hook
    chown -R www:www /home/wwwroot/website.com/hook

写入钩子文件

  1. 1
  1. sudo -Hu www touch /home/wwwroot/website.com/hook/index.php

钩子文件代码内容如下:

  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
  1. <?php
  2.  
  3. error_reporting(1);
  4.  
  5. $target = '/home/wwwroot/website.com'; // 生产环境web目录
    $token = '您在coding填写的hook令牌';
    $wwwUser = 'www';
  6.  
  7. $json = json_decode(file_get_contents('php://input'), true);
  8.  
  9. if (empty($json['token']) || $json['token'] !== $token) {
    exit('error request');
    }
  10.  
  11. $cmd = "sudo -Hu $wwwUser cd $target && git pull";
  12.  
  13. shell_exec($cmd);
    ?>

确保你的 大专栏  基于webhook方案的Git自动部署方案hook文件可以访问:http://example.com/hook/index.php , 钩子准备完成。

修改git配置和保存git用户名密码

  1. 1
    2
    3
  1. 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 "[email protected]" #邮箱请与conding上一致

在Coding仓库

添加用户公钥

复制/root/.ssh/id_rsa.pub内容到个人设置页的SSH公钥里添加即可(https://coding.net/user/account/setting/keys)

添加部署公钥

复制/home/www/.ssh/id_rsa.pub的内容并添加到部署公钥:

选择 项目 > 设置 > 部署公钥 > 新建 ,将公钥内容全部粘贴到下面框并确认

添加hook

选择 项目 > 设置 > WebHook > 新建hook 粘贴你的 hook/index.php 所在的网址。比如:http://example.com/hook/index.php, 令牌可选,但是建议写上。

coding出了个 webhookv2 功能强大了不少,对有更多细节要求的程序帮助不少但也复杂了,选择返回旧版新建个webhook使用即可。

稍过几秒刷新页面查看hook状态,或者点击测试,显示为绿色勾就OK了。

项目初始化

我们需要先在服务器上clone一次,以后都可以实现自动部署了:

  1. 1
  1. sudo -Hu www git clone https://git.coding.net/yourname/yourgit.git /home/wwwroot/website.com/ --depth=1

这个时候应该会要求你输入一次Coding的帐号和密码,因为上面我们设置了永久保存用户名和密码,所以之后再执行git就不会要求输入用户名和密码了。

注意,这里初始化clone必须要用www用户

往Coding.net提交一次代码测试

在本地clone的仓库执行:

  1. 1
  1. git commit -am "test hook" --allow-emptygit push

OK,稍过几秒,正常的话你在配置的项目目录里就会有你的项目文件了。

初始化Laravel框架

下载Composer

在项目目录下执行:

  1. 1
    2
  1. sudo -Hu www curl -sS https://getcomposer.org/installer | php
    sudo -Hu www php composer.phar install

记得在本地提交的时候在.gitignore中加上composer.phar

参考文档

  1. 用 Git 钩子进行简单自动部署
  2. 利用WebHook实现PHP自动部署Git代码
  3. 使用git做服务器端代码的部署
  4. SSH密钥生成与部署

基于webhook方案的Git自动部署方案的更多相关文章

  1. spring boot 自动部署方案

    现在主流的自动部署方案大都是基于Docker的了,但传统的自动部署方案比较适合中小型公司,下面的方案就是比较传统的自动部署方案. 1.为什么需要自动部署 基于微服务的架构,自动部署显得非常重要.因为每 ...

  2. Jenkins spring boot 自动部署方案

    原文地址:http://www.cnblogs.com/skyblog/p/5632869.html 现在主流的自动部署方案大都是基于Docker的了,但传统的自动部署方案比较适合中小型公司,下面的方 ...

  3. Git自动部署

    Git自动部署文件位于repository下面的hooks里的post-receive #!/bin/sh set -e git-update-server-info gitosis-run-hook ...

  4. git自动部署到服务器

    1.现在服务器配置空仓库 mkdir -p test/project.git chmod 777 test cd test/project.git/ git init --bare . cd .. c ...

  5. 基于Github Actions + Docker + Git 的devops方案实践教程

    目录 为什么需要Devops 如何实践Devops 版本控制工具(Git) 学习使用 配置环境 源代码仓库 一台配置好环境的云服务器 SSH远程登录 在服务器上安装docker docker技术准备工 ...

  6. .NetCore基于Jenkins和Gogs的自动化部署方案

    准备工作 Jenkins和gogs的安装配置可以看前两篇:Jenkins安装.配置与说明  和 gogs安装与说明(docker) 此外,因为还要安装.net core的SDK和Git工具: 安装.n ...

  7. MongoDB3.6 一键化自动部署方案

    1.系统基础配置 下面的命令默认都使用root用户进行操作,操作系统为Centos7,mongodb3.6.x以上版本 1.1 修改系统配置文件/etc/security/limits.conf和/e ...

  8. [转] 使用git自动部署简单网站

    要做什么 假设你有一个博客,有一台网站服务器(或者很多台作负载均衡的服务器),当你的博客要升级时,你可能要在你自己的电脑上写好代码(可能包括本地调试好),然后提交到git(或svn),然后在每个服务器 ...

  9. Gitlab使用Webhook实现Push代码自动部署

    1.Jenkins 安装完成以后,首先我们在Jenkins中需要安装一下,Gitlab Hook Plugin 插件: 2.插件安装完成我们创建任务,在任务重构建触发器下获取回调URL: 注意: 注意 ...

随机推荐

  1. a标签的一些特殊使用

    <a href="tel:10086">10086</a> //点击后直接拨打10086  <a href="mailto:c1586@qq ...

  2. BTree

    hash.平衡二叉树.BTree.B+tree的区别 https://blog.csdn.net/qq_40673786/article/details/90082444 联合索引在B+树上的结构介绍 ...

  3. 吴裕雄--天生自然 pythonTensorFlow图形数据处理:将MNIST手写图片数据写入TFRecord文件

    import numpy as np import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_dat ...

  4. 脚手架搭建vue项目

    1.安装安装node.js: 2.cnpm install vue-cli -g (全局安装,需要注意的是我这里是用淘宝镜像安装的,没有安装cnpm的需要先去安装一下) 3.vue --version ...

  5. 设计函数f(f(n))== -n

    来源:厦门SEO 我上次面试时遇到的一个问题: 设计一个函数f ,使得: f(f(n)) == -n 其中n是一个32位有符号整数 ; 您不能使用复数算法. 如果您不能为整个数字范围设计这样的函数,请 ...

  6. C# 查找其他应用程序并打开、显示、隐藏、关闭的API

    软件开发中,有时迫不得已要用到第三方的软件,这时就涉及到在C#应用程序需要对第三方软件打开.显示.隐藏以及关闭. 下面列举了几个常用的方式 打开应用程序,下面是2种简单用法: 第一种: public ...

  7. git命令简单使用

    git config --global user.name 'sss' git config --global user.email 'huahua@163.com' cd d:/mywork git ...

  8. css后续篇

    5.盒模型 在css中,box model这一术语是用来设计和布局时使用的,在网页中显示一些方方正正的盒子,这种盒子就叫盒模型 盒模型有两种: 标准模型和IE模型(了解) 盒模型属性 width : ...

  9. STM32学习中出现的错误

    1.添加了多个文件后编译发现出现了无效的重复声明: 原因:文件(头文件)调用的时候重复调用, 解决办法:每个头文件写的时候包含以下代码: #ifndef   __STM32F10X_H   //头文件 ...

  10. java第二节课 java语法基础动手动脑

    动手动脑1:枚举变量   运行EnumTest.java package test2; public class EnumTest {  public static void main(String[ ...