Git自动部署

1、查看nginx所属用户

vi /etc/nginx/nginx.conf

user www-data;
worker_processes 4;
pid /run/nginx.pid;

可以看到用户为www-data(注意:接下来的权限都要配置为该用户)

2、创建web服务器用户目录

sudo mkdir /var/www/html/.ssh
sudo chown -R www-data:www-data /var/www/html/.ssh/

3、修改web目录用户权限

sudo chown -R www-data:www-data /var/www/html

4、准备钩子文件

在web目录html下建立一个目录githook, 里面放上一个php文件index.php,并确保该项目可以被外部访问,如http://example.com/githook/index.php

<?php

    error_reporting(1);

    $root = '/var/www/html/'; // 服务器目录
    $token = 'coding'; // token
    $wwwUser = 'www-data'; //nginx所属用户
    $wwwGroup = 'www';

    $json = json_decode(file_get_contents('php://input'), true);

    if (empty($json['token']) || $json['token'] !== $token) {
        exit('error request');
    }

    if (! ($repo = $_GET['repo'])) {
        $repo = $json['repository']['name'];
    }

    $folder = $root . $repo;

    $cmd = "cd $folder && git pull";

    $res = shell_exec($cmd);

    var_dump($res);

5、生成部署公钥

粘贴公钥至git平台(如:coding,注意:粘贴至部署公钥,非个人公钥)

sudo -Hu www-data ssh-keygen -t rsa # 请选择 "no passphrase",一直回车下去
sudo cat /var/www/html/.ssh/id_rsa.pub

6、clone项目

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

sudo -Hu www-data git clone git@git.coding.net:you/repo.git

7、测试

本地推送代码,看看线上有没有自动部署

Just a beginner.<br /><a href='https://about.iat.net.cn' target='_blank'>profile</a>