web-dev-qa-db-ja.com

あなたの好みのPHP展開戦略は何ですか?

PHPで新しいプロジェクトを始めています。他の開発者から、PHPデプロイメントの優先戦略についてフィードバックをもらいたいと思います。物事を少し自動化して、変更がコミットされるとすぐに開発または本番サーバーに移行できるようにするのが大好きです。

RubyでCapistranoを使用した展開、およびいくつかの基本的なシェルスクリプトの経験があります。

私が最初に頭を飛び込む前に、他の人が彼らのプロジェクトでどのようにこれにアプローチしたかを聞くことは素晴らしいことです。

さらに詳しい情報

現在、開発者はサイトのローカルインストールに取り組み、Subversionリポジトリへの変更をコミットします。 svnからタグ付きリリースをエクスポートし、サーバーにアップロードすることにより、初期展開が行われます。

通常、追加の変更は、変更されたファイルを手動でアップロードすることにより、少しずつ行われます。

159
GloryFish

PHPの場合、 Phing ビルドスクリプトを使用したSVNが最適です。 Phingは [〜#〜] ant [〜#〜] に似ていますが、PHPで記述されているため、PHP開発者が必要に応じて変更するのがはるかに簡単になります。 。

展開ルーチンは次のとおりです。

  • 誰もが職場の同じローカルサーバーで開発し、すべての開発者は自宅のマシンにもチェックアウトを行います。
  • コミットは、ステージングサーバーを更新するコミット後フックをトリガーします。
  • テストが成功した場合、ステージングサーバーでテストが実行されます-続行します。
  • Phingビルドスクリプトが実行されます。
  • 本番サーバーを停止し、ドメインを「作成中」ページに切り替えます
  • 実動チェックアウト時にSVN更新を実行します
  • スキーマデルタスクリプトを実行します
  • テストを実行する
  • テストが失敗した場合-ロールバックスクリプトを実行する
  • テストに合格すると、サーバーは本番チェックアウトに戻ります

phpUnderControl もあります。これは継続的インテグレーションサーバーです。 Webプロジェクトが正直であることはあまり有用ではありませんでした。

108
Eran Galperin

私は現在PHP Gitを使用 を展開しています。Gitの最新のコピーで本番サーバーを更新するために必要なのは、単純なgit Push本番です。それは簡単で高速です。 Gitは、プロジェクト全体ではなく差分のみを送信するのに十分なスマートさを備えています。また、ハードウェアに障害が発生した場合にリポジトリの冗長コピーをWebサーバーに保持するのにも役立ちます(安全のためにGitHubにプッシュします) 。

23
Kyle Cronin

Webistrano を使用します。これはCapistranoのWebフロントエンドであり、非常に満足しています。

Webistranoを使用すると、SVN、GITなどからのマルチステージ、マルチ環境の展開が可能になります。組み込みのロールバックサポート、web、db、appなどの個別のサーバーロールのサポートがあり、並行して展開します。ステージごとなど、複数のレベルで構成パラメーターをオーバーライドし、すべてのデプロイの結果をログに記録し、オプションでメールで送信できます。

CapistranoとWebistranoはRubyアプリケーションですが、デプロイメントの「レシピ」の構文は、あらゆるPHPプログラマーが理解できるほど簡単で強力です。元々はCapistranoはRuby on Railsプロジェクトですが、簡単に収容できますPHPプロジェクト。

一度設定すれば、ステージングバージョンをデプロイするテスターなど、プログラマー以外でも簡単に使用できます。

最速の展開を実現するために、リモートサーバーのsvn作業コピーキャッシュを更新し、結果をハードリンクする fast_remote_cache メソッドをインストールしました。

14
Martijn Heemels

Apache Ant を使用して、異なるターゲット(dev、QA、およびlive)にデプロイします。 Antは、Javaデプロイメントで動作するように設計されていますが、任意のファイルをデプロイするための非常に便利な一般的なケースソリューションを提供します。

Build.xmlファイルの構文は非常に簡単に習得できます。コマンドラインでantプログラムを呼び出すときに実行されるさまざまなターゲットとその依存関係を定義します。

たとえば、CVSサーバーから最新のヘッドリビジョンをチェックアウトし、適切なファイルをビルドディレクトリに(filesetタグを使用して)コピーするcvsbuildターゲットに依存するdev、QA、liveのターゲットがあります。ビルドディレクトリを適切なサーバーにrsyncします。学ぶべきいくつかの癖があり、学習曲線は完全に平坦ではありませんが、私は何年も問題なくこの方法でやってきたので、私はあなたの状況にそれをお勧めしますこのスレッドで表示されます。

7
notneilcasey

Gitを使用して手動で作業を行います。開発用の1つのリポジトリ。git Push --mirror 'は公開リポジトリに追加され、ライブサーバーはそこから3番目のリポジトリになります。私が思うに、この部分はあなた自身のセットアップと同じです。

大きな違いは、私が取り組んでいるほぼすべての変更にブランチを使用し(現在5つほどあります)、ブランチ間を行き来する傾向があることです。マスターブランチは、他のブランチをマージする以外は直接変更されません。

マスターブランチから直接ライブサーバーを実行し、別のブランチで作業を終えてマージする準備ができたら、しばらくの間サーバーをそのブランチに切り替えます。壊れた場合、マスターに戻すには数秒かかります。動作する場合、マスターにマージされ、ライブコードが更新されます。 SVNでのこれとの類推は、2つの作業コピーを持ち、シンボリックリンクを介してライブのコピーを指すことになると思います。

6
user42092

自家製の展開スクリプトに代わる方法は、多くの作業を抽象化するサービスとしてのプラットフォームに展開することです。 PaaSは通常、独自のコード展開ツールに加えて、スケーリング、フォールトトレランス(ハードウェアに障害が発生した場合にダウンしない)、通常は監視、ログチェックなどに最適なツールキットを提供します。時間が経過しても最新の状態に保たれる既知の適切な構成(頭痛の種が1つ減ります)。

私が推奨するPaaSは、 dotCloud に加えて、PHP( 彼らのPHPクイックスタート )を参照)また、MySQL、MongoDB、および追加サービス全体をデプロイできます。また、ゼロダウンタイムのデプロイメント、インスタントロールバック、SSLおよびwebsocketの完全サポートなどの素晴らしい機能もあります。

