我们计划使用非"预烘烤"的AMI EC2实例.即,当它们被旋转时,它们只是AWS linux的安装.我们的引导过程将引入我们需要的各种安装,例如python,tomcat.我们最少有3个实例,最多8个实例.
鉴于这些要求,使用Puppet/Chef是否有用而不是使用Amazon Cloud Formation(CloudInit)?
我能看到的最好的是如果我们使用Puppet,那么我们就会进行声明性编程,这样可以更容易地进行审计,以查看脚本发生了什么.此外,CloudInit有一个16k的脚本大小限制,我们可能会或可能不会遇到.
有没有人从CloudInit转移到Puppet或Chef,因为他们可以在这里回答我的问题?
在黑暗时代,我通常用于开发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的网络应用程序获得一些适当的"最佳实践"会很棒,我发现它似乎没那么多!
我正在尝试创建自动安装zend服务器CE的puppet模块,这在这里并不重要,但步骤如下
我有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/init.pp
$x = 'hello ' +
'goodbye'
Run Code Online (Sandbox Code Playgroud)
这不起作用.如何没有一个拼接的木偶字符串?
我是系统管理的新手.在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) 考虑到在将存档推送到场外备份位置之前使用GPG和OpenSSL进行本地加密之间的选择,每种解决方案的优点和缺点是什么?
背景:我目前正在管理基于Ubuntu 14.04.1的服务器基础架构,并且在可用时应用所有当前补丁.
所有这些系统都是无头的,使用经过审查的预制和自动化工具自动构建,并通过基于Intel的统一硬件上的KVM在虚拟机中运行.
我们偏爱Ruby,但更倾向于"正确地做事".由于两者兼而有之,我们选择"备份"gem作为创建我们想要保留的数据的加密存档的手段,因为它将为使用Vagrant的开发人员创建相同的加密存档,无论其机制如何,它传播了.
所有软件和配置都通过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 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) 我有以下设置:
我想使用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次.
我可能遗漏了一些东西,所以请建议我是否应该选择厨师/木偶以及为什么它有意义,即使我的存储库都有一个非常相似的服务器设置.
puppet ×10
chef-infra ×3
vagrant ×3
ruby ×2
apt-get ×1
cfengine ×1
cloud-init ×1
debian ×1
docker ×1
encryption ×1
facter ×1
gnupg ×1
lamp ×1
nginx ×1
provisioning ×1
shell ×1
ubuntu ×1
ubuntu-14.04 ×1
windows ×1
zend-server ×1