Может войдёшь?
Черновики Написать статью Профиль

SSH

перевод документация 4.x

  1. 1. Конфигурация
  2. 2. Основы работы
  3. 3. Задачи
  4. 4. SFTP-загрузка
  5. 5. SFTP-выгрузка
  6. 6. Отслеживание удалённых логов
  7. 7. Инструмент запуска задач Envoy
    1. 7.1. Установка
    2. 7.2. Запуск задач
    3. 7.3. Несколько серверов
    4. 7.4. Параллельное выполнение
    5. 7.5. Макрос задач
    6. 7.6. Оповещения
    7. 7.7. Обновление Envoy
Этот перевод актуален для англоязычной документации на (ветка 4.2) , (ветка 4.1) и (ветка 4.0). Опечатка? Выдели и нажми Ctrl+Enter.

Конфигурация

В Laravel есть простой способ подключения по SSH к удаленным серверам и запуска команд, позволяющий легко создавать Artisan-задачи, работающие на удаленном сервере. Фасад SSH обеспечивает точку доступа для соединения с вашими удаленными серверами и запуска команд.

Файл конфигурации расположен в папке app/config/remote.php. Он содержит все параметры,необходимые для настройки ваших удалённых подключений. Массив connections содержит список ваших серверов c их именами в качестве ключей. Просто добавьте учётные данные в массив connections и вы будете готовы к запуску удалённых задач. Обратите внимание, что SSH поддерживает аутентификацию как с помощью пароля, так и по SSH-ключу.

Хотите легко и просто запускать множество задач на вашем удалённом сервере? Попробуйте инструмент запуска задач Envoy!

Основы работы

Запуск команд на сервере по умолчанию

Для запуска команд через удалённое подключению по умолчанию (default) используйте метод PHPSSH::run():

PHP
SSH::run(array(
  
'cd /var/www',
  
'git pull origin master',
));

Запуск команд через указанное подключение

Также вы можете запускать команды через указанное подключение, используя метод PHPinto():

PHP
SSH::into('staging')->run(array(
  
'cd /var/www',
  
'git pull origin master',
));

Отлавливание результата запуска команд

Вы можете отловить «живой» результат выполнения своих удалённых команд, передав замыкание в метод PHPrun():

PHP
SSH::run($commands, function($line)
{
  echo 
$line.PHP_EOL;
});

Задачи

Если вам нужно зарегистрировать группу команд, которые должны всегда запускаться вместе, вы можете использовать метод PHPdefine(), чтобы зарегистрировать PHPtask:

PHP
SSH::into('staging')->define('deploy', array(
  
'cd /var/www',
  
'git pull origin master',
  
'php artisan migrate',
));

После того, как задача была зарегистрирована, вы можете использовать метод PHPtask() для её запуска:

PHP
SSH::into('staging')->task('deploy', function($line)
{
  echo 
$line.PHP_EOL;
});

SFTP-загрузка

Класс SSH включает в себя простой способ скачивания файлов, используя методы PHPget() и PHPgetString():

PHP
SSH::into('staging')->get($remotePath$localPath);

$contents SSH::into('staging')->getString($remotePath);

SFTP-выгрузка

Также класс SSH включает простой способ выгрузки файлов и даже строк на сервер, используя методы PHPput() и PHPputString():

PHP
SSH::into('staging')->put($localFile$remotePath);

SSH::into('staging')->putString($remotePath'Foo');

Отслеживание удалённых логов

В Laravel есть полезная команда для отслеживания файлов laravel.log на любом из ваших удаленных подключений. Просто используйте Artisan-команду shtail и укажите имя удалённого подключения, которое вы хотите отследить:

shphp artisan tail staging

php artisan tail staging --path=/path/to/log.file

Инструмент запуска задач Envoy

Laravel Envoy обеспечивает чистый и минимальный синтаксис для регистрации общих задач, запускаемых на удалённых серверах. Используя синтаксис в стиле Blade, вы легко можете настроить задачи для развёртывания, Artisan-команды и прочее.

