小编gan*_*est的帖子

控制厨师食谱版本的最佳策略

我正在寻找有关厨师食谱版本管理的想法。我知道您在环境中固定了特定版本,但我不确定如何去做。

我们使用librarian-chef 将第3 方社区书籍安装到cookbooks 文件夹中。我们从不碰这些书,只是不时更新到最新版本。

我们还提供自定义站点特定食谱,其中包含社区食谱 ( include_recipe)。

理论上我们可以指定自定义书籍所依赖的社区书籍的特定版本,然后在环境配置中设置我们的食谱版本,但问题是这些社区书籍可能依赖于其他一些没有指定版本的书籍。并且这种深度嵌套的依赖可能会持续下去。

因此,无法保证当您将食谱上传到厨师服务器时,它不会破坏产品,因为依赖的食谱也可能会发生变化。

目前我能看到的唯一解决方案是指定我们在环境配置中使用的每个食谱版本,包括社区和自定义版本。但后来我必须仔细阅读每本食谱并找出那些版本。

我们还不时进行图书管理员-厨师更新,我想可能会很难追踪更改的版本,并且在时间到来时不要忘记更新环境中的版本。

请分享您的经验和最佳实践。我相信它对其他人非常有用。

versioning dependencies chef best-practices

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

永久 301 重定向 nginx 的缓存控制

我想知道是否有办法控制 Nginx 中重定向的生命周期?

我们会在 CDN 中缓存 301 重定向一段特定的时间,比如说 20 分钟,并且 CDN 由标准缓存标头控制。默认情况下,Nginx 重定向没有 Cache-control 或 Expires 指令。这可能会导致重定向被缓存很长时间。通过具有特定的重定向生命周期,系统可以有机会自我纠正,因为知道即使是“永久”重定向也会不时发生变化。

另一件事是,这些重定向包含在 Server 块中,根据 nginx 规范,应在位置之前对其进行评估。

我尝试添加 add_header Cache-Control "max-age=1200, public"; 到重定向文件的底部,但问题是缓存控制被添加了两次 - 第一个来自后端脚本,另一个是由 add_header 指令添加的。

在 Apache 中,有一个环境变量技巧来控制重写的标头:

RewriteRule /taxonomy/term/(\d+)/feed /taxonomy/term/$1 [R=301,E=expire:1] 标头始终设置 Cache-Control“store, max-age=1200” env=expire

但我不知道如何在 Nginx 中实现这一点。

nginx cache redirect

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

如何使用当前的食谱模板目录与厨师在循环中递归复制所有模板

我试图弄清楚如何构建模板(或文件,因为它的工作方式相同)文件夹的路径,然后我可以读取它并在循环中使用模板资源,因此每个模板文件都可以触发更改通知.

我不能使用 remote_directory 因为我只想在模板更改时通知服务。

我也想避免手动模板规范,因为这些目录中可能有很多文件。另外,它允许我们只更改模板文件夹中的配置,而无需更改配方。

主要问题是那些子目录,如 default、host、host-version 和逻辑厨师通过确定正确的模板文件夹。我在想,我可以从我的自定义食谱中调用一个 Chef 类中的一个方法,以到达我的逻辑(循环)的起点。

我认为应该是这样的:

entry_point = CHEF::...getEntryPointDir

entry_point.glob..
.each do

    template fname do
    ...
    end

end
Run Code Online (Sandbox Code Playgroud)

我将不胜感激任何帮助!

templates chef

5
推荐指数
1
解决办法
6735
查看次数

新贵重启命令不会加载新的更新作业配置 (solr)

这是我的 solr 新贵配置,它位于 /etc/init/solr.conf

# /etc/init/solr.conf

description "Starts Solr server"

respawn
start on startup solr_push

script
        echo "Starting solr server..."
        cd /opt/solr/solr-4.2.1/example
        exec java -Xms50M -Xmx80M -Djava.util.logging.config.file=/etc/solr/logging.properties -Dsolr.solr.home=/etc/solr -jar start.jar >> /var/log/solr/solr-console.log 2>&1
end script
Run Code Online (Sandbox Code Playgroud)

当我更新此新贵配置时,例如将 java 选项从-Xmx80Mto更改 为 -Xmx70M然后执行

sudo restart solr
ps aux | grep solr
Run Code Online (Sandbox Code Playgroud)

我仍然看到-Xm80M那边,即使 solr 进程是用新的进程 id 启动的。

当我这样做sudo stop solr然后sudo start solr手动 - 一切看起来都符合预期,我可以在ps aux.

我的印象是 upstart restart 确实在幕后停止和启动,但是为什么手动停止和启动的结果与重新启动不同?

请建议,也许我做错了什么?

upstart solr

4
推荐指数
1
解决办法
967
查看次数

Chef:预安装软件包或从头开始安装所有内容(快速/不灵活 vs 慢速/灵活)

我很好奇预构建二进制文件(安装包)并仅使用厨师进行配置管理是一个好策略。理论上,当我们需要新机器(流量高峰)时,它应该加快 init 过程,特别是如果我们使用像 AWS 这样的云,我们可以在其中创建我们自己的 AMI(图像),同时它在其他食谱方面可能不灵活工作..

我期待您对这个问题的想法以及最佳实践、经验和想法!

configuration chef amazon-web-services

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