Deployer-便利で柔軟なアプリケーション展開

間違いなく、このトピックは多くの人々によって穴に陥ったと思います-それにもかかわらず、 プロジェクトに対して展開が行われるべきです-しかし、私はそれを上げて、何らかの奇妙な理由で、まだ何もないことを説明します彼らはHabréについて書きました。実際、ロシア語の部分では、彼についてはほとんど書かれていません。 この誤解を修正してください。







Deployerは多くの点で優れています。 展開のスクリプトコードは短いです。 それは古き良きPykhchanskyで書かれています-つまり、ほとんどの場合、サーバーに他のツールを個別にインストールする必要はありません。 存在する場合、PHPは通常1つのコマンドで任意のサーバーにインストールされます。 彼のプロジェクトで彼をzayuzatしてみませんか?







あるAnton Medvedevがユーティリティを書いた;ところで、彼はかなり楽しいブログを持っています。 ありがとうアントン:)







最初のコミットは2013年に既に行われており、ツールはまだゆっくりと開発されています。 彼には、彼に関するすべてのドキュメントを見つけることができる素晴らしいサイトもあります。







私が個人的にこのツールが提供するもののほとんどが気に入っているのは、新しいリリースが失敗した場合、最後の「作業中の」リリースにすばやくロールバックできることです。 また、新しいリリースを「ロールアウト」しようとすると、何かがおかしい(移行が適用されず、フロントエンドファイルがコンパイルされず、テストが実行されなかった..)-現在動作中のアプリケーションが何らかの形で影響を与えない-動作する何も起こらなかったかのように。 実際、Deployerは、新しい「リリース」が完全にインストールされて準備ができるまで、現在アクティブなリリースを示すディレクトリ内のリンクを変更しません。







Deployerで解決できないのは、データベースへの移行の適用で起こりうる問題だけです。 しかし、これは一般的に難しいトピックです。この場合、エレガントなソリューションが存在するかどうかはわかりません。 存在する場合は、どれを知ってうれしいでしょう。







リリースフォルダ構造



プロジェクト全体は、 current



releases



shared



3つのフォルダーに分割されます。 一般に、これはそのようなツールのかなり一般的な形式であり、本当に便利です。 私のLaravelプロジェクトの1つで、この構造が次のようになっているとしましょう。













current-最後に正常にアセンブルされたリリースのフォルダーへのリンク、つまり 現在のアプリケーション。

releases



-コンパイルされたすべてのリリース。 デフォルトでは、最後の3つのリリースのみが保存され、この値は簡単に変更できます。

shared



-すべての「共通」ファイルがあるフォルダー。すべてのリリースに同時に適用され、毎回再作成しないでください。 たとえば、 .env



ファイル、ユーザーがアップロードしたファイルなど。







アプリケーション展開Laravelスクリプトの例



個人的にサーバーにアクセスし、展開スクリプトを実行して、その作業のプロセスを監視するのが好きです。 展開中に何か問題が発生した場合、私はいつでも緊急の対策を講じることができるためです。 そして私が知っているように、人々は通常ローカルマシンから同様のスクリプトを実行します。これはSSH経由でサーバーに接続してデプロイを生成します。 一度に複数のマシンでこれを行う必要がある場合、このアプローチは確かに便利です。 ところで、Deployerを使用すると、複数のマシンに一度にデプロイできます。







当然、このスクリプトを実行する前に、まずシステムにDeployerインストールする必要があります。







Laravel 5プロジェクトの1つでは、 deploy.php



デプロイdeploy.php



は次のようになります。







 <?php //     Deployer' require 'recipe/common.php'; require 'recipe/laravel.php'; //     localServer('local', 'localhost') ->user('{-}') ->env('deploy_path', '/path/to/project/dir') ->stage('local') ; set('repository', '{-git-.git}'); env('branch', '{--}'); env('git_cache', true); //     ,       //        ,     //        shared set('shared_dirs', [ 'storage/app', 'storage/framework/cache', 'storage/framework/sessions', 'storage/framework/views', 'storage/logs', 'public/uploads', 'node_modules', ]); //  .    ,    //    Laravel    ""   //  - .env set('shared_files', ['.env']); // ,       //  .    -    set('writable_dirs', ['storage', 'vendor', 'public/uploads' ]); set('http_user', '{-}'); set('composer_command', '/usr/local/bin/composer'); //    Composer' //   .  NPM  task('deploy:install-npm', function() { run('cd {{release_path}} && npm i'); }); //   :    ,    //    Grunt.js task('deploy:compile-assets', function() { run('cd {{release_path}} && grunt deploy-production'); }); //   task('deploy:migrations', function() { run('cd {{release_path}} && php artisan migrate --force'); }); //      task('deploy:create-route-cache', function() { run('cd {{release_path}} && php artisan route:cache'); }); //      task('deploy:create-config-cache', function() { run('cd {{release_path}} && php artisan config:cache'); }); //     task('deploy:clean-cached-data', function() { run('cd {{release_path}} && rm bootstrap/cache/*'); }); //  PHP    task('reload:php-fpm', function() { run('sudo /usr/sbin/service php7.0-fpm restart'); }); task('deploy', [ 'deploy:prepare', 'deploy:release', 'deploy:update_code', //      'deploy:shared', //      'deploy:vendors', //    'deploy:clean-cached-data', //     'deploy:create-route-cache', //      'deploy:create-config-cache', //      'deploy:install-npm', //  NPM  'deploy:compile-assets', //    'deploy:migrations', //   'deploy:symlink', //       'cleanup', //    ])->desc('Deploy your project'); after('deploy', 'success'); //    php after('deploy', 'reload:php-fpm'); //      -    after('rollback', 'reload:php-fpm');
      
      





上記のファイルの横にあるいくつかの小さなファイル、 start-deploy.sh



rollback-deploy.sh



ます。 展開をすばやく起動するか、それに応じてロールバックするため。







ファイルstart-deploy.sh









 dep deploy local
      
      





ファイルrollback-deploy.sh









 dep rollback local
      
      





したがって、展開プロセスを開始するには、Bashに1つのコマンドを入力するだけです。







 ./start-deploy.sh
      
      





したがって、ご覧のとおり、コマンドを1つだけ入力すると、プロジェクトの展開に必要なすべての手順をサーバーに強制的に実行させます。 そして、すべてがうまくいった場合にのみ、 current



フォルダーは新しいリリースへのリンクを変更し、このすべての後にPHPを再起動します。







一般的に、これが私が伝えたいと思ったすべてです。 これが誰かに役立つことを願っています。 そしてもちろん、他の人々がアプリケーションをどのように展開しているかについての意見を知ることは興味深いでしょう。








All Articles