Git / GitHubは優れたWordPress展開ソリューションですか?


67

現在、WordPressをローカルで開発し、GitでコードをGitHubにコミットしてから、サーバーにSSHで接続し、「git pull」を実行してコードを更新しています。これは、WordPressサイトにコードを展開するのに適したオプションですか(この場合、明らかにサーバーへのルートレベルのアクセス権があります)。この場合、Git / GitHubを最大限に活用するにはどうすればよいですか?


私はdeployhq.comを使用し、彼らが提供する機能が本当に好きです。それは有料サービスですが、価格は手ごろだと思います。WP Engineを使用してホストする場合(私はそうします)、最近git push機能:git.wpengine.comを公開しました
ドウェナウス

回答:


60

これにはgitを使用しますが、本当にうまく機能します。いくつかの提案:

  • アップロードディレクトリ(wp-content / uploads)ディレクトリを.gitignoreファイルに追加します。
  • 開発システムでWebサーバーとデータベースサーバーを実行して、変更を運用環境にプッシュする前にローカルでテストできるようにします。
  • devとprodの間でデータベース接続設定の一貫性を維持するか、wp-config.phpを.gitignoreファイルに追加して、開発ワードプレスの設定が本番環境の設定を上書きしないようにします。
  • Wordpressの管理インターフェイスを使用して、本番システムのプラグインを更新しないでください-せいぜい、gitコピーは、プッシュ/チェックアウトするとすぐに更新するプラグインを上書きします。最悪の場合、競合が発生します。開発システムの管理インターフェイスを使用して更新を行い、本番環境でコミット、プッシュ、チェックアウトします。
  • git post-receiveフックを追加して、Webサーバー経由でwordpressを公開するために使用するディレクトリ(例えば/var/www)に更新を自動的にチェックアウトすることを検討してください。これにより、ファイル自体のみをチェックアウトでき、gitメタデータがWebサーバーのドキュメントルートに到達するのを防ぐことができます。また、アクセス許可の変更をpost-receiveフックに追加して、アクセス許可の一貫性を常に保つことができます。以下に例を示します。

    #!/bin/sh
    unset GIT_INDEX_FILE
    # the directory your web server serves wordpress from 
    export GIT_WORK_TREE=/var/www/example.com/
    # the local directory where your remote git repository sites
    export GIT_DIR=/home/git/repos/example.com.git/
    # below user is for debain - you want the user and group your webserver uses
    sudo git checkout -f
    sudo chown -R www-data:www-data $GIT_WORK_TREE
    sudo chmod -R 755 $GIT_WORK_TREE
    sudo chmod 600 $GIT_WORK_TREE/wp-config.php
    sudo chmod -R 775 $GIT_WORK_TREE/wp-content

unset GIT_INDEX_FILEタイプミスの後にバックティックが表示されますか?
ウェストンルーター

ステージング/テスト/プロダクションサイトが確立された後にテーマファイルをgitリポジトリに追加する以外は、Jamesがworfklowをほぼまとめました。また、リモートサーバーで受信後フックを使用することをお勧めします。ログインを保存してgit pullなどを
実行します。– davemac

それは、SSHエイリアスとともに、「git push live」などを使用してライブテーマリポジトリにプッシュできることを意味します
-davemac

私はワードプレスのプラグイン更新プロセスに精通していませんが、プラグイン更新がデータベースに変更を加えるとどうなりますか?これらのローカルの変更はどのように本番サーバーにプッシュされますか?
ユーザー

プラグインごとに異なる@User。コアwordpressはスキーマバージョンチェックを行うため、組み込みのアップデーターを使用せずにWordpressを更新すると、DBの更新が個別に行われます。DBに書き込むプラグインを使用している場合は、Wordpressの管理領域を確認することをお勧めします。通常、プラグインコードの更新方法に関係なく、スキーマの更新はそこで処理されます。
ジェームズ・ヘブデン

22

Capistranoをセットアップすることを強くお勧めします-最初は少し前向きな作業ですが、その後は新しいセットアップに簡単に使用できます。

主な利点は

  • デスクトップから展開できます。大したことではないように聞こえるかもしれませんが、リモートサーバーにssh-ingし、git pullを実行することは、まだ苦痛です。
  • 必要に応じて前のバージョンに簡単にロールバック
  • ステージング/実稼働環境へのセットアップの展開など、クールなことを行うことができます。

どのように設定するかを示すために、カピストラーノスクリプトのセットを追加しています。

