Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Deployment 我的应用程序的多个安装-如何处理_Deployment_Automation_Chef Infra_Puppet - Fatal编程技术网

Deployment 我的应用程序的多个安装-如何处理

Deployment 我的应用程序的多个安装-如何处理,deployment,automation,chef-infra,puppet,Deployment,Automation,Chef Infra,Puppet,我有一个用PHP、MySQL等编写的应用程序。该应用程序有一些依赖项,如beanstalkd、Solr和一些PHP扩展 对于每个客户,我们都有一个单独的应用程序安装,可以安装在与其他客户共享的服务器上,也可以安装在仅与该客户共享的服务器上 现在,我们使用一个Puppet脚本来引导新客户,然后我们手动到每个客户进行git拉取,更新数据库,等等,只要有什么变化 我们正在寻找的是一种真正具有以下功能的工具: 允许我们查看所有客户及其当前版本的Web界面 能够引导新安装 能够将现有安装更新到特定版本或分

我有一个用PHP、MySQL等编写的应用程序。该应用程序有一些依赖项,如beanstalkd、Solr和一些PHP扩展

对于每个客户,我们都有一个单独的应用程序安装,可以安装在与其他客户共享的服务器上,也可以安装在仅与该客户共享的服务器上

现在,我们使用一个Puppet脚本来引导新客户,然后我们手动到每个客户进行git拉取,更新数据库,等等,只要有什么变化

我们正在寻找的是一种真正具有以下功能的工具:

  • 允许我们查看所有客户及其当前版本的Web界面
  • 能够引导新安装
  • 能够将现有安装更新到特定版本或分支
  • 我们并不是在寻找一个工具来引导新的服务器——我们仍然是手动的。相反,我们正在寻找一种在现有服务器上自动设置客户端的方法


    厨师或木偶就足够了吗,有没有更合适的工具,或者你会推荐自己做些什么?

    我是木偶实验室木偶的全职开发人员。我也是《亲木偶》的合著者

    木偶当然足以实现你的目标。这里有一种使用Puppet解决此问题的方法。首先,我将讨论依赖关系管理,因为无论管理多少个应用程序实例,这些依赖关系都只应管理一次。然后,我将介绍如何使用Puppet中定义的资源类型和
    vcsrepo
    资源类型处理应用程序的多个安装

    首先,关于puppet代码的组织,以处理同一应用程序的多个安装。您提到的依赖项(如beanstalkd、solr和PHP扩展)应该使用Puppet类进行建模。无论节点上管理了多少个应用程序副本,此类都只会包含在配置目录中一次。此类的示例可能类似于:

    # <modulepath>/site/manifests/app_dependencies.pp
    class site::app_dependencies {
      # Make all package resources in this class default to
      # being managed as installed on the node
      Package { ensure => installed }
      # Now manage the dependencies
      package { 'php': }
      package { 'solr': }
      package { 'beanstalk': }
      # The beanstalk worker queue service needs to be running
      service { 'beanstalkd':
        ensure  => running,
        require => Package['beanstalk'],
      }
    }
    
    接下来,您需要一种方法来声明系统上应用程序的多个实例。不幸的是,现在还没有一种简单的方法可以从web界面实现这一点,但是可以使用Puppet清单和定义的资源类型。此解决方案使用
    vcsrepo
    资源来管理应用程序的git存储库签出

    # <modulepath>/myapp/manifests/instance.pp
    define myapp::instance($git_rev='master') {
      # Resource defaults.  The owner and group might be the web
      # service account instead of the root account.
      File {
        owner => 0,
        group => 0,
        mode  => 0644,
      }
      # Create a directory for the app.  The resource title will be copied
      # into the $name variable when this resource is declared in Puppet
      file { "/var/lib/myapp/${name}":
        ensure => directory
      }
      # Check out the GIT repository at a specific version
      vcsrepo { "/var/lib/myapp/${name}/working_copy":
        ensure   => present,
        provider => git,
        source   => 'git://github.com/puppetlabs/facter.git',
        revision => $git_rev,
      }
    }
    
    不幸的是,目前还没有一种易于使用的开箱即用的方法使这些信息从web GUI可见。但是,使用外部节点分类器API当然可以做到这一点。有关将外部数据拉入Puppet的更多信息,请参阅以下参考资料:


    希望这些信息能有所帮助。

    我正在尝试做一些非常类似的事情,使用factory模式界面,但我在处理跨实例共享的目录时遇到了一个难题,你能检查我的问题吗@
    # <modulepath>/myapp/manifests/instance.pp
    define myapp::instance($git_rev='master') {
      # Resource defaults.  The owner and group might be the web
      # service account instead of the root account.
      File {
        owner => 0,
        group => 0,
        mode  => 0644,
      }
      # Create a directory for the app.  The resource title will be copied
      # into the $name variable when this resource is declared in Puppet
      file { "/var/lib/myapp/${name}":
        ensure => directory
      }
      # Check out the GIT repository at a specific version
      vcsrepo { "/var/lib/myapp/${name}/working_copy":
        ensure   => present,
        provider => git,
        source   => 'git://github.com/puppetlabs/facter.git',
        revision => $git_rev,
      }
    }
    
    # $(puppet config print confdir)/manifests/site.pp
    node www01 {
      include site::app_dependencies
      # Our app instances always need their dependencies to be managed first.
      Myapp::Instance { require => Class['site::app_dependencies'] }
    
      # Multiple instances of the application
      myapp::instance { 'jeff.acme.com': git_rev => 'tags/1.0.0' }
      myapp::instance { 'josh.acme.com': git_rev => 'tags/1.0.2' }
      myapp::instance { 'luke.acme.com': git_rev => 'tags/1.1.0' }
      myapp::instance { 'teyo.acme.com': git_rev => 'master' }
    }