Практически на всех последних проектах применяем очень полезный и удобный инструмент для деплоя rocketeer
Для тех кто вообще не знаком с инструментами подобного класса - вкратце, это "штука" которая по SSH зайдет на удаленный хост и сделает на нем действия от вашего имени, необходимые для обновления/разворачивания проекта.
Весь rocketeer собран в 1 большой phar, который предоставляет базовые действия в консоли: deploy, rollback, ignite и некоторые другие. Если вы используете composer - данная модель покажется очень удобной. А если не используйте - срочно начинайте )
Применение
Предположим у вас есть проект, проект конечно-же живет в git (или прости-господи svn), кладете в корень свежескачанный rocketeer.phar
В корне проекта выполняете
php rocketeer.phar ignite
Отвечаете на вопросы, получаете папку .rocketeer в корне проекта, в папке лежат конфиги деплоя.
Рихтуете конфиги напильником при необходимости, обычно все просто и понятно, урл гита, ssh доступ на хост деплоя, куда положить, какие папки проекта "расшарить".
В корне проекта выполняете
php rocketeer.phar deploy
Если все прошло удачно и без проблем (что конечно первый раз бывает редко) то идете по ссш убедиться что проект там развернут в указанной папке
Бинго!
Если все же что-то идет не так - в папке с конфигами есть logs папка, туда сохраняются все журнаты деплоев и для разбора полетов в первую очередь смотреть нужно их.
Физически rocketeer, используя SSH, заходит на удаленный хост и с него делает git clone. После чего пытается композером установить зависимости и выполнить скрипты, заданные в конфиге.
Нюансы
- Rocketeer хорошо дружит с composer, потому на сервере он должен быть установлен глобально.
- Rocketeer вынимает проект из гита, указанной remote ветки, потому что не пушнуто то не задеплоится
- Rocketeer умеет некоторые папки проекта сделать "расшаренными", это значит что они между деплоями не меняются, удобно для папок аплоада контента, папок логов и тп. Тут нюанс важный, git не создает физически пустые папки при клоне, потому папки которые вы шарите должны содержать хоть один файл
Достоинства rocketeer
- Компактный - 1 phar
- Из коробки работает с composer
- Простой - в целом дефолтный конфиг годится для 90% случаев
- Поддерживает несколько окружений, можете деплоить на прод, на стейджинг, на ливтест и все это описывается одним конфигом
- Работает на винде. С оговорками
Недостатки rocketeer
- Скудная документация, она вроде есть но информации в ней минимум
- Однопоточность - если вам нужно задеплоить код на 12 серверов то rocketeer будет делать это строго по очереди и в одном потоке, в итоге абсолютно легко получить время деплоя десятки минут на крупных проектах. Благо что все эти минуты можно просто пить кофе
- Что еще хуже, релизные симлинки на версии rocketeer ставит по очереди, задеплоил 1 сервер, обновил на нем релиз, пошел на второй. В итоге у вас проект может 10 минут жить с разными версиями на серверах, что часто недопустимо.
- На винде работает не на 100% ) На windows команда ignite работает аж никак, делает вид что создает дефолтные конфиги но по факту не сохраняет, надеюсь скоро исправят, пока приходится руками делать и/или копировать между проектами
- Внутри код написан в четком соответствии с названием инструмента, осознать эти rocket-science получается далеко не всегда
Резюме - кому rocketeer подходит:
- небольшим проектам на 1-3,4 сервера
- проектам у которых версионность кешей завязана на полный путь релиза, и с-но конфликты версий кода маловероятны
Кому не подходит - действительно большим проектам, обычно на таких проектах механизмы автодеплоя идут другими способами
И на последок, пару хитов которые нервы поберегут:
Если используется fpm - нужно делать так, в противном случае opcache не будет подхватывать код новой версии после деплоя:
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
Все опции деплоя можно перекрыть для конкретного окружения, например так выглядит изменение удаленной папки деплоя для продакшен-конекшена
'on' => [ // Stages configurations 'stages' => [ ], // Connections configuration 'connections' => [ 'production' => [ 'env' => 'production', 'remote' => [ 'root_directory' => '/home/ubuntu/project/', ], ] ], ]
Тут также устанавливается переменная env, к которой потом можно получить доступ в хуках rocketeer, ниже после деплоя накатываются миграции project5
// Tasks to execute after the core Rocketeer Tasks 'after' => [ 'setup' => [], 'deploy' => [ function($task) { $env = $task->rocketeer->getOption('env'); $output = $task->runForCurrentRelease('php app/run.php --env='.$env.' propel-migrate'); $task->toOutput($output); } ], 'cleanup' => [], ],
Возможности rocketeer очень обширны, надеюсь разработчиков возьмет под крыло кто-то вроде Фабьена и проект получит полную исчерпывающую документацию.