我在通过与 Capistrano 部署兼容的 Puppet 配置服务器时遇到问题。我正在使用puppetlabs/apache来设置我的虚拟主机,它(正确地)检查是否docroot
存在(如果不存在则创建它,忽略潜在的嵌套目录问题)。然而,真正的docroot
将是/var/www/vhosts/${::fqdn}/current/public
,并且 Capistrano 将在部署时创建适当的符号链接(从current
到releases/{releasestamp}
),并且当 Puppet 预先设置该目录路径时不高兴(由于current
是实际目录,而不是符号链接,并且不为空)。
我考虑过添加类似的东西:
file { "/var/www/vhosts/${::fqdn}/current":
ensure => 'link',
target => '/tmp/initial'
}
并在 处设置一个空白文件/tmp/initial/public/index.html
,以便 Capistrano 在部署时能够指向current
适当的版本。但是,这意味着每当有人重新运行配置(例如,应用任何配置更改)时,符号链接将被重新定位到垃圾目录(如果它当时甚至存在的话)。
有什么建议么?我考虑过将配置分为应用程序配置和服务器配置,并让 Capistrano 在部署时执行应用程序配置,但我真的更希望保持简洁。