温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何用Chef管配置文件

发布时间:2026-09-12 16:15:18 来源:亿速云 阅读:91 作者:小樊 栏目:系统运维

在 Chef 里“管配置文件”通常是指:用 Cookbook 把配置文件从模板/属性生成出来,并管理其内容和权限,避免手动改服务器。下面按“从入门到可用”的方式讲。


一、核心思路

Chef 管配置文件的常见方式有三种:

  1. template 资源(最常用)
    • .erb 模板
    • 结合 attributes 动态生成配置
  2. cookbook_file 资源
    • 直接放静态配置文件
  3. line / ini / xml 等细粒度资源(高级)
    • 只改某一行或某一段

二、最推荐方式:template + attributes

1. 目录结构示例

cookbooks/myapp/
├── attributes/
│   └── default.rb
├── templates/
│   └── default/
│       └── myapp.conf.erb
└── recipes/
    └── default.rb

2. 定义属性(attributes/default.rb)

default['myapp']['port'] = 8080
default['myapp']['log_level'] = 'info'

3. 写模板(templates/default/myapp.conf.erb)

port = <%= node['myapp']['port'] %>
log_level = <%= node['myapp']['log_level'] %>

4. 写 Recipe(recipes/default.rb)

template '/etc/myapp/myapp.conf' do
  source 'myapp.conf.erb'
  owner 'root'
  group 'root'
  mode '0644'
  notifies :restart, 'service[myapp]'
end

service 'myapp' do
  action [:enable, :start]
end

✅ 每次修改属性 → 重新 converge → 配置文件自动更新


三、静态配置文件:cookbook_file

适合不常变的配置:

cookbook_file '/etc/myapp/static.conf' do
  source 'static.conf'
  mode '0644'
  owner 'root'
  group 'root'
end

文件放在:

cookbooks/myapp/files/default/static.conf

四、只改一行/一段(避免整文件替换)

示例:确保某配置存在

ruby_block 'set max_clients' do
  block do
    file = Chef::Util::FileEdit.new('/etc/myapp/myapp.conf')
    file.insert_line_if_no_match(
      /^max_clients/,
      'max_clients = 100'
    )
    file.write_file
  end
end

或用社区 cookbook:line / ini / xml


五、常见最佳实践

✅ 配置走 attributes / role / environment / policy
✅ 模板里不要写死密码(用 chef-vaultencrypted databag
✅ 用 notifies 触发服务重启
✅ 用 only_if / not_if 控制条件
✅ 测试用 chef-client --local-mode 或 Test Kitchen


六、一个最小可用示例

template '/etc/nginx/conf.d/site.conf' do
  source 'site.conf.erb'
  variables(
    server_name: node['site']['domain'],
    port: 80
  )
end

如果你愿意,可以告诉我:

  • 你管的是 Nginx / Redis / 自研服务 / systemd
  • Chef Server 还是 Chef Zero / Policyfile

我可以直接帮你写一个可落地 Cookbook。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI