SSH
11.x
.
Почему это важно?
Настройка
В состав Laravel входит библиотека для коннекта к серверам по ssh и исполнения там команд, что позволяет писать artisan-команды для работы на удаленных серверах. Для работы с этой библиотекой Laravel предоставляет фасад SSH
.
Файл настроек этой библиотеки – app/config/remote.php
. Массив connections
содержит список доступных серверов. Доступ к серверу может осуществляться по паролю или ключу.
Примечание: Если вам надо запускать разнообразные задачи на сервере, попробуйте Envoy.
Использование ssh
Запуск команды на дефолтном сервере
SSH::run(array(
'cd /var/www',
'git pull origin master',
));
Запуск команды на указанном сервере
SSH::into('staging')->run(array(
'cd /var/www',
'git pull origin master',
));
Получение ответа
Вы можете ловить текстовый вывод исполненных команд функцией-замыканием, переданной вторым аргументом:
SSH::run($commands, function($line)
{
echo $line.PHP_EOL;
});
Задачи
Вы можете объединять несколько команд в т.н. задачу:
SSH::into('staging')->define('deploy', array(
'cd /var/www',
'git pull origin master',
'php artisan migrate',
));
Когда задача задана, вы можете исполнить её:
SSH::into('staging')->task('deploy', function($line)
{
echo $line.PHP_EOL;
});
SFTP загрузка
Класс SSH
позволяет загрузить файл по SFTP, при помощи методов get
и getString
.
SSH::into('staging')->get($remotePath, $localPath);
$contents = SSH::into('staging')->getString($remotePath);
SFTP аплоад
Таже вы можете закачивать файлы на удаленный сервер по SFTP:
SSH::into('staging')->put($localFile, $remotePath);
SSH::into('staging')->putString($remotePath, 'Foo');
Показ логов
Laravel имеет удобное средство для просмотра последних изменений лог-файлов на удаленных серверах – т.н. tailing, когда на экран выводится только то, что добавилось в конец файла. Просто укажите после artisan-команды tail имя удаленного сервера.
php artisan tail staging
php artisan tail staging --path=/path/to/log.file
Envoy
- Установка
- Запуск задач
- Запуск на нескольких серверах
- Паралельное выполнение
- Макросы
- Уведомления
- Обновление Envoy
Envoy – это инструмент для запуска задач на удаленных серверах. Он предоставляет простой синтаксис для записи операций деплоя, запуска artisan-команд и т.п., который базируется на синтаксисе Blade.
Примечание: Envoy требует PHP 5.4 и выше, запускается на Mac или Linux.
Установка
Установите Envoy глобально в системе:
composer global require “laravel/envoy=~1.0”
Проверьте, чтобы ~/.composer/vendor/bin
был у вас в PATH. Для проверки наберите envoy
в терминале – должен вывестись краткий хелп.
Создайте
Envoy.blade.php
в корне вашего проекта. Например, задача ожет быть такой:@servers(['web’ => '192.168.1.1'])
@task('foo’, ['on’ => 'web’]) ls -la @endtask
Директива @servers
задает список доступных серверов. Внутри @task
располагаются bash-команды. На каком сервере запускать задачу говорит параметр 'on’.
Команда init
создает заготовку envoy-файла:
envoy init user@192.168.1.1
Запуск задач
Для запуска задач служит команда run
envoy run foo
Вы можете передать переменную в вашу задачу:
envoy 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
Инициализация
Вы можете использовать директиву @setup
для объявления переменных. Поддерживается синтаксис PHP.
@setup
$now = new DateTime();
$environment = isset($env) ? $env : "testing";
@endsetup
Вы также можете использовать директиву @include
чтобы подключить любой php-файл.
@include('vendor/autoload.php');
Запуск на нескольких серверах
Вы можете запустить выполнение задачи на нескольких серверах, задав их имена в массиве 'on’:
@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'
в true
.
@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
Макросы
Макросы позволяют объединять несколько @task
:
@servers(['web' => '192.168.1.1'])
@macro('deploy')
foo
bar
@endmacro
@task('foo')
echo "HELLO"
@endtask
@task('bar')
echo "WORLD"
@endtask
Полученный макрос deploy
может быть вызван как обычная команда:
envoy run deploy
Уведомления
После выполнения задачи envoy может послать уведомление об этом. В данный момент поддерживается только чат для разработчиков HipChat.
Для отсылки нотификации в чат групповой разработки HipChat служит директива @hipchat
.
@servers(['web' => '192.168.1.1'])
@task('foo', ['on' => 'web'])
ls -la
@endtask
@after
@hipchat('token', 'room', 'Envoy')
@endafter
Чтобы изменить сообщение, вы можете задействовать переменные, объявленные в директиве @setup
, или взятые из подключенного @include
php-файла:
@after
@hipchat('token', 'room', 'Envoy', "$task ran on [$environment]")
@endafter
Slack
Для отсылки уведомления в Slack служит директива @slack
:
@after
@slack('team', 'token', 'channel')
@endafter
Обновление Envoy
Для обновления Envoy используйте команду self-update
envoy self-update
Если вы установили envoy в /usr/local/bin
:
composer global update