Развертывание приложения с Deployer

13 July 2013
1747

Есть множество инструментов развертывания, даже на PHP. Среди них Capistrano (Ruby), Capifony для Symfony (Ruby), Magallanes (PHP), Phing (PHP) и множество других.
Но ни один из них не является достаточно простым и функциональным, как Deployer.

Я для деплоя своих Symfony приложений использую capifony. Однако, когда возникает необходимость деплоя на share хостинг, с capifony возникает много проблем. Плюс мне не нравится что для деплоя PHP приложений приходиться ставить и настраивать Ruby. Поэтому я решил создать простой инструмент на PHP для развертывания любых приложений. Так родилась идея Deployer.


Deployer представляет из себя всего один phar файл, который нужно подключить в свой скрипт развертывания. Вот пример такого скрипта (deploy.php):

<?php
require 'deployer.phar';

task('prod_server', function () {
    connect('prod.ssh.domain.com', 'user');
});

task('test_server', function () {
    connect('test.ssh.domain.com', 'user');
});

task('upload', function () {
    upload(__DIR__, '/home/domain.com');
});

task('clear', function () {
    run('php bin/clear');
});

task('prod', ['prod_server', 'upload', 'clear']);
task('test', ['test_server', 'upload', 'clear']);

start();

Теперь можно выполнить команду php deploy.php prod и обновить приложение на сервере.
Может показаться что Deployer написан в процедурном стиле, но это не так. Эти функции всего лишь сахар для уменьшения количества кода необходимого для написания. Каждая из этих функций является алиасом к методу из Deployer\Tool. Используется Context паттерн для доступа к этому классу.


Можно не подключать эти функции и тогда использовать методы:

<?php
$tool = new Deployer\Tool();

$tool->task('connect', function () use ($tool) {
    $tool->connect('ssh.domain.com', 'user', 'password');
});

Разработка все ещё продолжается. Я приглашаю всех желающих помочь с развитием проекта. Что ещё предстоит сделать:
  • Добавить поддержку rsync
  • Добавить поддержку расширения pecl ss2

Проект выложен на GitHub: deployphp/deployer
А так же есть сайт: deployer.org
Hi, I’m Anton. If you liked the post share it
If you found a typo edit post on GitHub.