もちろん、そこで働いているので少し偏っています! dotCloudに加えてチェックアウトする価値のある他のオプションは、PagodaboxとOrchestra(現在Engine Yardの一部)です。

お役に立てれば!

ソロモン

3
Solomon Hykes

Phing が数回言及されていることは知っていますが、 phpUnderControl で幸運に恵まれました。私たちにとって

  1. ブランチの個々のコピーをローカルマシンにチェックアウトする
  2. ブランチはテストされ、トランクにマージされます
  3. トランクへのコミットはphpUnderControlによって自動的にビルドされ、テストを実行してすべてのドキュメントをビルドし、データベースデルタを適用します
  4. トランクは品質テストを経て、安定ブランチにマージされます
  5. 繰り返しますが、phpUnderControlは自動的にStableをビルドし、テストを実行し、ドキュメントを生成してデータベースを更新します
  6. 本番環境にプッシュする準備ができたら、本番環境をバックアップし、データベースを更新してからファイルをプッシュするrsyncスクリプトを実行します。誰かがプロモーションを見ていることを確認するために、rsyncコマンドは手動で呼び出されます。
3
dragonmantank

私はパーティーに遅れていますが、私たちの方法を共有すると思いました。 Phingistrano でPhingを使用します。これは、ビルド済みのビルドファイルを介してCapistranoのような機能をPhingに提供します。とてもクールですが、現時点でGitを使用している場合にのみ機能します。

2
Clint

リポジトリから本番サーバーに変更を自動的かつ盲目的に行うのは危険です。コミットされたコードにリグレッションバグが含まれていて、本番アプリケーションに不具合が生じた場合はどうなりますか?

しかし、PHPの継続的インテグレーションシステムが必要な場合、PHPでは Phing が最良の選択だと思います。しかし、私はそれを自分でテストしていません。 scp。

2
Henrik Paul

私自身と私のチームは、capistranoのデプロイのPhing指向の代替を開発しました。また、PHPUnitテスト、phpcs、PHPDocumentorなどのphingで利用可能ないくつかのグッズを組み込みました。 gitのサブモジュールとしてプロジェクトに追加できるgitリポジトリにしましたが、非常にうまく機能します。いくつかのプロジェクトに添付しましたが、モジュール化されているため、いくつかの環境(ステージング、テスト、実稼働など)の任意のプロジェクトで簡単に使用できます。

Phingビルドスクリプトを使用すると、コマンドラインから手動で実行できます。また、HudsonとJenkins ciを使用してビルド/デプロイルーチンを自動化することにも成功しました。

リポジトリはまだ公開されていないため、今すぐリンクを投稿することはできませんが、すぐにオープンソースにすることがあると言われていますので、興味がある場合やお持ちの場合はお気軽にお問い合わせくださいphingとgitを使用した展開の自動化に関する質問。

1

1年遅れですが...私の場合、展開は自動ではありません。コードを展開し、データベース移行スクリプトを自動的に実行するのは危険だと思います。

代わりに、テスト/ステージングサーバーにのみデプロイするためにSubversionフックが使用されます。コードは、テストを実行し、物事が機能することを確認した後、反復の最後に本番にデプロイされます。展開自体には、rsyncを使用してファイルを転送するカスタムメイドのMakefileを使用します。 Makefileは、リモートサーバーで移行スクリプトを実行し、Webサーバーとデータベースサーバーを一時停止/再開することもできます。

1
Rafa

http://controltier.org/wiki/Main_Page

マルチサーバーの展開とメンテナンスに使用します。

1
user258626

サーバーにSVNリリースブランチの作業コピーがあります。サイトの更新(スキーマの変更がない場合)は、SVN更新コマンドを発行するのと同じくらい簡単です。サイトをオフラインにする必要さえありません。

1

Xml構成ファイルの痛みに耐えることができるなら、おそらくPhingが最善の策です。 Symfonyフレームワークには独自のrakeポート(pake)があり、これは非常にうまく機能しますが、Symfonyの他の部分とはかなり密接に結合しています(おそらくそれらを分離できます)。

別のオプションは、カピストラーノを使用することです。明らかに、RubyのようにPHPにも統合されませんが、それでも多くのものに使用できます。

最後に、いつでもシェルスクリプトを作成できます。これまでのところ、それが私がやったことです。

1
troelskn

SVNのデプロイ方法はあまり良くないと思います。なぜなら:

全世界でSVNアクセスを開く必要があります

実動Webサーバーに多くの.svnがあります

Phingはブランチを作成し、すべてのjs/cssを結合し、ステージ構成を置き換えて、すべてのwwwサーバーにsshアップロードする方が良い方法だと思います。

10のwwwサーバーへのsshとsvn upも問題です。

0
Eric Fong