我目前正在本地开发WordPress,使用Git将代码提交到GitHub,然后通过SSH进入服务器并执行“ git pull”更新代码。这是将代码部署到WordPress站点上的一个好选择(在这种情况下,我显然可以对我的服务器进行根级访问。)我知道Capistrano之类的东西,但这对于部署到WordPress站点是否会过大?在这种情况下,如何充分利用Git / GitHub?
我目前正在本地开发WordPress,使用Git将代码提交到GitHub,然后通过SSH进入服务器并执行“ git pull”更新代码。这是将代码部署到WordPress站点上的一个好选择(在这种情况下,我显然可以对我的服务器进行根级访问。)我知道Capistrano之类的东西,但这对于部署到WordPress站点是否会过大?在这种情况下,如何充分利用Git / GitHub?
Answers:
我为此使用git,发现它确实很好用。一些建议:
.gitignore
文件中。.gitignore
文件中,以防止开发wordpress设置覆盖生产版本。考虑添加一个git post-receive
钩子,以将您的更新自动检出到用于通过Web服务器(例如/var/www
)发布wordpress的目录中。这使您仅可以检出文件本身,避免任何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
unset GIT_INDEX_FILE
错字了吗?
我强烈建议您设置Capistrano-这是第一次的前期工作,但是之后您可以轻松地将其用于新设置。
主要优点是
我添加了一组capistrano脚本,向您展示如何设置。
Capfile
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/
git post-receive
钩是要走的路!
实际上,我对此主题做了一个WordCamp演示。而不是重复自己,这里是它的一个截屏,并在这里是一个非常简单的部署脚本陪我讨论。
简而言之,我使用GitHub托管存储库,并使用Webhook部署基于git ref的更改。这使您可以使用Vincent Driessen的git分支模型,并通过自动部署使您拥有无限的webhead,登台服务器,测试服务器等。我还将介绍将wp-config.php保持在版本控制下,同时维护单独的开发/生产版本(通过重命名文件和符号链接)。
我知道这个问题有点老了,但是由于我在这里还没有看到这个答案,我想分享一下我通常对基于单站点git的设置和部署所做的工作,并且工作得非常好,并且可以在多个站点上工作设备,位置以及多个开发人员(所有人员都有自己的本地存储库,就像git一样,它们都在其中运行)。
我可以热忱地建议以下设置:
(如果您需要第二个资源来解决问题)中也对此进行了概述:
它基本上可以(至少有三个存储库)通过以下方式工作:
完成工作后,您将对克隆自的远程裸仓库进行推送。裸仓库具有与实时仓库同步的钩子(在上面的代码称为prime)。
作为回购中Wordpress的特定设置,我有以下内容.gitignore
:
# uploads are data, excluded from source tree
wp-content/uploads/
其余包括。我一直在版本/配置控制下的插件和主题配置。这使我可以轻松跟踪更改并在实时使用代码之前对其进行检查。我还可以通过自己的更改更轻松地将其与远程树合并。这对于Github上可用的Wordpress核心特别有用。
这对我的大多数Wordpress需求都很好。裸仓库可以防止您推送冲突的更改。在更新实时站点之前,它还会先同步到远程副本。这意味着更新实时站点通常非常快。由于这些挂钩,您甚至可以根据需要甚至以后调用Wordpress更新挂钩。
如果没有试验过,可以用Github钩子改进多少,但是我通常不需要它们,因为代码在本地版本控制下,而不是Github。
要首次设置这样的系统,您应该花一些时间评估远程主机上是否有可用的所有工具:
首次设置时间应在两个小时(含)内。整个环境,您首先发布发布。
根据您的主机,您可能还希望屏蔽.git
目录以防网络访问。这是一些示例.htaccess
代码,甚至将Wordpress放在子目录中也是如此,这在回购中留下了未在线发布的空间(有用):
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]
简而言之,不在公共目录中的所有内容都不在线。例如,在公共目录内可以是wordpress代码库,为此,.htaccess
您需要:
RewriteEngine On
# mask as 404 if directly accessed
RewriteCond %{ENV:REDIRECT_sitealias} !set
RewriteRule .* - [L,R=404]
这阻止了直接访问公众。您可以在此概述该.htaccess -foo的一部分:对.htaccess的请求应返回404而不是403。对于环境变量,您需要测试该变量是否在您的环境中有效。另外,您还需要确定是否将其置于版本控制之下。
如果您对托管有更多的控制权,则可以在此处做更多的事情(以及进行不同的/更优化的处理),以上示例针对的是典型的共享托管环境(提供GIT,有些用户说您可以轻松地将其安装为好吧,我通常请托管人提供此类信息,因为我更喜欢托管人是否愿意为我付费。
从消极的方面讲,这具有一些其他答案中也概述的常见问题。我不感到骄傲的一件事是,有效的方法是使开发主机对其主机文件进行更改,以使数据库服务器指向开发副本。因此,您可以保留一个数据库配置。特别是不是很酷。由于凭据。
但是,我通常不在这里,而是每天在远程系统上运行每日备份,这些备份是增量存储的,然后它们本身存储在另一个远程位置。这既简单又便宜,并且允许您还原Wordpress安装以及文件上传,数据库和 git repo。另外,对于我的备份命令,我可能并不完美,但是那些对我有用:
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的影响。它们需要在特定的系统上运行,因此通常不需要在应用程序中包含它们(例如,应用程序可能会关闭,但您需要使它们继续运行)。
另一个不错的好处是您的站点已经启用了团队合作。由于有了额外的裸仓库,您可以做很多事情,甚至可以与同事共享除主分支或实时分支之外的远程分支。