标签: puppet

为什么人们使用Puppet/Chef与Amazon Cloud Formation而不是仅仅使用CloudInit?

我们计划使用非"预烘烤"的AMI EC2实例.即,当它们被旋转时,它们只是AWS linux的安装.我们的引导过程将引入我们需要的各种安装,例如python,tomcat.我们最少有3个实例,最多8个实例.

鉴于这些要求,使用Puppet/Chef是否有用而不是使用Amazon Cloud Formation(CloudInit)?

我能看到的最好的是如果我们使用Puppet,那么我们就会进行声明性编程,这样可以更容易地进行审计,以查看脚本发生了什么.此外,CloudInit有一个16k的脚本大小限制,我们可能会或可能不会遇到.

有没有人从CloudInit转移到Puppet或Chef,因为他们可以在这里回答我的问题?

puppet configuration-management chef-infra cloud-init

83
推荐指数
3
解决办法
3万
查看次数

如何使用Docker,Puppet和Vagrant开发LAMP Web应用程序?

在黑暗时代,我通常用于开发LAMP Web应用程序的设置是在我的机器上进行本地测试.PHP(在我的例子中),数据库和Web服务器都是本机安装的.

服务器设置了Apache和MySQL的标准安装,我有多个虚拟主机用于Web应用程序的不同部分.当我对我在本地计算机上的结果感到满意时,我会登录到服务器和git pull登台环境.假设一切都在服务器上运行,就像在我的机器上一样,我会为生产做同样的事情.

新起点…

所以现在我从头开始创建一个全新的Web应用程序,我想以"正确的方式"来做.我已经读过Docker,Vagrant和Puppet(以及Chef,虽然我个人更喜欢Puppet的依赖系统,而不是Chef的迭代过程).尽管我已经完成了所有的研究,但似乎仍有几个问题似乎无法找到答案:

是否应该为Web服务器(例如Apache),数据库服务器(例如MySQL)和Web应用程序的每个部分设置单独的Docker容器?

当我谈论Web应用程序的某些部分时,我的意思是像mysite.com,controlpanel.mysite.com等.这些"部分"将共享相同的数据库.

由于Docker似乎为Web和数据库服务器之类的东西提供了现成的容器,所以至少应该将这些容器放在单独的容器中.我的网络应用程序的不同部分也应该在不同的容器中吗?

Docker容器似乎被设计为可替换的,而不是我必须更新其中的软件.他们写的数据我不想放松怎么样?

数据库服务器将管理与我的数据库内容相关的文件(我想要备份).Web服务器将创建日志,我的Web应用程序将管理各种文件和缓存等.所有这些文件都需要在应用程序的容器之外写入(因为我可能在更新时替换它们?),所以他们去哪里?直接进入主机的文件系统?或者单独进入"Docker Volume"?如果他们进入Docker卷,我应该为数据库,Web服务器,应用程序等使用单独的卷吗?我可以像现在这样使用本地机器上的SFTP轻松访问内容吗?我不想在这里放松任何便利!

使用Puppet为开发服务器和生产服务器创建和管理Docker容器是一个好主意吗?

看来Puppet支持直接管理Docker容器,所以这似乎是从头开始轻松设置服务器或生产环境(使用Vagrant)的一种相当好的方法.

希望我已经问了一些相关的问题; 为开发和生产类似LAMP的网络应用程序获得一些适当的"最佳实践"会很棒,我发现它似乎没那么多!

lamp web-applications puppet vagrant docker

69
推荐指数
2
解决办法
2万
查看次数

Windows的配置管理

是否有像nix世界那样的Windows工具?我正在寻找像ChefPuppet这样的东西.

我找到了cfEngine,但它仍然看起来非常*nix为中心.理想情况下,它将是开源的,并且命令行驱动.

我们的想法是将基于Windows服务器的自动化基础架构整合在一起.我们当前的IT部门不允许非Windows服务器.

windows puppet configuration-management cfengine chef-infra

68
推荐指数
2
解决办法
3万
查看次数

在使用Puppet安装其他软件包之前运行`apt-get update`

我正在尝试创建自动安装zend服务器CE的puppet模块,这在这里并不重要,但步骤如下

  1. 更新/etc/apt/source.list
  2. 通过wget下载repos密钥
  3. 做apt-get update
  4. do apt-get install zend-server-ce-5.2

我有init.pp档案

class zendserverce {

# https://github.com/puppetlabs/puppetlabs-stdlib
file_line { 'debian_package':
    path => '/etc/apt/sources.list',
    line => 'deb http://repos.zend.com/zend-server/deb server non-free'
}

exec { "wget http://repos.zend.com/zend.key -O- |apt-key add -":
    path => ["/usr/bin", "/usr/sbin"]
}

exec { "apt-get update":
    command => "/usr/bin/apt-get update",
    onlyif  => "/bin/sh -c '[ ! -f /var/cache/apt/pkgcache.bin ] || /usr/bin/find /etc/apt/* -cnewer /var/cache/apt/pkgcache.bin | /bin/grep . > /dev/null'",
}

package { "zend-server-ce-php-5.2":
    ensure => "latest"
}

}
Run Code Online (Sandbox Code Playgroud)

似乎puppet以不同的顺序运行命令然后我需要.有什么方法告诉他按照我想要的顺序跑吗? …

puppet apt-get zend-server

50
推荐指数
4
解决办法
7万
查看次数

如何在Puppet .pp文件中连接字符串?

这是我的天真方法:

# puppet/init.pp
$x = 'hello ' + 
     'goodbye'
Run Code Online (Sandbox Code Playgroud)

这不起作用.如何没有一个拼接的木偶字符串?

string-concatenation puppet

49
推荐指数
3
解决办法
6万
查看次数

Ubuntu上的nginx:权限被拒绝

我是系统管理的新手.在Ubuntu上通过puppet安装nginx后,我得到以下输出:

[alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)

[warn] 1898#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:1

[emerg] 1898#0: open() "/var/log/nginx/access.log" failed (13: Permission denied)
Run Code Online (Sandbox Code Playgroud)

如何摆脱所有这些消息?

我不想直接使用命令行(chown/chmod)并在每次创建新服务器时重复它.因此,我在考虑必须添加到木偶清单中的内容.

在这种情况下,最好的系统管理员做法是什么:更改/ var/log/nginx的所有者/权限或将日志存储在不同的位置?如果chown/chmod是要走的路,哪些特定权限可以确保最高级别的安全性?

我尝试了这个,但它没有帮助:

  file { '/var/log/nginx':
    ensure  => directory,
    mode    => '0755',
    owner   => 'www-data',
    group   => 'www-data',
    recurse => true
  }
Run Code Online (Sandbox Code Playgroud)

编辑:

vagrant@precise64:~$ ps aux | grep [n]ginx
root      1001  0.0  0.1  62908  1388 …
Run Code Online (Sandbox Code Playgroud)

ubuntu debian nginx puppet vagrant

49
推荐指数
6
解决办法
10万
查看次数

OpenSSL vs GPG用于加密异地备份?

考虑到在将存档推送到场外备份位置之前使用GPG和OpenSSL进行本地加密之间的选择,每种解决方案的优点和缺点是什么?

背景:我目前正在管理基于Ubuntu 14.04.1的服务器基础架构,并且在可用时应用所有当前补丁.

所有这些系统都是无头的,使用经过审查的预制和自动化工具自动构建,并通过基于Intel的统一硬件上的KVM在虚拟机中运行.

我们偏爱Ruby,但更倾向于"正确地做事".由于两者兼而有之,我们选择"备份"gem作为创建我们想要保留的数据的加密存档的手段,因为它将为使用Vagrant的开发人员创建相同的加密存档,无论其机制如何,它传播了.

所有软件和配置都通过Puppet进行管理,因此这两项决定都不会对"用户体验"或方便性产生任何影响.这两个选项都将创建相关脚本,以便从创建的任何备份中进行管理,验证或还原.

鉴于此,当用于此目的时,任一加密选项是否对另一个提供任何优势?

ruby encryption gnupg puppet ubuntu-14.04

49
推荐指数
1
解决办法
2万
查看次数

如何在运行Puppet客户端时打印一些东西?

我想在Puppet运行时打印出消息和变量.我看到有两个功能可能会有所帮助但却无法真正使用它们.我的site.pp档案:

info "running site.pp info"
debug "running site.pp debug"
Run Code Online (Sandbox Code Playgroud)

当我在客户端上运行时:

puppet -t
Run Code Online (Sandbox Code Playgroud)

我没有得到那些印刷品.

puppet

47
推荐指数
6
解决办法
9万
查看次数

Puppet/Facter"无法检索事实fqdn":如何修复或规避?

我正在学习木偶并尝试在家里的虚拟机上进行试验.我还没有使用木偶服务器,只是在本地运行.它工作正常,但每次运行时puppet apply ...,我都会延迟几秒钟,然后显示消息

warning: Could not retrieve fact fqdn
Run Code Online (Sandbox Code Playgroud)

我假设消息与延迟有关,我想摆脱它(延迟 - 我可以忍受消息).谷歌搜索解决方案似乎表明它与DNS查找有某种关系,但我真的找不到任何关于它的东西,这似乎令人惊讶.我想要的就是能够快速地在我的vm中应用清单,这样我就可以进行实验.我怎样才能加快速度?

更新:我没有在调试输出中看到任何额外的信息,但它看起来像这样:

$ puppet apply -dv puppet-1.pp 
warning: Could not retrieve fact fqdn
debug: Failed to load library 'rubygems' for feature 'rubygems'
debug: Failed to load library 'selinux' for feature 'selinux'
debug: Puppet::Type::File::ProviderMicrosoft_windows: feature microsoft_windows is missing
...
Run Code Online (Sandbox Code Playgroud)

更新:我添加了"ruby"标签,因为木偶的粉丝很少.如果这不属于红宝石,或者您知道更好的标签,请告诉我.

再次更新:我已经了解了更多关于puppet的内容,我现在明白这条消息来自名为"Facter"的组件,该组件嗅出了关于运行Puppet的系统的"事实".我找到了一些配置选项,并使用"certname","node_name""node_name_value",但我无法让延迟消失.有没有人具体知道如何告诉Facter忽略fqdn或如何让Facter能够在Ubuntu 11.10 vm上找到fqdn?

进展:

$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.1.1
Run Code Online (Sandbox Code Playgroud)

那是我的路由器,它通过Tomato运行Dnsmasq.

$ dig -x 192.168.1.129 192.168.1.1 …
Run Code Online (Sandbox Code Playgroud)

ruby puppet facter

47
推荐指数
4
解决办法
4万
查看次数

Vagrant provisioning shell vs puppet vs chef

我有以下设置:

  • 许多不同的项目都是独立的git存储库,但它们大多数都具有相同的服务器配置
  • 每个项目依赖于许多其他项目,我们使用composer依赖管理器将它们组合在一起(这里是PHP语言).

我想使用Vagrant并在每个存储库中包含一个Vagrant文​​件,因此我的团队成员可以克隆存储库,运行vagrant up并准备就绪.

我现在的问题是针对供应问题.我需要安装几个工具和包,如apache,git,mysql和几个php包,然后下载一些文件(如最近的开发数据库转储),在/ var/www中设置所有内容并运行composer install命令.

所以这样做的一个选择是使用经理使用厨师或木偶等食谱.另一种方法是编写一个bash文件并使用shell配置.

我对主厨/木偶的经验不多,所以很自然地,使用shell选项似乎更容易,但我想知道从长远来看这是不是一个好的/可行的选择.

为什么对我来说,与木偶/厨师合作似乎是一个糟糕的方法:

我知道我将不得不使用几种不同的配方,并且几乎总是对我的不同存储库使用相同的配方,所以我必须将所有这些配方包含在所有存储库中.考虑有20个repos并需要10个食谱,这意味着我需要添加200个食谱作为git-submodule或类似(同样每个团队成员需要克隆存储库,然后克隆10个食谱存储库,然后每个都运行vagrant项目).相比之下,我只需要使用我的shell脚本创建一个小型repo并将其克隆20次.

我可能遗漏了一些东西,所以请建议我是否应该选择厨师/木偶以及为什么它有意义,即使我的存储库都有一个非常相似的服务器设置.

shell provisioning puppet chef-infra vagrant

37
推荐指数
1
解决办法
1万
查看次数