私は現在WordPressをローカルで開発しています。Gitを使ってコードをGitHubにコミットしてから、サーバーにSSHで接続し、コードを更新するために "git pull"を実行しています。これはWordPressサイトへのコード展開に適したオプションですか(この場合、明らかに私のサーバーへのルートレベルのアクセス権があります)。この場合、どうすればGit/GitHubを最大限に活用できますか?
私はこれにgitを使っていて、それが本当にうまくいっているのを見つけます。いくつかの提案:
.gitignore
ファイルに追加します。.gitignore
ファイルに追加してください。あなたの更新をあなたのウェブサーバーを通してワードプレスを公開するのに使うディレクトリ(例えばpost-receive
)に自動的にチェックアウトするためにgit /var/www
フックを追加することを検討してください。これにより、ファイル自体をチェックアウトすることだけが可能になり、gitメタデータがWebサーバーのドキュメントルートに入り込むのを防ぎ、また受信許可フックにアクセス許可の変更を追加して、アクセス許可を毎回一貫させることができます。例を以下に示します。
#!/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
私はCapistranoをセットアップすることを強くお勧めします - それは最初のうちの少しの先行作業ですが、その後、あなたは新しいセットアップのためにそれを簡単に使うことができます。
主な利点は
設定方法を説明するため、一連のcapistranoスクリプトを追加します。
キャップファイル
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 [email protected]: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を使うなら、あなたはあなたの環境の各段階、例えばローカル、ステージング、プロダクションのためにこれらのうちの1つを持つことができます)
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-deploys-wordpress-with-capistrano-2082/ /
私は実際にこのトピックに関してWordCampのプレゼンテーションをしました。私自身を繰り返すのではなく、 これはそのスクリーンキャストです および これは非常に単純なデプロイメントスクリプトです 私が説明した内容に付随するものです。
要するに、私はGitHubを使ってレポをホストし、ウェブフックを使ってgit refに基づいて変更をデプロイします。これにより Vincent Driessenのgit分岐モデルを使用することができます そして無制限のWebヘッド、ステージングサーバー、テストサーバーなどを持つことができ、すべて自動展開されます。 wp-config.phpをバージョン管理下に置く一方で、別々のdev/productionバージョンを維持することをカバーします(ファイルの名前を変更しシンボリックリンクすることによって)。
私はこの質問が少し古いことを知っていますが、ここでは答えとして見ていないので、シングルサイトのgitベースのセットアップと展開で通常行うことを共有したいと思いますデバイス、場所、および複数の開発者(すべてgitで一般的な独自のローカルリポジトリを持っています).
私は心から次の設定を提案できます:
また、概要を説明します(頭を包むために2つ目のリソースが必要な場合)。
基本的には(少なくとも3つのリポジトリで)動作します:
作業が完了したら、クローンを作成したリモートベアリポジトリに対してプッシュします。ベアリポジトリには、ライブリポジトリと同期するためのフックがあります(上記のコードではprimeと呼ばれます)。
リポジトリのWordpress固有の設定として、私はこれを.gitignore
持っています:
# uploads are data, excluded from source tree
wp-content/uploads/
残りを含む。プラグインとテーマの構成は、バージョン/構成の管理下にあります。これにより、変更を追跡し、コードをライブで使用する前にbeforeを確認できます。また、自分の変更により、リモートツリーに対してより簡単にマージできます。これは、 Githubで利用可能なWordpressコア に対して特に役立ちます。
これは、私のWordpressニーズのほとんどにうまく機能します。裸のレポは、競合する変更をプッシュすることを防ぎます。また、ライブサイトを更新する前に、最初にリモートコピーに同期します。つまり、通常、ライブサイトの更新は非常に高速です。フックがあるため、必要に応じてWordpress updateフックを後で呼び出すこともできます。
これをGithubフックでどれだけ改善できるかを実験していなければ、コードはGithubではなくローカルバージョン管理下にあるため、通常は必要ありません。
このようなシステムを初めてセットアップするには、リモートホストで使用可能なすべてのツールがあるかどうかを評価するために少し時間をかける必要があります。
最初のセットアップ時間は、1時間から2時間以内に可能になるはずです。環境全体で、最初にプッシュを公開します。
ホストによっては、.git
ディレクトリをWebアクセスから保護することもできます。サブディレクトリ内にWordpressを配置する.htaccess
コードの例は次のとおりです。これにより、リポジトリ内のスペースがオンラインで公開されなくなります(有用)。
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]
つまり、publicディレクトリ内にないものはすべてオンラインではありません。 publicディレクトリ内にwordpressコードベースを配置できます。たとえば、.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から除外することです。特定のシステムで実行する必要があるため、通常はアプリケーション内でそれらを使用する必要はありません(たとえば、アプリケーションがダウンする可能性はありますが、これらを継続するにはneed動作するように)。
もう1つの素晴らしい利点は、サイトでチームワークが既に有効になっていることです。追加のベアリポジトリのおかげで、あまり間違ったことはできず、マスターブランチやライブブランチとは別にリモートブランチを同僚と共有することもできます。