使用Chef在CentOS 6.7上安装nginx。- 使用外部的cookbook
有关文章
- 
- Chefを使ってより効率的にサーバを管理しよう。まずは用語から
 
 
- 
- Berkshelfを使って外部クックブックをノードに適用する。
 
 
- 
- クックブックを作成してノードに適用する。- その1
 
 
- 
- クックブックを作成してノードに適用する。- その2
 
 
- 
- ChefでCentOS 6.7 + rbenv + ruby 2.3.0の環境を構築する。
 
 
- 
- ChefでCentOS 6.7 + Vim 7.4 + luaを設置する。
 
 
- 
- ChefでVimプラグインマネージャーNeoBundleを設置する。
 
 
- 
- Chefのレシピをデバッグしてみよう。
 
 
- 
- ChefでCentOS 6.7 + nginxを設置する。- 外部クックブック
 
 
- 
- ChefでCentOS 6.7 + nginxを設置する。- カスタムクックブック
 
 
- 
- ChefでCentOS 6.7 + nodejs + npmを設置する。
 
 
- 
- ChefでVimプラグインマネージャーvim-plugを設置する。
 
 
- 
- ohaiのカスタムプラグインを作ってみよう。
 
 
- 
- Chef SoloからChef Zeroへ
 
 
- Chefでnginx + php(php-fpm) + mariadb + wordpressを設置する。
 
通过tarball包安装nginx。
- 
- apacheとは違ってnginxのmoduleはコンパイルするとき指定しないとダメだ。
 
 
- そういうわけでyumで設置するよりtarballで設置することを推奨する。
 
生成烹饪书籍
- 
- 外部クックブックを使うかカスタムクックブックを使うかはケースバイケースだと思う。
 
 
- 
- しかし、他の人が作ったクックブックがどんなふうになっているのか覗くのも確かに勉強になる。
 
 
- 
- まずはChef社のSupermarketから公開されている外部クックブックを調べることを推奨する。
 
 
- 
- それで十分だという判断であれば新しいクックブックを作成する必要はないだろう。
 
 
- 
- それが不十分であればそのとき作成しても遅くはない。
 
 
- 
- https://supermarket.chef.io/cookbooks/nginx
 
 
- Berkshelfにnginxというクックブックを取得するために追加する。
 
% vi Berkshelf
... snip ...
cookbook 'nginx'
- クックブックを保持する。
 
% bin/berks vendor cookbooks
菜谱的组成
nginx
├── CHANGELOG.md
├── README.md
├── attributes
│   ├── auth_request.rb
│   ├── default.rb
│   ├── devel.rb
│   ├── echo.rb
│   ├── geoip.rb
│   ├── headers_more.rb
│   ├── lua.rb
│   ├── naxsi.rb
│   ├── openssl_source.rb
│   ├── pagespeed.rb
│   ├── passenger.rb
│   ├── rate_limiting.rb
│   ├── repo.rb
│   ├── set_misc.rb
│   ├── socketproxy.rb
│   ├── source.rb
│   ├── status.rb
│   ├── syslog.rb
│   └── upload_progress.rb
├── definitions
│   └── nginx_site.rb
├── files
│   └── default
│       ├── mime.types
│       └── naxsi_core.rules
├── libraries
│   └── matchers.rb
├── metadata.json
├── recipes
│   ├── authorized_ips.rb
│   ├── commons.rb
│   ├── commons_conf.rb
│   ├── commons_dir.rb
│   ├── commons_script.rb
│   ├── default.rb
│   ├── headers_more_module.rb
│   ├── http_auth_request_module.rb
│   ├── http_echo_module.rb
│   ├── http_geoip_module.rb
│   ├── http_gzip_static_module.rb
│   ├── http_mp4_module.rb
│   ├── http_perl_module.rb
│   ├── http_realip_module.rb
│   ├── http_spdy_module.rb
│   ├── http_ssl_module.rb
│   ├── http_stub_status_module.rb
│   ├── ipv6.rb
│   ├── lua.rb
│   ├── naxsi_module.rb
│   ├── ngx_devel_module.rb
│   ├── ngx_lua_module.rb
│   ├── ohai_plugin.rb
│   ├── openssl_source.rb
│   ├── package.rb
│   ├── pagespeed_module.rb
│   ├── passenger.rb
│   ├── repo.rb
│   ├── repo_passenger.rb
│   ├── set_misc.rb
│   ├── socketproxy.rb
│   ├── source.rb
│   ├── syslog_module.rb
│   └── upload_progress_module.rb
└── templates
    ├── debian
    │   └── nginx.init.erb
    ├── default
    │   ├── default-site.erb
    │   ├── modules
    │   ├── nginx-upstart.conf.erb
    │   ├── nginx.conf.erb
    │   ├── nginx.init.erb
    │   ├── nginx.pill.erb
    │   ├── nginx.sysconfig.erb
    │   ├── nxdissite.erb
    │   ├── nxensite.erb
    │   ├── plugins
    │   ├── sv-nginx-log-run.erb
    │   └── sv-nginx-run.erb
    ├── gentoo
    │   └── nginx.init.erb
    ├── suse
    │   └── nginx.init.erb
    └── ubuntu
        └── nginx.init.erb
