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

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

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

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

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

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

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

Ответ 1

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

Ответ 2

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

Ответ 3

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

Ответ 4

Я сделал что-то подобное, используя 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, метод auth может измениться. Я также полагаю, что ключи находятся в '/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, я смог развернуть новый код на несколько серверов автоматически и одновременно.

Ответ 5

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