Git/GitHub是一个好的WordPress部署解决方案吗?

时间:2013-01-25 作者:Matt

我目前正在本地开发我的WordPress,用Git将代码提交到GitHub,然后将其下载到我的服务器中,并进行“Git拉”来更新代码。对于WordPress站点上的代码部署来说,这是一个很好的选择吗(在这种情况下,我显然可以在根级别访问我的服务器。)我知道像Capistrano这样的事情,但部署到WordPress站点会不会太过了?在这种情况下,我如何充分利用Git/GitHub?

4 个回复
最合适的回答,由SO网友:James Hebden 整理而成

我使用git来实现这一点,并发现它工作得非常好。一些建议:

将上载目录(wp内容/上载)添加到.gitignore 文件.gitignore 文件,以防止开发wordpress设置覆盖生产设置post-receive 钩子将更新自动签出到通过web服务器发布wordpress的目录中(例如。/var/www). 这允许您只签出文件本身,避免任何git元数据进入web服务器的文档根目录,还意味着您可以将任何权限更改添加到post接收挂钩中,以便每次都保持权限一致。示例如下:

#!/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

SO网友:anu

我强烈建议您设置Capistrano—第一次需要做一点前期工作,但之后您可以轻松地将其用于新设置。

主要优点是

能够从桌面部署。这听起来可能不多,但通过ssh连接到远程服务器,并执行git拉入操作仍然是一件很麻烦的事。如果您需要能够执行一些很酷的操作,例如安装部署到登台/生产环境,则可以轻松回滚到以前的版本我正在添加一组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 [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,那么您可以为您的环境的每个阶段(例如本地、暂存、生产)使用其中的一个文件)

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/

SO网友:Matthew Boynes

实际上我做了一个关于这个主题的WordCamp演讲。与其重复我自己,here\'s a screencast of ithere\'s a very simple deployment script 和我讨论的内容一起。

简而言之,我使用GitHub托管repo,并使用webhook根据git参考部署更改Vincent Driessen\'s git branching model 并为您提供了无限的Webhead、暂存服务器、测试服务器等,所有这些都具有自动部署功能。我还介绍了保持wp配置。php受版本控制,同时维护单独的开发/生产版本(通过重命名文件和符号链接)。

SO网友:hakre

我知道这个问题有点老,但由于我在这里没有看到这个答案,我想分享一下我通常对基于git的单站点设置和部署所做的工作,它工作得非常好,还可以从多个设备、地点和多个开发人员处工作(所有人都有自己的本地repos,因为这对于git来说很常见)。

我可以诚恳地建议以下设置:

中也有概述(如果您需要第二个资源来了解它):

它基本上通过以下方式起作用(至少有三次回购):

将网站放在git下的实时主机上,创建一个新的bare git repository 在实时主机上当工作完成后,您将推动从中克隆的远程裸机回购。裸回购有挂钩与实时回购同步(在上述代码中称为prime)。

作为repo中Wordpress的特定设置,我有以下内容.gitignore:

# uploads are data, excluded from source tree
wp-content/uploads/
其余部分包括插件和主题配置,我将其置于版本/配置控制之下。这使我能够轻松跟踪更改并在使用它之前查看代码。我还可以通过自己的更改更容易地与远程树合并。这对于Wordpress core which is available on Github.

这对我的大多数Wordpress需求都很有效。裸回购协议可防止您推动相互冲突的更改。它还可以在更新实时站点之前先同步到远程副本。这意味着,更新实时站点通常相当快。由于这些挂钩,如果您愿意,您甚至可以在以后调用Wordpress更新挂钩。

如果我没有试验过使用Github挂钩可以改进多少,但我通常不需要它们,因为代码是在本地版本控制下的,而不是在Github下。

要首次设置这样的系统,您应该花一些时间来评估远程主机上是否有所有可用的工具:

SSH访问GIT是一个私有目录,您可以将文件和子目录放在其中(例如,对于您的裸GIT repo),第一次安装时间应在一到两个小时内,包括整个环境和您的首次发布推送。

根据主机的不同,您可能还希望屏蔽.git web access中的目录。下面是一些示例.htaccess 甚至将Wordpress放在子目录中这样做的代码,这会在repo中留下未在线发布的空间(有用):

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]
这会阻止直接访问公共资源。这是其中的一部分。htaccess-您可以在这里找到概述:Requests to .htaccess should return 404 instead of 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安装过程中的程序。它们需要在特定系统上运行,因此通常应用程序中没有它们(例如,应用程序可能会停止运行,但您需要让它们继续工作)。

支持团队合作另一个好处是您的站点已经支持团队合作。由于额外的裸回购,您不会犯太多错误,甚至可以与同事共享主分支或活动分支之外的远程分支。

结束

相关推荐

如何使用一个Git(GitHub)存储库进行多个主题的版本控制

我为各种客户构建并维护了许多主题。我希望能够将它们全部放在github中,以实现可爱的版本控制。然而,当您拥有20多个私有存储库时,github会变得有点贵。我将有大约30多个。这些主题不是一起使用的,每一个都是为一个单独的客户机使用的。我知道我可以托管自己的git安装,但之后我就失去了github的出色的差异工具和社交功能。将所有代码放在一个地方也很好。所以我想知道是否有另一种方法可以将所有主题放在一个回购协议中,并以某种智能的方式将它们分开。我曾想过使用gitignore,但对于每个克隆,都需要重建正