使用Pistpet配置服务器,使用Capistrano进行部署

时间:2013-03-01 22:13:35

标签: apache capistrano puppet

我遇到与Puppet配置服务器的问题,该服务器与Capistrano部署兼容。我正在使用puppetlabs/apache来设置我的虚拟主机,并且(正确地)检查docroot是否存在(如果不存在则创建它,忽略潜在的嵌套目录问题)。但是,真正的docroot将为/var/www/vhosts/${::fqdn}/current/public,而Capistrano将在部署时创建相应的符号链接(从currentreleases/{releasestamp}),并且在该目录路径时不满意由Puppet提前设置(由于current是一个实际目录,而不是符号链接,而不是空的。)

我考虑过添加类似的内容:

file { "/var/www/vhosts/${::fqdn}/current":
  ensure => 'link',
  target => '/tmp/initial'
}

并在/tmp/initial/public/index.html设置空白文件,以便Capistrano在部署时能够将current指向适当的版本。但是,这意味着每当有人重新运行该规定时(例如,应用任何配置更改),符号链接将被重定位到垃圾目录(如果它甚至存在于该点)。

有什么建议吗?我已经考虑将该规定拆分为应用程序配置和服务器配置,并让Capistrano在部署时执行应用程序配置,但我真的更喜欢保持这种简洁。

2 个答案:

答案 0 :(得分:2)

您应该只使用Puppet创建应用程序目录,让Capistano使用releases任务创建sharedcap deploy:setup目录,然后放下{{1使用current部署新版本时的符号链接。

更具体地说,我建议在你的Puppet配置中使用它:

cap deploy

然后,作为一次性设置步骤,运行此任务以指示Capistrano在Puppet应为您创建的file { "/var/www/vhosts/${::fqdn}": ensure => 'directory' } 目录中创建releasesshared目录:< / p>

/var/www/vhosts/${::fqdn}

此后,只需运行cap deploy:setup 即可部署您的应用,这将为您创建或更新cap deploy符号链接。

(请注意,您可以将current选项传递给-n以预览Capistrano将运行的确切命令。例如,cap将显示其运行的cap -n deploy:setup命令。)

更新

Puppet的标准Apache模块似乎要求mkdir存在,它使用以下内容:

docroot

但您可以使用以下方法禁用它:

# This ensures that the docroot exists
# But enables it to be specified across multiple vhost resources
if ! defined(File[$docroot]) {
  file { $docroot:
    ensure => directory,
    owner  => $docroot_owner,
    group  => $docroot_group,
  }
}

仅自行定义资源可能会阻止file { "/var/www/vhosts/${::fqdn}/current/public": ensure => directory, replace => false, # don't replace the directory once Capistrano makes it a symlink } 模块的if ! defined(File[$docroot])部分运行。

答案 1 :(得分:1)

司徒,

感谢您的回答。我发现我必须稍微修改它以放置replace =&gt;在'当前'目录中为false,而不是'current / public'目录,如此(使用vagrant所有者):

file {
  '/home/vagrant/app/current':
    ensure => directory,
    replace => false,
    owner  => vagrant,
    group  => vagrant,
 }