为什么在PHP模块包含的时候安装apache?

我正在使用Debian 7.x

这是很奇怪的行为

  1. 我通过stream浪汉提供傀儡
  2. 我使用puppetlabs / debian-7.8-64-puppet作为基本映像

为什么Apache加载,即使在我的puppet脚本中没有任何地方引用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?

我从字面上将取消注释该行 – 重build计算机SSH并运行ps -aux,突然我看到Apache不NGINX服务我的网页

想法?

您为$packages列表中的包指定的顺序是不相关的,Puppet会从中创build一些package对象并以任意顺序执行它们,每个对象导致一次调用apt-get install ,从而防止apt用你想要安装的软件包的完整列表做自己的依赖关系parsing,并且可能导致引入默认软件包来解决问题(在这种情况下是Apache)。

解决这个问题的方法应该像下面这样:

 $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),这取决于实际的依赖关系树是如何工作的。