Envoy требует PHP 5.4 или выше и работает только на ОС Mac/Linux.

Установка

Сначала установите Envoy с помощью команды Composer shglobal:

shcomposer global require "laravel/envoy=~1.0"

Не забудьте поместить каталог ~/.composer/vendor/bin в ваш ПУТЬ, чтобы исполняемый файл envoy мог быть найден при запуске команды shenvoy в терминале.

Затем создайте файл Envoy.blade.php в корне вашего проекта. Вот пример для начала:

@servers(['web' => '192.168.1.1'])

@task('foo', ['on' => 'web'])
  ls -la
@endtask

Как видите, массив @servers определён в начале файла. Вы можете ссылаться на эти сервера в параметре on при объявлении задач. Поместите в ваши объявления @task тот Bash-код, который будет запускаться на сервере при исполнении задачи.

Для простого создания стаб-файла Envoy используйте команду shinit:

shenvoy init user@192.168.1.1

Запуск задач

Для запуска задачи используйте команду shrun вашего Envoy:

shenvoy run foo

При необходимости вы можете передать переменные в файл Envoy с помощью ключей командной строки:

shenvoy run deploy --branch=master

Вы можете использовать параметры с синтаксисом Blade, к которому привыкли:

@servers(['web' => '192.168.1.1'])

@task('deploy', ['on' => 'web'])
  cd site
  git pull origin {{ $branch }}
  php artisan migrate
@endtask

Автозагрузка

Для объявления переменных и выполнения общих PHP-задач в файле Envoy вы можете использовать директиву @setup:

@setup
  $now = new DateTime();

  $environment = isset($env) ? $env : "testing";
@endsetup

А для подключения любых PHP-файлов используйте директиву @include:

@include('vendor/autoload.php');

Несколько серверов

Вы легко можете запускать задачи на нескольких серверах. Просто перечислите эти сервера в объявлении задач:

@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

По умолчанию задачи будут выполняться на каждом сервере поочерёдно. То есть задача будет завершаться на первом сервере перед переходом к выполнению на следующем.

Параллельное выполнение

Если вы хотите запускать задачи на нескольких серверах параллельно, просто добавьте парметр parallel в объявление задач:

@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

Макрос задач

Макрос позволяет вам определить набор задач, которые будут запускаться последовательно с помощью одной команды. Например:

@servers(['web' => '192.168.1.1'])

@macro('deploy')
  foo
  bar
@endmacro

@task('foo')
  echo "HELLO"
@endtask

@task('bar')
  echo "WORLD"
@endtask

Теперь макрос deploy может быть запущен одной простой командой:

shenvoy run deploy

Оповещения

HipChat

Вы можете посылать оповещение в чат HipChat своей команды после запуска задачи с помощью простой директивы @hipchat:

@servers(['web' => '192.168.1.1'])

@task('foo', ['on' => 'web'])
  ls -la
@endtask

@after
  @hipchat('token', 'room', 'Envoy')
@endafter

Вы также можете задать своё собственное сообщение в чат HipChat, в котором можете использовать любые переменные, объявленные в @setup или подключенные с помощью @include:

@after
  @hipchat('token', 'room', 'Envoy', "$task ran on [$environment]")
@endafter

Это удивительно простой способ держать вашу команду в курсе запущенных на сервере задач.

Slack

Следующий синтаксис используется для отправки оповещений в Slack:

@after
  @slack('team', 'token', 'channel')
@endafter

Обновление Envoy

Для обновления Envoy просто запустите команду shself-update:

shenvoy self-update

Если ваш Envoy установлен в /usr/local/bin, вам может потребоваться shsudo:

+ 4.2

добавлено в 4.2 ()

shcomposer global update
+ 4.1

добавлено в 4.1 ()

shsudo envoy self-update

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.