カピフォニー または、カピストラーノを通じてsymfonyプロジェクトをデプロイします

私はsymfonyフレームワークを使用して1年間PHPでプログラミングをしてきましたが、本当に楽しいと感じました。 ただし、このフレームワークでは完全にカバーされていないWebサイト開発プロセスがいくつかあり、必須ではありません=)
これらのプロセスの1つは、運用サーバーでのプロジェクトの展開または展開と更新です。 このような日常的な操作を実行するために、多くのスクリプトが作成され、最も人気のあるスクリプトの1つがCapistranoです。 習得は非常に簡単で、機能は完璧で、構成は非常に柔軟ですが、箱から出してすぐに、それが作成されたアプリケーションのRoR展開の下に閉じ込められます。
今日は、Capistranoを使用してsymfonyプロジェクトをデプロイする方法を説明しようとします。

capifyとは何ですか?


Capistrano-サイトをロールアウトするルーチンを実行し、プロジェクトを以前のバージョン(以前の展開)にタイムリーにロールバックするための柔軟な手段を提供するルビーライブラリ。
SSH経由で接続することにより、Capistranoはリモートディレクトリで動作し、現在のコードで新しいディレクトリを作成し、必要なシンボリックリンクを作成します。 Capistranoは、SSHサーバーを介して他のマシンから実際のコードをコピーし、GITまたはSVNリポジトリを使用できます。 Capifyはそこで終わりません。 原則として、適切に構成されていれば、スクリプトは任意の数のリモートシステム(もちろんアクセスできる)で任意のUNIXコマンドセットを実行できます。 ただし、Capistranoが主にアプリケーションのリモート展開用に用意しているスクリプトと設定の最大数は、今日話し合っています。
capify-Capistrano configを作成するためのコマンド

標準展開プロセス


展開プロセスの実装は、アトミック操作タスク(タスク)に分割され、それぞれが「ロールアウト」の個別の側面を担当します。 この場合、展開のグローバル実行は本格的なトランザクションとして動作し、少なくとも1つの操作が実行されない場合、プロセス全体がキャンセルされ、リモートファイルシステムは展開前の状態に戻ります。
capistranoの基本コマンド:
  1. capify . -現在のディレクトリにファイルを作成して、リモートシステムへのアクセスを構成し、プロセスを構成します。 これらのファイル:
    1. capfile -capifyコマンドによってプルされるメインスクリプト
    2. config / deploy.rb - Capfileに含まれるプロセス設定。 次のコマンドを実行する前に、サーバーと設定へのすべてのパスを登録する必要があるのはこのファイルです

  2. cap deloy:setupリモートサーバーでの後続の展開プロセスのためにファイル構造を展開します
  3. cap deploy実行します。 同時に、プロジェクトの新しいディレクトリが作成され、共有リソースへのシンボリックリンクが作成され、現在のリンクがこのディレクトリに作成され、現在のコードがWebサーバーにスリップされます。
  4. cap rollback前の展開にロールバックします。 この場合、現在のバージョンのディレクトリは(ハードロールバックで)削除され、現在のシンボリックリンクは以前の展開ディレクトリによって中断されます


なぜcapifonyが必要なのですか?


すでに述べたように、capistranoは元々RoRアプリケーションをデプロイするために作成されたものであり、このフレームワークにアタッチする場所が(そのままで)あります。 たとえば、Railsプロジェクトとsymfonyプロジェクトの共有フォルダーの構造とリストは異なります。 symfonyプロジェクトをデプロイするとき、 symfony plugin:publish-assetsなどのいくつかのタスクも実行する必要がありsymfony plugin:publish-assetsからアセットへのsymlinksを作成するためのsymfony plugin:publish-assets 、キャッシュをフラッシュするためのsymfony cc 、およびキャッシュおよびweb /アップロードフォルダーへのアクセス許可を復元するためのsymfony fix-perms
これらすべての問題を解決するために、基本的なcapistranoデプロイメントスクリプトをわずかに拡張し、capifonyを生み出しました。
スクリプトをダウンロードして、開発に参加できます: http : //github.com/everzet/capifony/tree/master

使用する


したがって、本番サーバーに展開する必要があるプロジェクトがあります。 私たちが持っているこのプロジェクトは、本番サーバーのリモートgitリポジトリに保存されています(gitではない可能性があり、SSH経由でアクセスできる任意の場所にコードを保存できます。また、Capistranoが知っている任意の形式で保存できますが、彼は多くを知っています=)。
開始するには、アップロードする必要があり、リモートgitリポジトリがサーバー上にあるプロジェクトがあるローカルディレクトリに移動します。
  1. ルートで、capify capify .を実行しcapify . ルートにCapfileを作成し 、config /にdeploy.rbを作成します
  2. githubからcapifony.rbファイルをダウンロードし、config /
  3. Capfileの最後にload 'config/capifony' 追加しload 'config/capifony'
  4. 最後に、deploy.rbでリモートサーバーへの接続設定を規定します。

    set :application, "YOUR_APPLICATION_NAME" <br> set :repository, "YOUR_SSH_SERVER_NAME:/PATH/TO/repos/#{application}.git" <br> set :deploy_to, "/PATH/TO/www/#{application}.com" <br> set :scm, "git" <br><br>default_run_options[:pty] = true <br>ssh_options[:forward_agent] = true <br><br>server "YOUR_SSH_SERVER_NAME" , :web, :app, :db <br><br> * This source code was highlighted with Source Code Highlighter .


  5. 次に、 cap deploy:setupコンソールからcap deploy:setupを呼び出してリモートファイル構造を構成し、 cap deployを実行して展開を実行します。 そして、その後の展開中に突然何かがうまくいかなかった場合も忘れないでください(展開は成功しましたが、たとえばサイトは落ちました)- cap rollbackが役立ちます


ディレクトリlog /web /アップロードは展開に関与しないことに注意してください。 デプロイメント間で持続する共有リソースです。 そのため、Web /アップロード用のファイルのセットをすでに蓄積している場合は、/ PATH / TO / www /#{application►.com/ shared / web / uploads /のサーバーに手動でアップロードする必要があります
以上です。 この記事が気に入ったら、教えてください。次回は素晴らしいsymfonyとともに開発の別の興味深い側面についてお話します...

upd: 1つのこと忘れました。 標準では、symfonyはプロジェクトを生成するとき、config / ProjectConfiguration.class.phpでsymfonyへの絶対パスを設定します。これは作業マシンと本番で異なる場合があります。 プロダクションと作業マシンの両方で問題を解決するために、ライブラリディレクトリ(symfonyを含む)へのパスをinclude_pathに追加します(注:include_path = "。:/ Php / include:/ opt / local / lib / php")とへのパスProjectConfiguration.class.phpを相対require_once 'symfony / autoload / sfCoreAutoload.class.php'に変更します;

Source: https://habr.com/ru/post/J67613/


All Articles