Как сделать так, чтобы приложение 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
Другие вопросы по тегам