Разверните проект PHP из Git на сервере, на котором не установлен Git - PullRequest
11 голосов
/ 21 февраля 2011

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

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

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

Желательно что-то в PHP с веб-интерфейсом.

Не спрашиваю много, я;)

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

Ответы [ 5 ]

15 голосов
/ 21 февраля 2011

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

3 голосов
/ 21 февраля 2011

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

1 голос
/ 25 ноября 2012

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

0 голосов
/ 18 декабря 2012

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

0 голосов
/ 18 ноября 2011

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

Сначала вам нужно клонировать репо на сервере.После клонирования вы можете выполнять git pull, checkout и т. Д. Из 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 - это верхний уровень рабочего дерева.

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

...