キャップファイル

require 'railsless-deploy'
load 'config/deploy'`

deploy.rb

set :stages, %w(production staging local)
set :default_stage, "staging"
require 'capistrano/ext/multistage'

set :application, "" # your application name - used to set directory name

set :scm, :git
set :repository, "" # use the ssh repo access line you get from the provider eg git@github.com:name/repo.git
set :deploy_to, "/var/www/#{application}" #this is the root site folder on the remote server
set :deploy_via, :remote_cache # get directly from repo
set :copy_exclude, [".git", ".DS_Store", ".gitignore", ".gitmodules", "wp-config.php"]

# makes capistrano ask for sudo password or other remote inputs
default_run_options[:pty] = true

namespace :tasks do
    task :fix_links  do
        run "ln -nfs #{shared_path}/uploads #{release_path}/wp-content/uploads"
        run "ln -nfs #{shared_path}/wp-config.php #{release_path}/wp-config.php"
      run "ln -nfs #{shared_path}/blogs.dir #{release_path}/wp-content/blogs.dir"
      run "ln -nfs #{shared_path}/.htaccess #{release_path}/.htaccess"
      run "sudo chown -R www-data.www-data #{release_path}/"
    end
end

after "deploy", "tasks:fix_links"

最後に、サンプル環境ファイル(マルチステージgemを使用する場合、環境の各ステージ(ローカル、ステージング、プロダクションなど)にこれらのいずれかを使用できます)

config / local.rb

server "", :app  #hostname
set :branch, 'develop' #choose branch to deploy
set :use_sudo, false #don't use sudo

set :deploy_to, "/var/www/#{application}" #overwrite default path to deploy to

これらのファイルは微調整しないと機能しない可能性があり、基本的なCapistranoの知識が必要になりますが、うまくいけば一部の人々に役立つでしょう。

これは、私がCapistranoとWordPressを使い始めた最初のチュートリアルでした:http : //theme.fm/2011/08/tutorial-deploying-wordpress-with-capistrano-2082/


2
あなたがGitのポスト受信のフックを使用する場合は、リモートサーバにSSHとgitのプルを行う必要性を否定
davemac

git post-receiveフックは行く方法です!
ブロックヘンズリー

3
@dirt post-receiveフックの問題は、適切なCIインフラストラクチャが整っていない限り、1つの誤ったマージがサイト全体をダウンさせる可能性があることです。リポジトリにコミットするアクセス権を持つ複数の開発者がいるプロジェクトで作業している場合、この可能性が高くなります。個人的には、代わりにcapistranoを介して展開するのが好きなのはそのためですが、他の人がそれほど心配しないのはなぜでしょう。
アヌ

マージの問題が関係ないように、ベアgitリポジトリを使用します
-davemac

9

このトピックについて実際にWordCampプレゼンテーションを行いました。繰り返し説明するのではなく、スクリーンショットを紹介しここで説明した非常に簡単な展開スクリプト紹介します。

要するに、GitHubを使用してレポをホストし、webhookを使用してgit refに基づいて変更をデプロイします。これにより、Vincent Driessenのgit分岐モデルを使用できるようになり、無制限のWebhead、ステージングサーバー、テストサーバーなど、すべて自動展開が可能になります。また、(ファイルの名前を変更してシンボリックリンクすることにより)個別の開発/製品バージョンを維持しながら、バージョン管理下でwp-config.phpを維持することもカバーします。


4

私はこの質問が少し古いことを知っていますが、ここで答えとしては見ていませんので、シングルサイトのgitベースのセットアップと展開のために私が通常行うことを共有したいと思いますデバイス、ロケーション、および複数の開発者(すべてgitに共通しているように動作する独自のローカルリポジトリを持っています)。

私は心から次の設定を提案できます:

また、概要を説明します(頭を包むために2つ目のリソースが必要な場合)。

基本的には(少なくとも3つのリポジトリで)動作します:

  1. ウェブサイトをgitのライブホストに配置し、
  2. ライブホストに新しいベアgitリポジトリを作成します。
  3. そして、ベアリポジトリからローカル開発gitリポジトリに分岐します。

作業が完了したら、クローンを作成したリモートのベアリポジトリにプッシュします。ベアリポジトリには、ライブリポジトリと同期するためのフックがあります(上記のコードではprimeと呼ばれます)。

リポジトリのWordpress固有の設定として、私はこれを持っています.gitignore

# uploads are data, excluded from source tree
wp-content/uploads/

残りを含む。プラグインとテーマの構成は、バージョン/構成の管理下にあります。これにより、ライブで使用する前に、変更を簡単に追跡してコードを確認できます。また、自分の変更により、リモートツリーに対してより簡単にマージできます。これは、Githubで利用可能なWordpressコアに対して特に有用です。

これは、Wordpressのほとんどのニーズにうまく機能します。裸のレポは、競合する変更をプッシュすることを防ぎます。また、ライブサイトを更新する前に、最初にリモートコピーに同期します。つまり、通常、ライブサイトの更新は非常に高速です。フックがあるため、必要に応じて後でWordpressの更新フックを呼び出すこともできます。

これをGithubフックでどれだけ改善できるかを実験していなければ、コードはGithubではなくローカルバージョン管理下にあるため、通常は必要ありません。

このようなシステムを初めてセットアップするには、リモートホストで使用可能なすべてのツールがあるかどうかを評価するために、少し時間をかける必要があります。

  • SSHアクセス
  • ギット
  • ファイルやサブディレクトリを置くことができるプライベートディレクトリ(例えば、裸のgitリポジトリ用)

最初のセットアップ時間は、1時間から2時間以内に可能になるはずです。環境全体とプッシュを最初に公開します。

ホストによっては、.gitディレクトリをWebアクセスから保護することもできます。以下は、.htaccessWordpressをサブディレクトリ内に配置し、オンラインで公開されていない(有用な)リポジトリ内のスペースを残すコードの例です。

Options -Indexes

# fix trailing slash for .git / make it disappear + .gitignore and similar files.
RedirectMatch 404 ^/\.git(.*)$

# mask 403 on .ht* as 404
<Files ~ "^\.ht">
  Order Deny,Allow
  Allow from all
  Satisfy All
  Redirect 404 /
</Files>

RewriteEngine On
RewriteBase /

# map everything into public and set environment var
# to tag the request being valid
RewriteCond %{ENV:REDIRECT_sitealias} !set
RewriteRule ^(.*)$ /public/$1 [E=sitealias:set,L]

つまり、パブリックディレクトリ内にないものはすべてオンラインではありません。パブリックディレクトリ内には、たとえばワードプレスのコードベースを配置できます.htaccess

RewriteEngine On
# mask as 404 if directly accessed
RewriteCond %{ENV:REDIRECT_sitealias} !set
RewriteRule .* - [L,R=404]

これにより、publicに直接アクセスできなくなります。この.htaccess -fooの一部は次のとおりです。.htaccessへのリクエストは403ではなく404を返す必要があります。環境変数については、環境で機能するかどうかをテストする必要があります。また、それをバージョン管理下に置くかどうかを決める必要があります。

ホスティングをより細かく制御できる場合は、ここでより多くのことを行うことができます(異なる/より最適化されています)。上記の例は、一般的な共有ホスティング環境を対象としています(GITを提供し、自分で簡単にインストールできると言うユーザーもいます)まあ、私は通常、ホスティング業者にそのようなものを提供するよう依頼します。

マイナス面として、これには他の回答でも概説されている一般的な問題がいくつかあります。私が誇りに思っていないことの1つは、データベースサーバーが開発コピーを指すように、開発ホストにホストファイルの変更を与えることです。したがって、1つのデータベース構成を保持できます。本当にクールなESPではありません。資格情報のため。

自動バックアップ

ただし、通常はここではあまり気にしませんが、代わりにリモートシステムで毎日バックアップを実行します。それは簡単で安価だとあなたはWordpressのインストールだけでなく、ファイルのアップロード、データベースの両方の復元することができますし、 gitのレポ。また、バックアップコマンドについては、私は完全に大丈夫ではないかもしれませんが、それらは私のために機能します:

mysql: mysqldump --host=%s -u %s --password=%s %s| gzip > %s
git  : git gc
       git bundle
files: tar --force-local -czf %s %s

ここで私が提案することは、Wordpressのインストールに関するプロセスをWordpressから排除することです。特定のシステムで実行する必要があるため、通常はアプリケーション内にありません(たとえば、アプリケーションがダウンする可能があります、これらは引き続き動作する必要があります)。

チームワークに対応

もう1つの利点は、サイトでチームワークが既に有効になっていることです。追加の裸のレポジトリのおかげで、あなたはあまり間違ったことをすることはできず、マスターブランチやライブブランチから離れたリモートブランチを同僚と共有することさえできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.