- 
- ファイル名だけでもいろんなことがわかる。
 
 
- 
- attributesディレクトリの中にsource.rbが存在する場合大体はtarballで設置ができる。
 
 
- 
- attributes/default.rbの中にinstall_methodと言う項目があり、そこからpackageで設置するかsourceで設置するか決めるようになっている。
 
 
- 今度はsourceで設置するので肝心のところであるattributes/source.rbを調べてみる。
 
include_attribute 'nginx::default'
default['nginx']['source']['version']                 = node['nginx']['version']
default['nginx']['source']['prefix']                  = "/opt/nginx-#{node['nginx']['source']['version']}"
default['nginx']['source']['conf_path']               = "#{node['nginx']['dir']}/nginx.conf"
default['nginx']['source']['sbin_path']               = "#{node['nginx']['source']['prefix']}/sbin/nginx"
default['nginx']['source']['default_configure_flags'] = %W(
  --prefix=#{node['nginx']['source']['prefix']}
  --conf-path=#{node['nginx']['dir']}/nginx.conf
  --sbin-path=#{node['nginx']['source']['sbin_path']}
)
default['nginx']['configure_flags']    = []
default['nginx']['source']['version']  = node['nginx']['version']
default['nginx']['source']['url']      = "http://nginx.org/download/nginx-#{node['nginx']['source']['version']}.tar.gz"
default['nginx']['source']['checksum'] = 'b5608c2959d3e7ad09b20fc8f9e5bd4bc87b3bc8ba5936a513c04ed8f1391a18'
default['nginx']['source']['modules']  = %w(
  nginx::http_ssl_module
  nginx::http_gzip_static_module
)
default['nginx']['source']['use_existing_user'] = false
- 
- versionを指定するようになっている。
 
 
- 
- prefixが/optになっている。/usr/localではない。nginxのように規模が大きいアプリケーションの場合は/optの以下に設置する。参考
 
 
urlとchecksumを記入するようになっている。
modulesでsourceで設置するときのmoduleを定義することができる。
これだけでもよく出来上がったクックブックだということがわかるだろう。
关于属性
- 
- Attributeが書けるファイルはattribute、recipe、environment、roleである。
 
 
- 
- 優先順位は (低い)attribute > recipe > environment > role(高い)である。
 
 
- 
- 今まではクックブックの中のattributes/default.rbとenvironments/development.jsonにattributeを指定して使っていた。
 
 
- 
- 自分なりにattributeの書き方を考えてみた。
 
 
該当レシピだけが使えそうなattributeはクックブックの中のattributeに書く。
環境別に異なるattributeはenvironmentsに書く。
役割別に定める必要があるattributeはroleに書く。
nginxはWebサーバなので、webという役割を持ってるroleに書くのが正しい。
关于角色
生成角色。
- roleを生成してnginxのattributeを上書きしよう。
 
% bin/knife role create web -z
{
  "name": "web",
  "override_attributes": {
    "nginx": {
      "install_method": "source",
      "source": {
        "version": "1.8.1",
        "checksum": "8f4b3c630966c044ec72715754334d1fdf741caa1d5795fb4646c27d09f797b7",
        "modules": [
          "nginx::http_ssl_module",
          "nginx::http_stub_status_module",
          "nginx::http_gzip_static_module",
          "nginx::http_mp4_module"
        ]
      }
    }
  },
  "run_list": [
    "recipe[nginx]"
  ]
}
- 
- 現在安定化されているnginxの最新バージョンは1.8.1である。(2016年3月)
 
 
- 
- nginxの本家ではファイルの検証方法としてchecksumではないpgpを提供している。
 
 
- 1.8.1をダウンロードしてchecksumを作り出す。
 
% wget http://nginx.org/download/nginx-1.8.1.tar.gz
% shasum -a 256 nginx-1.8.1.tar.gz
添加角色。
% bin/knife node run_list add dev "role[web]" -z
将烹饪书传输到节点并执行。
% bin/knife solo cook dev -E development
在节点上进行确认。
$ ps aux | grep nginx
root      7752  0.0  0.1  44628  1180 ?        Ss   08:41   0:00 nginx: master process /opt/nginx-1.8.1/sbin/nginx
nginx     7754  0.0  0.1  44984  1772 ?        S    08:41   0:00 nginx: worker process
vagrant   7912  0.0  0.0 103320   912 pts/0    S+   14:00   0:00 grep nginx
$ /opt/nginx-1.8.1/sbin/nginx -V
nginx version: nginx/1.8.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/opt/nginx-1.8.1 --conf-path=/etc/nginx/nginx.conf --sbin-path=/opt/nginx-1.8.1/sbin/nginx --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_mp4_module
请以以下方式进行参考
http://dev.classmethod.jp/server-side/chef/attribute-overrides-pattern/
Chef活用ガイド
Chef実践入門