Vagrantfileにプロビジョニングを書いてみた
Vagrantfileにプロビジョニングを書いてみた。
chefもansibleも初期学習コストが高そうだし全然大したことやらないのでシェルで書いた。Vagrantのドキュメントにも
If you've never used a configuration management system before, it is recommended you start with basic shell scripts for provisioning.
と書かれてる。コンフィギュレーションマネジメントシステムをネバーユーズドな自分はシェルスクリプトがいい。
やってるのは以下。
ディレクトリ構成
$ tree . ├── Vagrantfile └── provision ├── files │ ├── nginx.conf │ └── rails_app.conf └── scripts ├── provision.sh └── provision_root.sh 3 directories, 5 files
Vagrantfile
# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure(2) do |config| config.vm.box = "centos6" config.vm.network "forwarded_port", guest: 80, host: 8080 config.vm.provision "file", source: "~/.vimrc", destination: ".vimrc" config.vm.provision "file", source: "~/.gemrc", destination: ".gemrc" config.vm.provision "file", source: "provision/files/nginx.conf", destination: "nginx.conf" config.vm.provision "file", source: "provision/files/rails_app.conf", destination: "rails_app.conf" config.vm.provision "shell", path: 'provision/scripts/provision_root.sh' config.vm.provision "shell", path: 'provision/scripts/provision.sh', privileged: false end
.vimrcと.gemrcは必須じゃないけど、後でsshで操作するときに使い勝手よくするためにコピーしてる。
privileged:
オプション(デフォルトでtrue)の有無でrootで実行されるスクリプトとそうでないスクリプトを分けてる。
privileged: true
(デフォルト)で指定したスクリプトの中の~
はrootのホーム(/root)になるので注意。最初間違えた。
シェルスクリプト
provision/scripts/provision_root.sh
#!/bin/env bash yum update -y yum install -y vim yum install -y openssl-devel # for Ruby # Nginx yum localinstall -y http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm yum install -y nginx for i in /etc/nginx/conf.d/*; do mv $i $i.bk; done mv nginx.conf /etc/nginx/ mv rails_app.conf /etc/nginx/conf.d/ # MySQL yum localinstall -y http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm yum install -y mysql-community-server yum install -y mysql-community-devel # for mysql2 gem # Service nginx chkconfig nginx on /etc/init.d/mysqld start chkconfig mysqld on
provision/scripts/provision.sh
# Ruby git clone https://github.com/sstephenson/rbenv.git ~/.rbenv echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile echo 'eval "$(rbenv init -)"' >> ~/.bash_profile git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build source ~/.bash_profile rbenv install 2.2.2 rbenv global 2.2.2 gem install bundler --no-document gem install rails --no-document
vimは必須じゃない。
config.vm.provision "file"
は、vagrantユーザ(一般ユーザ)権限でscpされるとのことなので、nginxの設定ファイルはいったんホームディレクトリにコピーしてからシェルスクリプトで/etc/nginx以下に移動してる。もっといい方法ありそう。
nginxの設定ファイルは↓の記事で書いた通り。
まとめ
いろいろ確信持たずにやってるけど、これで一応動いてるような気がする。
関連する記事
- 作者: 新原雅司
- 出版社/メーカー: 技術評論社
- 発売日: 2013/09/12
- メディア: Kindle版
- この商品を含むブログ (5件) を見る
- 作者: Mitchell Hashimoto,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/02/21
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (9件) を見る