在OpsWorks的`customize.rb`文件中,修改内置cookbooks的设置值
我们正在使用OpsWorks来管理Rails应用,但是为了支持文件上传,需要改变nginx的配置。
自定义JSON因为无法将设置纳入版本控制而难以管理,所以我并不太喜欢它。但是在研究后发现,在自定义食谱的存储库中放置一个名为customize.rb的文件,可以配置内置食谱(包括nginx)的设置。
【AWS宣布】AWS OpsWorks支持Chef 11.10版本
厨师中的Ruby版本已经更新了。此外,我们还为内置的烹饪书提供了非常实用的自定义功能。只需将customize.rb文件放置在烹饪书的attributes目录中,就可以更改OpsWorks安装软件的设置。
通过自定义烹饪书属性覆盖AWS OpsWorks属性。
自定义的JSON是覆盖AWS OpsWorks堆栈配置和内置的菜谱属性的方便方法,但它有一些限制。特别是,您必须为每个使用手动输入自定义的JSON,因此没有稳健的方法来管理定义。一个更好的方法通常是使用自定义菜谱属性文件来覆盖内置属性。这样做可以将定义放置在源代码控制下。
如果采用这种方法,可以将定制内容纳入版本管理,从而减少配置遗漏等风险。
我想要实现的目标。
ビルトインクックブックの挙動を変更する
nginx
client_max_body_size
proxy_send_timeout
バージョン管理可能にする
カスタムJSONを使用しない
元レシピをForkするなどアップデート対応が面倒なことはしない
操作步骤
-
- 检查目标烹饪书的内容
-
- 创建Custom Chef Cookbooks的存储库
-
- 放置customize.rb文件
-
- 向Stack注册和更新Custom Chef Cookbooks的存储库
-
- 更新自定义烹饪书
- 执行食谱
确认目标的烹饪手册内容。 de .)
我会阅读 AWS OpsWorks 服务的 Chef Cookbooks,以确认配置值。
如果是Nginx的话,就是这个。
# increase if you accept large uploads
default[:nginx][:client_max_body_size] = "4m"
default[:nginx][:proxy_read_timeout] = 60
创建一个名为Custom Chef Cookbooks的代码库。
Custom Chef Cookbooks会被部署到每个实例的site-cookbooks中。
请注意不要在存储库内创建 site-cookbooks 文件夹。
$ mkdir site-cookbooks
$ git init
$ touch README.md
$ git add .
$ git commit -m 'first commit'
$ git remote add origin https://github.com/xxxxxx/myproject-cookboooks.git
$ git push origin master
如果您在项目中已经使用了Custom Chef Cookbooks,那么您可以继续使用它,无需新建。
将customize.rb放置。
将customize.rb文件放置在Custom Chef Cookbooks存储库中。
想要自定义的地方是Cookbook名称/属性/customize.rb。
在对应的Cookbook中,已经提供了一个示例的customize.rb文件,所以您只需将其复制并进行相同的配置即可。
其他的配方和设置(如nginx.rb)等都不需要。
nginx/attributes/customize.rb可以用以下方式进行中文表达:「nginx/属性/定制.rb」
###
# This is the place to override the nginx cookbook's default attributes.
#
# Do not edit THIS file directly. Instead, create
# "nginx/attributes/customize.rb" in your cookbook repository and
# put the overrides in YOUR customize.rb file.
###
# The following shows how to disable NGinx compression:
#
#normal[:nginx][:gzip] = 'off'
#normal[:nginx][:gzip_static] = 'off'
# for Upload
normal[:nginx][:client_max_body_size] = "10m"
normal[:nginx][:proxy_send_timeout] = "300"
在这里,我将client_max_body_size设置为10MB,将proxy_send_timeout设置为300秒。
完成后我会push。
此外,我正在进行的项目的配置大致是这样的。
4. 将Custom Chef Cookbooks的存储库注册到Stack上。
打开堆栈设置,在“用户自定义Chef Cookbooks”中指定所创建的Cookbooks存储库。
如果您在使用GitHub的私有仓库时,需要使用SSH进行连接,通常尝试使用22号端口连接可能会遇到很多问题。
ssh://git@ssh.github.com:443/xxxxxx/myproject-cookboooks.git 可以用以下方式来表达:
ssh://git@ssh.github.com:443/xxxxxx/myproject-cookboooks.git
以SSL端口的方式使用。
5. 更新自定义食谱
只进行设置是不会生效的,所以我们需要通过堆栈中的“Run Command”选项来执行“Update Custom Cookbooks”操作。
通过这个操作,每个实例上创建的食谱将被放置在/opt/aws/opsworks/current/site-cookbooks目录下。
6. 按照食谱来进行操作。
在正常的部署过程中,如果是Rails App Server,nginx的配置应该会自动执行。但在这里,我们将手动执行它。
从堆栈的“运行命令”中选择“执行配方”,然后在“要执行的配方”中选择更新nginx配置文件的配方。
nginx::stop,nginx::default
在这里,我们先停止了nginx,然后更新了配置文件并启动了它。事实上,最好自己准备reload等操作指令。
当点击“执行配方”按钮时,配方将成功执行,并更新nginx的配置文件。
生成的配置文件(/etc/nginx/nginx.conf)
user nginx;
worker_processes 10;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
gzip on;
gzip_static on;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_proxied any;
gzip_types application/x-javascript application/xhtml+xml application/xml application/xml+rss text/css text/javascript text/plain text/xml;
gzip_vary on;
gzip_disable "MSIE [1-6].(?!.*SV1)";
client_max_body_size 11m;
server_names_hash_bucket_size 64;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
执行记录
[2014-10-13T00:51:12+00:00] INFO: Processing service[nginx] action nothing (nginx::service line 1)
[2014-10-13T00:51:12+00:00] INFO: Processing service[nginx] action stop (nginx::stop line 3)
[2014-10-13T00:51:13+00:00] INFO: service[nginx] stopped
[2014-10-13T00:51:13+00:00] INFO: Processing package[nginx] action install (nginx::default line 21)
[2014-10-13T00:51:17+00:00] INFO: Processing directory[/etc/nginx] action create (nginx::default line 23)
[2014-10-13T00:51:17+00:00] INFO: Processing directory[/var/log/nginx] action create (nginx::default line 29)
[2014-10-13T00:51:17+00:00] INFO: Processing directory[/etc/nginx/sites-available] action create (nginx::default line 36)
[2014-10-13T00:51:17+00:00] INFO: Processing directory[/etc/nginx/sites-enabled] action create (nginx::default line 36)
[2014-10-13T00:51:17+00:00] INFO: Processing directory[/etc/nginx/conf.d] action create (nginx::default line 36)
[2014-10-13T00:51:17+00:00] INFO: Processing template[/usr/sbin/nxensite] action create (nginx::default line 44)
[2014-10-13T00:51:17+00:00] INFO: Processing template[/usr/sbin/nxdissite] action create (nginx::default line 44)
[2014-10-13T00:51:17+00:00] INFO: Processing template[nginx.conf] action create (nginx::default line 52)
[2014-10-13T00:51:17+00:00] INFO: template[nginx.conf] backed up to /root/.chef/local-mode-cache/backup/etc/nginx/nginx.conf.chef-20141013005117.675539
[2014-10-13T00:51:17+00:00] INFO: template[nginx.conf] updated file contents /etc/nginx/nginx.conf
[2014-10-13T00:51:17+00:00] INFO: Processing template[/etc/nginx/sites-available/default] action create (nginx::default line 60)
[2014-10-13T00:51:17+00:00] INFO: Processing service[nginx] action enable (nginx::default line 69)
[2014-10-13T00:51:18+00:00] INFO: Processing service[nginx] action start (nginx::default line 69)
[2014-10-13T00:51:18+00:00] INFO: service[nginx] started