推奨されるphp配備戦略は何ですか?[閉まっている]


161

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

CapistranoとRubyの基本的なシェルスクリプトを使用したデプロイメントの経験があります。

自分で最初に飛び込む前に、プロジェクトで他の人がこれにどのように取り組んでいるのかを聞くのは素晴らしいことです。

さらに詳しい情報

現在、開発者はサイトのローカルインストールに取り組み、変更をsubversionリポジトリにコミットしています。タグ付けされたリリースをsvnからエクスポートし、それをサーバーにアップロードすることにより、最初のデプロイメントが行われます。

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


かわいい:)編集splattneをありがとう。
GloryFish 2009年

1
@Paul Tomblin:OMG笑いが止まらない!!!!!! より良い方法はありません:)
AndreiRînea2010年

缶誰か答えこのください- stackoverflow.com/questions/36034277/...
Sandeepanナス

回答:


109

PHPの場合、Phingビルドスクリプトを使用した SVNが適しています。PhingはANTに似ていますが、PHPで記述されているため、PHP開発者がニーズに合わせて変更するのがはるかに簡単になります。

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

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

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


私がWindows / .NETショップで私がやっていることのリストを投稿しようとしていましたが、それは多かれ少なかれあなたがここで得たものです。+1
ダニエルシャファー

本番環境としてsvn coを使用することの不利な点はありましたか?本当にデメリットは考えられませんが、svn coをプロダクションとして使用することは「クリーン」に見えませんか?なぜsvn exportまたはrsyncではないのですか?
ChrisR、

coとエクスポートには基本的な違いがあるため、特定の変更をプッシュすることはできないため、アプリケーション全体を再度エクスポートする必要があります。それは人生をはるかに簡単にする非常に重要な違いです
Eran Galperin 2010年

36
なぜ画面を下に置くのですか?あなたがreleases /のディレクトリを実行し、releases /のフォルダへのシンボリックリンクを介してliveSite /をポイントすると、サイトを完全に新しいreleases /フォルダにチェックアウトし、coが完了したらシンボリックリンクを瞬時に反転できますか?ダウンタイムの必要はありません(あなたがそのシンボリックリンクの切り替え中に要求を行う貧しいsobでない限り)。
ジョセフラスト

2
本番環境でのSVNの更新や新しいリリースのシンボリックリンクなど、これらのすべてのタスクを実行する責任があるのは誰ですか?phing?ジェンキンスですか?
Daniel Ribeiro

24

現在、Gitを使用してPHP デプロイしています。単純なgit pushプロダクションだけで、Gitからの最新のコピーでプロダクションサーバーを更新できます。Gitは、プロジェクト全体ではなく、差分のみを送信するだけのスマートさを備えているため、簡単で高速です。また、ハードウェア障害が発生した場合に備えて、リポジトリーの冗長コピーをWebサーバーに保持するのにも役立ちます(ただし、安全のためにGitHubにプッシュします)。


中小規模のプロジェクトでも同じことを何年も続けています。私はそれが私にとって素晴らしい働きをしていると言わざるを得ません。このアプローチのシンプルさを気に入るはずです。
クリスアレンレーン

3
このアプローチでデータベースをどのように処理しますか?
32423hjh32423 2011

1
@neilc手で、残念ながら。プッシュの前に、DBへの変更を手動で実行する必要があります。
カイル・クロニン、2011

私は通常、DB設定を含むPHPファイルをinclude()し、手動でサーバーまたはテストマシンに配置します。これにより、パスワードをgitに保存したり、本番データベースを誤って操作したりすることがなくなります。
Matt

これを行うためにgitをどのように構成しますか?ガイド/チュートリアルはありますか?前もって感謝します。
ミゲルスティーブンス

14

私たちは、カピストラーノのWebフロントエンドであるWebistranoを使用しており、非常に満足しています。

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

CapistranoとWebistranoはRubyアプリケーションですが、デプロイメントの「レシピ」の構文は簡単で、PHPプログラマーが理解できるほど強力です。CapistranoはもともとRuby on Railsプロジェクト用に構築されましたが、PHPプロジェクトに簡単に対応できます。

一度設定すると、ステージングバージョンを展開するテスターなど、プログラマー以外のユーザーが使用するのも簡単です。

可能な限り最速のデプロイを提供するために、fast_remote_cacheメソッドをインストールしました。このメソッドは、リモートサーバーのsvn作業コピーキャッシュを更新し、結果をハードリンクします。


7

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

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

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


6

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

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

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


3

私が知っているPhingのは、ここ数回言及されていますが、私は偉大な運を持っていたphpUnderControl。私たちのために

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

5
phpUnderControlは終了しています:|
m02ph3u5 2015

3

自家製のデプロイメントスクリプトに代わるものは、その多くの作業を抽象化するサービスとしてのプラットフォームにデプロイすることです。PaaSは通常、独自のコード展開ツール、スケーリング、フォールトトレランス(ハードウェア障害時にダウンしないなど)を提供し、通常は監視、ログチェックなどに最適なツールキットを提供します。長期間にわたって最新の状態に維持される既知の適切な構成(頭痛の種が1つ少ない)。

私がお勧めするPaaSはdotCloudです。PHPPHPのクイックスタートを参照)に加えて、MySQL、MongoDB、および一連の追加サービスもデプロイできます。また、ダウンタイムなしのデプロイメント、インスタントロールバック、SSLとWebSocketの完全サポートなどの優れた機能も備えています。そして、常に優れている無料の階層があります:)

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

お役に立てれば!

ソロモン


2

リポジトリから運用サーバーに自動的に盲目的に変更を加えることは危険に思えます。コミットされたコードにリグレッションバグが含まれているために、本番アプリケーションに問題がある場合はどうなりますか?

しかし、PHPの継続的インテグレーションシステムが必要な場合は、PHPにはPhingが最適だと思います。しかし、私は自分でテストしていません。たとえば、scpなどの手動の方法を使用しているためです。


2

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


1

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


1
サイト全体に.svnディレクトリが散在していますか?私の純粋主義者の脳はこれに反対します:)
Stann

これはソースコードのみを処理します。多くの場合、デプロイメントには他のアクションを実行する必要があります-データベースの変更の適用、キャッシュのクリアなど
Leonid Mamchenkov

1

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

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

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



1

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

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


1

私と私のチームは、カピストラーノのデプロイに代わってPhing指向の置き換えを開発しました。また、PHPUnitテスト、phpcs、PHPDocumentorなど、phingで利用できるいくつかの優れた機能も組み込んでいます。gitのサブモジュールとしてプロジェクトに追加できるgitリポジトリを作成しました。これは非常にうまく機能します。いくつかのプロジェクトに添付しましたが、モジュール化されているため、複数の環境(ステージング、テスト、本番など)のプロジェクトで簡単に機能させることができます。

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

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


0

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

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

実稼働Webサーバーに多くの.svnがある

Phingがブランチを生成する+すべてのjs / cssを組み合わせる+ステージ構成を置き換える+すべてのwwwサーバーへのsshアップロードがより良い方法だと思います。

10 wwwサーバーにsshし、svn upも問題です。


私のsvnサーバーを全世界に公開することはできません!ファイアウォールとssl経由の認証を使用して、コードを表示できるユーザーを制限してください。
シャドック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.