Развертывание PHP-проекта из Git на сервере, на котором не установлен Git


Мне нужно найти способ развертывания PHP-проекта, хранящегося в репозитории git, на промежуточном и производственном сервере, на котором не установлен git. Сценарии, которые я нашел до сих пор (например, Capistrano), требуют Git на целевом сервере.

К сожалению, мой хост этого не разрешает, и пока единственный способ - через стандартный FTP, с помощью которого я сохраняю отсутствующие файлы. Это создает непрофессиональный вид.

Я хотел бы иметь возможность развертываться из моего локального репозитория git, который будет проверять в папке .git на целевом сервере, чтобы узнать, какая версия там, затем заставьте целевой сервер создать резервную копию текущей версии, а затем перезаписать ее, отправив только измененные файлы.

Предпочтительно что-нибудь на PHP с веб-интерфейсом.

Я не прошу многого;)

Кто-нибудь там видел/видел что-нибудь подобное?

5 answers

Существует три сценария git-ftp, которые позволяют вам "протолкнуть" репозиторий git на FTP-сервер.

 15
Author: Boris Guéry, 2014-02-16 14:37:06

Возможно, вы сможете использовать что-то вроде Fuse для "монтирования" производственного сервера в качестве локального диска, а затем, что касается вашей копии git, это локальная операция. В качестве альтернативы, rsync.

 3
Author: Tyler Eaves, 2011-02-21 19:14:04

Есть инструмент под названием Одуванчик , который также делает это. Из того, что я вижу, он очень похож на git-ftp, НО он также поддерживает sftp и Amazon S3, что удобно, если вы не хотите менять инструмент развертывания только потому, что вы меняете сервер. Он поставляется в виде рубинового драгоценного камня, поэтому его очень легко установить и начать работу.

 1
Author: eldh, 2012-11-25 09:52:58

Я использую Beanstalkapp.com , что здорово. Вы можете выполнить развертывание через FTP или SFTP.

 0
Author: dallen, 2012-12-18 17:23:58

Я сделал что-то подобное, используя ssh2 и php.

Сначала вам нужно клонировать репозиторий на сервере. После клонирования вы можете выполнять git-извлечение, извлечение и т. Д. Из php с помощью ssh2. самым практичным способом, который я нашел, было делать.

git fetch;
git reset --hard commit_hash;

Для того, чтобы установить фиксацию на ожидаемую.

Чтобы выполнить команду php -ssh2 (предположим, у вас установлен ssh2), вы можете использовать этот метод.

public static function SSHCommmand($command,$user,$ip) {
        $port = 22;

        if (!function_exists("ssh2_connect"))
            die("function ssh2_connect doesn't exist.");
        $result['debug'] .= " -Connect- 1";
        if (!($con = ssh2_connect($ip, $port, array('hostkey' => 'ssh-rsa')) )) {
            die("unable to establish connection.");
        } else {
            // try to authenticate with username root, password secretpassword
            if (!(ssh2_auth_pubkey_file($con, $user, '/home/' . $user . '/.ssh/deploy_rsa.pub', '/home/' . $user . '/.ssh/deploy_rsa'/* , 'secret' */))) {
                dir("fail: unable to authenticate.");
            } else {
                // allright, we're in!
                // execute a command
                if (!($stream = ssh2_exec($con, $command))) {
                    die("fail: unable to execute command.");
                } else {
                    // collect returning data from command
                    stream_set_blocking($stream, true);
                    $data = '';
                    while ($buf = fread($stream, 4096)) {
                        $data .= $buf;
                    }
                    fclose($stream);
                    return $data;
                }
            }
        }
    }

Я использую ключ ssh-rsa, метод аутентификации может измениться. Я также предполагаю что ключи находятся в '/home/' . $user . '/.ssh/deploy_rsa.pub' и '/home/' . $user . '/.ssh/deploy_rsa.

Еще одна вещь, которую вы могли бы принять во внимание, заключается в том, что для удаленного выполнения удаленной команды git команда должна быть такой:

_GIT_PATH.' --git-dir='.$path.'/.git --work-tree='.$path.' '.$command;

Где $path - верхний уровень рабочего дерева.

Используя это и Api Amazon, я смог развернуть новый код на нескольких серверах автоматически и одновременно.

 0
Author: J-Rou, 2013-12-28 12:03:24