繁体   English   中英

使用Puppet设置服务器,使用Capistrano进行部署

[英]Provisioning server with Puppet, deploying with Capistrano

我在通过与Capistrano部署兼容的Puppet设置服务器时遇到问题。 我正在使用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在部署时执行应用程序供应,但我确实更希望保持简洁。

您应该只使用Puppet创建应用程序目录,并让Capistano使用cap deploy:setup任务创建releasesshared目录,并在使用cap deploy新版本时放下current符号链接。

更具体地讲,我建议在您的Puppet配置中包含以下内容:

file { "/var/www/vhosts/${::fqdn}":
  ensure => 'directory'
}

然后,作为一次性设置步骤,运行此任务以指示Capistrano在Puppet应该已经为您创建的/var/www/vhosts/${::fqdn}目录中创建releasesshared目录:

cap deploy:setup

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

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

更新

Puppet的标准Apache模块似乎要求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]) apache::vhost模块的已if ! defined(File[$docroot])部分正在运行。

斯图尔特

感谢您的出色回答。 我发现我必须稍作修改,以将replace => false放在“当前”目录上,而不是“当前/公共”目录上,就像这样(使用无业游民的所有者):

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM