Как сделать так, чтобы приложение laravel 4 само обновлялось?
Я создаю небольшой CMS, и я хотел бы сделать функцию самообновления к нему. (что-то вроде WordPress сделал, но, честно говоря, я не знаю, как это работает)
Так вот, где я сейчас нахожусь:
- Каждый раз, когда клиент входит в систему, на мой сервер отправляется запрос на публикацию curl, который отправляет текущую версию cms, некоторые данные для аутентификации, и на данный момент это все.
- Ответ возвращается, и в новой версии я получаю полное описание, показываю его клиенту во внешнем интерфейсе и, если он хочет обновить, я загружаю zip-файл.
Это где я застрял. Я не знаю, если это хороший путь, и даже если это так, как мне поступить.
- После загрузки я хотел бы распаковать его, перезаписать старые файлы новыми и внести все необходимые изменения, возможно, выполнить некоторые миграции и так далее.
- Сделайте несколько журналов, резервных копий, и когда все это будет сделано, проверьте, все ли в порядке. (Не знаю, возможно ли это)
Поэтому, пожалуйста, кто-то может дать мне несколько указаний, идей, любые советы будут с благодарностью.
1 ответ
Одним из способов является использование этого пакета, который я создал: https://github.com/antonioribeiro/deeployer. Идея заключается в том, чтобы обновлять приложение каждый раз, когда вы делаете git push
GitHub или Bitbucket. Поскольку он использует Taylor's Laravel Envoy Task Runner, обновление вашего приложения действительно легко:
Проверьте эту страницу о том, как установить Laravel Envoy Task Runner: http://laravel.com/docs/ssh
Установите Deeployer на ваше приложение:
composer require pragmarx/deeployer dev-master
Создайте маршрут для самостоятельного обновления:
Route::post('deploy', function()
{
return Deeployer::run();
});
Создать файл Envoy.blade.php
в корне вашего приложения с вашими командами обновления:
@task('https://github.com/you/repo-name:master', ['on' => ['localhost']])
git pull origin master
composer dump-autoload --optimize
php artisan migrate
@endtask
И тогда вам просто нужно добавить webhoot в ваше приложение в:
https://github.com/yourname/yourapplication/settings/hooks
Указывая на ваш маршрут:
http://yourdomain.com/deploy