web-dev-qa-db-ja.com

WordPressサイトの開発、ステージ、プロダクションの展開

ですから、私はWordPressウェブサイトのためにdev/stage/productionの繰り返しを(別々のサーバーで)できるようにする必要があります。私は通常gitを使いますが、メインのデータベースを信頼するのでこれは明らかにWordPressサイトではうまくいきません。 ...の設定、ほとんどすべて。

だから私の質問はあなたたちはどうやってそれをするのですか?私は素早いグーグルを持っていて、いくつかのプラグインがあることを見ました、これが唯一の方法ですか?使いやすさ、スピード、信頼性、UIなどの観点から、どの仕事が最善ですか。

41
igneosaur

私はかなり誇りに思っている設定を持っています、そしてそれは私のチームのために非常にうまくいきます。

一般的な構造

インストール全体をgitの下に置きます。システムの更新、プラグインの追加/更新、テーマの追加/更新など、すべての変更は同じワークフローを通過します。変更は一瞬のうちにロールバックすることができます。私は gitosis を実行しているデプロイメントサーバー(古いP4デスクトップ)を持っていますが、githubや gitolite を使うのも同じくらい簡単です。 gitでは、masterdevelopの2つの "特別な"ブランチがあります(以下で詳しく説明します)。私のプロダクションサーバーとステージングサーバーはクラウドベースです。

開発環境

すべての開発者は、自分のマシン上で自分の開発サーバーを実行しています。データベースに関しては、ライブデータを必要とすることはこれまでほとんど問題になっていません。主に テーマ単体テストデータ を使用します。そうでなければ、エクスポートとインポートがほとんどのことをカバーします。 DB部分が重要な場合は、レプリケーションを設定するか、オンデマンド同期のために何かを設定することができます。私が最初にこの構造を設定したとき、私はこれが重要であると思ったので私はこれをするために ツールセット を書き始めました、しかし私が驚いたことにそれらは必要ではなかった。 (注:それらは必要ではなかったので、私は今までそれらを洗練していませんでした、それで例えばシリアル化されたデータでドメインを置き換えるだろうというバグがあります)。

ステージング環境

コミットがdevelopブランチからgitosisにプッシュされると、それらは自動的に私たちのステージングサーバーにデプロイされます。ステージングデータベースは本番データベースのスレーブです。

本番環境

コミットがmasterブランチのgitosisにプッシュされると、自動的に本番サーバーにデプロイされます。

Wp-config.phpの問題

wp-config.phpをサーバーごとに一意にする必要がありますが、それをバージョン管理下に置く必要もあります。私の解決策は.gitignoreを無視するためにwp-config.phpを使用し、ステージングバージョンと本番バージョンを異なる名前のファイルとして保存することでした。それから各サーバーで、私はシンボリックリンクします。 wp-config.php -> wp-config-production.php。その後、各ユーザーは自分自身の資格情報と自分自身の(追跡されていない)wp-config.php設定で自分自身のDBを保持します。

その他の注意

私は Rackspace Cloud を使用します。これは驚異的で安価です。それにより、ステージングサーバーと本番サーバーを同一に保つことができます。私はまた、WordPress内から自分のサービスを制御できるように、それらのAPIを使用してプラグインを書いています。これは素晴らしいことです。

キャッシュディレクトリ、ファイルアップロードディレクトリなどがすべて.gitignoreに追加されます。必要に応じて、定期的にアップロードをチェックインしてそれらをgitosisにプッシュするようにcronタスクを設定することもできますが、それは私には必要ではないと思われます。

マスター/開発構造は、 Vincent Driessenの分岐モデル を部分的に模倣するように設定されています。私は彼のgit拡張 - git-flow も使っていますし、それも強くお勧めします。

私は1年以上の間この構造から10人かそこらの開発者に取り組んできました、そしてそれは一緒に働くことが夢でした。信頼性、安全性、迅速性、機能性、そして敏捷性、あなたはこれ以上求めることはできません!

27
Matthew Boynes

まず、 what を検討することが重要だと思います。 に対して VCの下にWPディレクトリ全体を配置することをお勧めします。 wp-content/themes/YourThemeNameをVCの下に置くのが最も理にかなっていると思います。多数の複雑なプラグインがある大規模サイトでは、wp-content/pluginsも含めることができます。どうしてもしなければならない場合は、wp-content/uploadsを含めることができます。以下の答えは、あなたがバージョン管理しているものに応じて、少し変わります。

それを考えると、これが私が使うものです:

Local:あなたのマシンにLAMPスタックを設定します。開発サイトと同じURLを使用してください。 URLの観点から開発環境をシミュレートするには、VirtualHostsおよび.Hostファイルのエントリを使用します。あなたがちょうどあなたのテーマをVCしているなら、wp-content/plugins、wp-content/uploadsへのリンクにSSHFSを使うことを検討してください。本当に重い作業をしているのでなければ、プロジェクトの開発インストールにデータベースを使用することを検討してください。

開発:あなたのリポジトリの作業コピーをあなたのWP環境にチェックアウトする。コミットごとにこのリポジトリを更新するためにSVNにPOST-COMMITフックを設定します。これにより、同期が保たれます。 (それは貧乏人の継続的統合と考えてください。)

プロダクション:最終候補を表す名前付きバージョンタグを調べてください。新しいバージョンを使用する必要があるときは、タグを切り替えてリポジトリを更新してください。

4
Ethan Seifert

私たちは最近 _ ramp _ を発見しました。注:これはプロセス全体の一部にすぎませんが、サーバー間でコンテンツデータベースを同期することはおそらく最も難しい部分です。

2
lkraav

私はgitとMercurialでこれを行います。プライベートリポジトリを使っていることを確認してください。

オプション1 -

唯一の問題はconfig.phpで、これはgitにプッシュ時またはinitの前に無視するように指示できます。

.gitignoreまたはgit update-index --assume-unchanged config.phpを使用します(使用する前に、変更前の想定コマンドについて少し読んでください)。

オプション2.

Config.phpの中で、 "if server url = devの場合はクレデンシャルAを使用し、そうでない場合はクレデンシャルBを使用する"という行に沿って、URLをチェックして正しいクレデンシャルを適用する条件を使用します.

マークはこれをより良く説明しています、 http://markjaquith.wordpress.com/2011/06/24/wordpress-local-dev-tips/ /

ps。従来の「ファイルサーバー」を使用する代わりに、リモートレポジトリから直接ファイルを処理することもできます。 (私がこれについて作った本当につまらないビデオ http://www.youtube.com/watch?v=8ZEiFi4thDI

2
Wyck