我目前正在本地开发我的WordPress,用Git将代码提交到GitHub,然后将其下载到我的服务器中,并进行“Git拉”来更新代码。对于WordPress站点上的代码部署来说,这是一个很好的选择吗(在这种情况下,我显然可以在根级别访问我的服务器。)我知道像Capistrano这样的事情,但部署到WordPress站点会不会太过了?在这种情况下,我如何充分利用Git/GitHub?
Git/GitHub是一个好的WordPress部署解决方案吗?
我使用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
我强烈建议您设置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 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/
实际上我做了一个关于这个主题的WordCamp演讲。与其重复我自己,here\'s a screencast of it 和here\'s a very simple deployment script 和我讨论的内容一起。
简而言之,我使用GitHub托管repo,并使用webhook根据git参考部署更改Vincent Driessen\'s git branching model 并为您提供了无限的Webhead、暂存服务器、测试服务器等,所有这些都具有自动部署功能。我还介绍了保持wp配置。php受版本控制,同时维护单独的开发/生产版本(通过重命名文件和符号链接)。
我知道这个问题有点老,但由于我在这里没有看到这个答案,我想分享一下我通常对基于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安装过程中的程序。它们需要在特定系统上运行,因此通常应用程序中没有它们(例如,应用程序可能会停止运行,但您需要让它们继续工作)。