{{TOC}} {{DOCVER 4.0=0da300f6445bec5a70d007f503834fce957b065b 16.10.2014 5:19:26, 4.1=efd541a0b218b1c6aafb73f0051c18ed150e3c24 25.05.2014 6:21:03, 4.2=d7b13440c003218ed79e9d508706eca01990122f 4.12.2014 5:01:15}} == Конфигурация == В Laravel есть простой способ подключения по SSH к удаленным серверам и запуска команд, позволяющий легко создавать Artisan-задачи, работающие на удаленном сервере. Фасад %%(t)SSH%% обеспечивает точку доступа для соединения с вашими удаленными серверами и запуска команд. Файл конфигурации расположен в папке %%(t)app/config/remote.php%%. Он содержит все параметры,необходимые для настройки ваших удалённых подключений. Массив %%(t)connections%% содержит список ваших серверов c их именами в качестве ключей. Просто добавьте учётные данные в массив %%(t)connections%% и вы будете готовы к запуску удалённых задач. Обратите внимание, что %%(t)SSH%% поддерживает аутентификацию как с помощью пароля, так и по SSH-ключу. .(alert) Хотите легко и просто запускать множество задач на вашем удалённом сервере? Попробуйте ((#Envoy инструмент запуска задач Envoy))! == Основы работы == **Запуск команд на сервере по умолчанию** Для запуска команд через удалённое подключению по умолчанию (%%(t)default%%) используйте метод %%SSH::run()%%: %% SSH::run(array( 'cd /var/www', 'git pull origin master', )); %% **Запуск команд через указанное подключение** Также вы можете запускать команды через указанное подключение, используя метод %%into()%%: %% SSH::into('staging')->run(array( 'cd /var/www', 'git pull origin master', )); %% **Отлавливание результата запуска команд** Вы можете отловить "живой" результат выполнения своих удалённых команд, передав замыкание в метод %%run()%%: %% SSH::run($commands, function($line) { echo $line.PHP_EOL; }); %% == Задачи == Если вам нужно зарегистрировать группу команд, которые должны всегда запускаться вместе, вы можете использовать метод %%define()%%, чтобы зарегистрировать %%task%%: %% SSH::into('staging')->define('deploy', array( 'cd /var/www', 'git pull origin master', 'php artisan migrate', )); %% После того, как задача была зарегистрирована, вы можете использовать метод %%task()%% для её запуска: %% SSH::into('staging')->task('deploy', function($line) { echo $line.PHP_EOL; }); %% == SFTP-загрузка == Класс %%(t)SSH%% включает в себя простой способ скачивания файлов, используя методы %%get()%% и %%getString()%%: %% SSH::into('staging')->get($remotePath, $localPath); $contents = SSH::into('staging')->getString($remotePath); %% == SFTP-выгрузка == Также класс %%(t)SSH%% включает простой способ выгрузки файлов и даже строк на сервер, используя методы %%put()%% и %%putString()%%: %% SSH::into('staging')->put($localFile, $remotePath); SSH::into('staging')->putString($remotePath, 'Foo'); %% == Отслеживание удалённых логов == В Laravel есть полезная команда для отслеживания файлов %%(t)laravel.log%% на любом из ваших удаленных подключений. Просто используйте Artisan-команду %%(sh)tail%% и укажите имя удалённого подключения, которое вы хотите отследить: %%(sh) php artisan tail staging php artisan tail staging --path=/path/to/log.file %% == ((#Envoy)) Инструмент запуска задач Envoy == Laravel Envoy обеспечивает чистый и минимальный синтаксис для регистрации общих задач, запускаемых на удалённых серверах. Используя синтаксис в стиле ((/docs/v4/templates#blade Blade)), вы легко можете настроить задачи для развёртывания, Artisan-команды и прочее. .(alert) Envoy требует PHP 5.4 или выше и работает только на ОС Mac/Linux. === Установка === Сначала установите Envoy с помощью команды Composer %%(sh)global%%: %%(sh) composer global require "laravel/envoy=~1.0" %% Не забудьте поместить каталог %%(t)~/.composer/vendor/bin%% в ваш ПУТЬ, чтобы исполняемый файл %%(t)envoy%% мог быть найден при запуске команды %%(sh)envoy%% в терминале. Затем создайте файл %%(t)Envoy.blade.php%% в корне вашего проекта. Вот пример для начала: %%(t) @servers(['web' => '192.168.1.1']) @task('foo', ['on' => 'web']) ls -la @endtask %% Как видите, массив %%(t)@servers%% определён в начале файла. Вы можете ссылаться на эти сервера в параметре %%(t)on%% при объявлении задач. Поместите в ваши объявления %%(t)@task%% тот Bash-код, который будет запускаться на сервере при исполнении задачи. Для простого создания стаб-файла Envoy используйте команду %%(sh)init%%: %%(sh) envoy init user@192.168.1.1 %% === Запуск задач === Для запуска задачи используйте команду %%(sh)run%% вашего Envoy: %%(sh) envoy run foo %% При необходимости вы можете передать переменные в файл Envoy с помощью ключей командной строки: %%(sh) envoy run deploy --branch=master %% Вы можете использовать параметры с синтаксисом Blade, к которому привыкли: %%(t) @servers(['web' => '192.168.1.1']) @task('deploy', ['on' => 'web']) cd site git pull origin {{ $branch }} php artisan migrate @endtask %% **Автозагрузка** Для объявления переменных и выполнения общих PHP-задач в файле Envoy вы можете использовать директиву %%(t)@setup%%: %%(t) @setup $now = new DateTime(); $environment = isset($env) ? $env : "testing"; @endsetup %% А для подключения любых PHP-файлов используйте директиву %%(t)@include%%: %%(t) @include('vendor/autoload.php'); %% === Несколько серверов === Вы легко можете запускать задачи на нескольких серверах. Просто перечислите эти сервера в объявлении задач: %%(t) @servers(['web-1' => '192.168.1.1', 'web-2' => '192.168.1.2']) @task('deploy', ['on' => ['web-1', 'web-2']]) cd site git pull origin {{ $branch }} php artisan migrate @endtask %% По умолчанию задачи будут выполняться на каждом сервере поочерёдно. То есть задача будет завершаться на первом сервере перед переходом к выполнению на следующем. === Параллельное выполнение === Если вы хотите запускать задачи на нескольких серверах параллельно, просто добавьте парметр %%(t)parallel%% в объявление задач: %%(t) @servers(['web-1' => '192.168.1.1', 'web-2' => '192.168.1.2']) @task('deploy', ['on' => ['web-1', 'web-2'], 'parallel' => true]) cd site git pull origin {{ $branch }} php artisan migrate @endtask %% === Макрос задач === Макрос позволяет вам определить набор задач, которые будут запускаться последовательно с помощью одной команды. Например: %%(t) @servers(['web' => '192.168.1.1']) @macro('deploy') foo bar @endmacro @task('foo') echo "HELLO" @endtask @task('bar') echo "WORLD" @endtask %% Теперь макрос %%(t)deploy%% может быть запущен одной простой командой: %%(sh) envoy run deploy %% === Оповещения === **HipChat** Вы можете посылать оповещение в чат HipChat своей команды после запуска задачи с помощью простой директивы %%(t)@hipchat%%: %%(t) @servers(['web' => '192.168.1.1']) @task('foo', ['on' => 'web']) ls -la @endtask @after @hipchat('token', 'room', 'Envoy') @endafter %% Вы также можете задать своё собственное сообщение в чат HipChat, в котором можете использовать любые переменные, объявленные в %%(t)@setup%% или подключенные с помощью %%(t)@include%%: %%(t) @after @hipchat('token', 'room', 'Envoy', "$task ran on [$environment]") @endafter %% Это удивительно простой способ держать вашу команду в курсе запущенных на сервере задач. **Slack** Следующий синтаксис используется для отправки оповещений в ((https://slack.com Slack)): %%(t) @after @slack('team', 'token', 'channel') @endafter %% === Обновление Envoy === Для обновления Envoy просто запустите команду %%(sh)self-update%%: %%(sh) envoy self-update %% Если ваш Envoy установлен в %%(t)/usr/local/bin%%, вам может потребоваться %%(sh)sudo%%: %%(DOCNEW 4.2=d7b13440c003218ed79e9d508706eca01990122f 4.12.2014 5:01:15) %%(sh) composer global update ~%% %% %%(DOCNEW 4.1=76ea4e157780376ed63bede1d2188a8e31057190 22.09.2014 19:08:11) %%(sh) sudo envoy self-update ~%% %%