为什么包含 PHP 模块后还要安装 apache?

为什么包含 PHP 模块后还要安装 apache?

我正在使用 Debian 7.x

这是多么奇怪的行为啊

  1. 我正在通过 vagrant provisioner 调用 puppet
  2. 我使用 puppetlabs/debian-7.8-64-puppet 作为基础镜像

为什么即使我的 Puppet 脚本中没有任何地方引用 Apache,Apache 仍会加载?

以下是整个木偶脚本:

#
# Install all required packages
#

$packages = [
    "curl",

    "nginx",

    #"php5-gd",        
    #"php5-cli", 
    "php5-fpm", 
    "php5-ldap",
    #"php5-mysql",

    "mysql-server",

    "htmldoc",
]

package { $packages:
    ensure => present,
}

#
# Configure PHP-FPM
#

service { "php5-fpm":
    ensure => running,
    require => Package['php5-fpm'],
}

#
# Configure NGINX
#

service { "nginx":
  require => Package["nginx"],
  ensure => running,
  enable => true
}

file { "/etc/nginx/sites-available/default":
  ensure => "file",
  require => Package["nginx"],
  content => file("/var/www/.vagrant/puppet/modules/nginx/files/aerospace"),
}

file_line { "Append required Cadorath Aerospace NGINX parameters":
  require => Package["nginx"],
  path => "/etc/nginx/fastcgi_params",
  line => file("/var/www/.vagrant/puppet/modules/nginx/files/params.conf"),
}

每当我取消注释 php5-gd 或 php5-mysql - Apache 就会以某种神奇的方式加载并优先于 NGINX ???

我直接取消注释该行 - 重建机器 SSH 并运行 ps -aux,然后突然发现 Apache 而不是 NGINX 在为我的页面提供服务

有想法吗?

答案1

您在列表中指定的包的顺序是无关紧要的,Puppet将从中$packages创建多个对象并以任意顺序执行它们,每个对象都会导致一次调用,这会阻止使用您想要安装的包的完整列表进行自己的依赖关系解析,并且可能会导致引入默认包来解决问题(在本例中为 Apache)。packageapt-get installapt

解决这个问题的一种方法应该类似于以下内容:

$packages = [
    "curl",
 # "nginx",   ## Not nginx!
    "php5-gd",        
    "php5-cli", 
    "php5-fpm", 
    "mysql-server",
    "htmldoc",
]

package { 'nginx': 
  ensure => present,
}

package { $packages:
    ensure => present,
    require => Package['nginx'],
}

所以你要确保这nginx是第一个安装的包(可能需要对其他或额外的包而不是 nginx 执行此操作,这取决于实际的依赖树如何运作。

相关内容