首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Puppet配置服务器,使用Capistrano部署

使用Puppet配置服务器,使用Capistrano部署
EN

Stack Overflow用户
提问于 2013-03-02 06:13:35
回答 2查看 1.8K关注 0票数 0

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

我曾经想过添加一些类似这样的东西:

代码语言:javascript
复制
file { "/var/www/vhosts/${::fqdn}/current":
  ensure => 'link',
  target => '/tmp/initial'
}

并在/tmp/initial/public/index.html上设置一个空白文件,以便Capistrano能够在部署时将current指向适当的版本。然而,这意味着每当有人重新运行该配置时(例如,为了应用任何配置更改),symlink将被重新定位到垃圾目录(如果当时它甚至存在的话)。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-04 08:32:25

您只需使用Puppet创建应用程序目录,并让Capistano负责使用cap deploy:setup任务创建releasesshared目录,并在使用cap deploy部署新版本时设置current符号链接。

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

代码语言:javascript
复制
file { "/var/www/vhosts/${::fqdn}":
  ensure => 'directory'
}

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

代码语言:javascript
复制
cap deploy:setup

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

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

已更新

Puppet的标准Apache模块似乎需要存在docroot,它使用以下代码实现:

代码语言:javascript
复制
# 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,
  }
}

但您可以使用以下命令禁用该功能:

代码语言:javascript
复制
file { "/var/www/vhosts/${::fqdn}/current/public":
  ensure => directory,
  replace => false,  # don't replace the directory once Capistrano makes it a symlink
}

仅仅自己定义资源可能会阻止apache::vhost模块的if ! defined(File[$docroot])部分运行。

票数 2
EN

Stack Overflow用户

发布于 2014-03-29 06:31:18

斯图尔特

谢谢你的精彩回答。我发现我必须稍微修改它,将替换公共错误放在‘当前’目录中,而不是‘当前/ =>’目录中,如下所示(使用一个流浪汉所有者):

代码语言:javascript
复制
file {
  '/home/vagrant/app/current':
    ensure => directory,
    replace => false,
    owner  => vagrant,
    group  => vagrant,
 }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15167751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档