домены и предлагает пользователю выбрать сайт для копирования • Парсит .settings.php, чтобы получить доступы к боевой бд • Заливает и исполняет на бою тестовый скрипт, чтобы узнать версию php для WakeupBeta • Параллельно выполняет копирование файлов и таблиц • Запускает WakeupBeta и автоматически передает ей все необходимые параметры
в директорию корня сайта • Запускаем Параметры: • Доступы ssh к бою • Домен • Доступы к БД на тесте • Параметры копирования файлов и таблиц • Может спросить версию php боевого сайта > cd /var/www/vhosts/example.t-dir.dev/httpdocs/ > /opt/plesk/php/8.0/bin/php -f /var/www/vhosts/makebeta.t-dir.dev/core/cli.php host: 192.168.88.113 ssh port [22]: ssh login: root ssh password: 123456 1. example.org: /home/bitrix/ext_www 2. site.org: /home/bitrix/www domain number: 2 exclude upload folder [Y]: rsync: ignore times [N]: local db name: makebeta local db login: makebeta local db password: 123456 ignore archive tables [Y]: remote php version [7.4]:
$state->sshHost = prompt('host'); $state->sshPort = prompt('ssh port', 22); • nikic/php-parser Парсер php кода • symfony/process Выполнение команд ОС. Возможность выполнять команды асинхронно, получать вывод в реальном времени и передавать данные в поток ввода. • league/flysystem-sftp-v3 Удобная работа с файловой системой через SFTP use League\Flysystem; $connection = new Flysystem\PhpseclibV3\SftpConnectionProvider( $host, $login, $password // для авторизации по паролю нужен sshpass ); $adapter = new Flysystem\PhpseclibV3\SftpAdapter( $connection, '/home/bitrix/www/' // root dir ); $filesystem = new Flysystem\Filesystem($adapter); // чтение содержимого файла $fileContent = $filesystem->read('bitrix/.settings'); // список файлов в директории $directoryFiles = $filesystem->listContents('/');
строку и создаем процесс симфони. use Symfony\Component\Process\Process as SymfonyProcess; $command = implode(PHP_EOL, $commandsList); $process = SymfonyProcess::fromShellCommandline( $command, $_SERVER['DOCUMENT_ROOT'] // рабочая директория ); $process->start(); // запускаем процесс // копируем файлы... $process->wait(); // ждем завершения выполнения
оставляем его работать в фоне $processDb->start(); // запускаем процесс копирования файлов $processFiles->start(); // используя процесс как итератор, можно следить за выполнением команды в реальном времени и получать ее вывод // когда процесс завершает работу, цикл заканчивается foreach ($processFiles as $type => $buffer) { if ($type === SymfonyProcess::OUT) { echo $buffer . PHP_EOL; // выводим прогресс rsync } else { echo "\nRsync ERROR: $buffer\n"; } } // возвращаемся к фоновому процессу копирования БД и ждем его завершения $processDb->wait(); // выводим ошибки копирования бд echo $processDb->getErrorOutput();
данные для подключения к БД # версия php определяется модулем автоматически /opt/plesk/php/7.4/bin/php -f /var/www/vhosts/tdstore.t-dir.dev/wakeupbeta.t-dir.com/src/cli-run.php change database [N]: Y name: makebeta login: makebeta password: password • Процесс симфони позволяет нам писать в поток ввода. Таким образом, мы можем передать данные в WakeupBeta автоматически