これらのプロセスの1つは、運用サーバーでのプロジェクトの展開または展開と更新です。 このような日常的な操作を実行するために、多くのスクリプトが作成され、最も人気のあるスクリプトの1つがCapistranoです。 習得は非常に簡単で、機能は完璧で、構成は非常に柔軟ですが、箱から出してすぐに、それが作成されたアプリケーションのRoR展開の下に閉じ込められます。
今日は、Capistranoを使用してsymfonyプロジェクトをデプロイする方法を説明しようとします。
capifyとは何ですか?
Capistrano-サイトをロールアウトするルーチンを実行し、プロジェクトを以前のバージョン(以前の展開)にタイムリーにロールバックするための柔軟な手段を提供するルビーライブラリ。
SSH経由で接続することにより、Capistranoはリモートディレクトリで動作し、現在のコードで新しいディレクトリを作成し、必要なシンボリックリンクを作成します。 Capistranoは、SSHサーバーを介して他のマシンから実際のコードをコピーし、GITまたはSVNリポジトリを使用できます。 Capifyはそこで終わりません。 原則として、適切に構成されていれば、スクリプトは任意の数のリモートシステム(もちろんアクセスできる)で任意のUNIXコマンドセットを実行できます。 ただし、Capistranoが主にアプリケーションのリモート展開用に用意しているスクリプトと設定の最大数は、今日話し合っています。
capify-Capistrano configを作成するためのコマンド
標準展開プロセス
展開プロセスの実装は、アトミック操作タスク(タスク)に分割され、それぞれが「ロールアウト」の個別の側面を担当します。 この場合、展開のグローバル実行は本格的なトランザクションとして動作し、少なくとも1つの操作が実行されない場合、プロセス全体がキャンセルされ、リモートファイルシステムは展開前の状態に戻ります。
capistranoの基本コマンド:
capify .
-現在のディレクトリにファイルを作成して、リモートシステムへのアクセスを構成し、プロセスを構成します。 これらのファイル:
- capfile -capifyコマンドによってプルされるメインスクリプト
- config / deploy.rb - Capfileに含まれるプロセス設定。 次のコマンドを実行する前に、サーバーと設定へのすべてのパスを登録する必要があるのはこのファイルです
-
cap deloy:setup
リモートサーバーでの後続の展開プロセスのためにファイル構造を展開します -
cap deploy
実行します。 同時に、プロジェクトの新しいディレクトリが作成され、共有リソースへのシンボリックリンクが作成され、現在のリンクがこのディレクトリに作成され、現在のコードがWebサーバーにスリップされます。 -
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リポジトリがサーバー上にあるプロジェクトがあるローカルディレクトリに移動します。
- ルートで、capify
capify .
を実行しcapify .
ルートにCapfileを作成し 、config /にdeploy.rbを作成します - githubからcapifony.rbファイルをダウンロードし、config /
- Capfileの最後に
load 'config/capifony'
を追加しload 'config/capifony'
- 最後に、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 .
- 次に、
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'に変更します;