つくってみた
リポジトリ
初手
$ git init
$ vagrant init
OSインストール
折角なので、最新のCentOSを入れてみる
サーバ名が default のままだと、serverspec に失敗するので変更
参考 : Carousel is a lie!: "Circular dependency detected" error in ServerSpec
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure(2) do |config|
config.vm.box = "chef/centos-7.0"
config.vm.define :hexo_server do |hexo_server|
end
end
$ vagrant up
OSのバージョンを確認
$ vagrant ssh
Last login: Tue Jul 22 03:42:16 2014 from 10.0.2.2
[vagrant@localhost ~]$ cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)
.gitignore に /.vagrant を追加
echo "/.vagrant/" >> .gitignore
serverspec 導入
bundle install
$ bundle init
$ cat <<EOS >> Gemfile
gem 'rake'
gem 'serverspec'
EOS
$ bundle --binstubs --path vendor/bundle
$ cat <<EOS >> .gitignore
/.bundle/
/vendor/bundle/
/bin
EOS
serverspec-init
$ serverspec-init
Select OS type:
1) UN*X
2) Windows
Select number: 1
Select a backend type:
1) SSH
2) Exec (local)
Select number: 1
Vagrant instance y/n: y
Auto-configure Vagrant from Vagrantfile? y/n: y
+ spec/
+ spec/default/
+ spec/default/sample_spec.rb
+ spec/spec_helper.rb
+ Rakefile
+ .rspec
テストが実行されることを確認
$ rake spec
テストは失敗する
node.js インストール
テスト実装
spec/hexo_server/node_spec.rb
require 'spec_helper'
describe package 'nodejs' do
it { should be_installed.with_version('0.10') }
end
describe package 'npm' do
it { should be_installed.with_version('1.3.6') }
end
git rm spec/hexo_server/sample_spec.rb
$ rake spec
テストは失敗する
vagrant-omnibus 導入
chef client を サーバに導入してくれる
プラグインを入れていなければインストール
$ vagrant plugin install vagrant-omnibus
Vagrant.configure(2) do |config|
config.omnibus.chef_version = :latest
...
$ vagrant provision
インストールされたことを確認
$ vagrant ssh
[vagrant@localhost ~]$ knife --version
Chef: 12.0.3
chef 導入
$ echo "gem 'knife-solo'" >> Gemfile
$ bundle install
epel リポジトリ導入
node.js がデフォルトのyumリポジトリにないので、EPELを追加する
エンタープライズ Linux 用の拡張パッケージ(EPEL) は、 Red Hat Enterprise Linux (RHEL) 向けの高品質なアドオンパッケージ
$ knife cookbook create epel_repo -o cookbooks
$ cd cookbooks/epel_repo
$ rm -rf CHANGELOG.md attributes/ definitions/ files/ libraries/ providers/ resources/ templates/
$ echo package \'epel-release\' > recipes/default.rb
node.js 導入
$ knife cookbook create node -o cookbooks
$ cd cookbooks/node/
$ rm -rf CHANGELOG.md attributes/ definitions/ files/ libraries/ providers/ resources/ templates/
$ echo depends \'epel_repo\' >> metadata.rb
$ cat <<EOS > recipes/default.rb
include_recipe 'apache'
package 'nodejs'
package 'npm'
EOS
Vagrantfile に実行するレシピを追記
Vagrant.configure(2) do |config|
config.omnibus.chef_version = :latest
config.vm.box = "chef/centos-7.0"
config.vm.define :hexo_server do |hexo_server|
hexo_server.vm.provision :chef_solo do |chef|
chef.cookbooks_path = './cookbooks'
chef.log_level = 'debug'
chef.add_recipe 'epel_repo'
chef.add_recipe 'node'
end
end
end
$ vagrant reload
テスト実行
$ rake spec
今度は成功
vagrant-cachier 導入
vagrant-cachier は、仮想マシン内でダウンロードしたパッケージをキャッシュしてくれるプラグイン
開発中に何度も vagrant destroy, vagrant up しているときに、その都度パッケージをダウンロードするのを防いで、
仮想マシンの構築を高速化してくれる
$ vagrant plugin install vagrant-cachier
Vagrant.configure(2) do |config|
...
config.cache.scope = :box if Vagrant.has_plugin?("vagrant-cachier")
end
Hexo導入
インストールとinit
$ knife cookbook create hexo -o cookbooks
$ rm -rf attributes/ definitions/ files/ libraries/ providers/ resources/ templates/
$ echo depends \'node\' >> metadata.rb
$ cat <<EOF > recipes/default.rb
include_recipe 'node'
execute 'hexo install' do
command 'npm install -g hexo'
not_if { File.exists?('/usr/bin/hexo') }
end
execute 'hexo init' do
cwd '/var/www/mypage'
command <<EOS
hexo init .
npm install
EOS
end
EOF
hexo用ディレクトリを synced_folder に
あと、ホストから見る時の為にIPアドレスを固定
Vagrant.configure(2) do |config|
...
config.vm.define :hexo_server do |hexo_server|
hexo_server.vm.provision :chef_solo do |chef|
...
chef.add_recipe 'hexo'
end
...
config.vm.synced_folder 'mypage', '/var/www/mypage', create: true
config.vm.network :private_network, ip: "192.168.33.10"
動作確認
$ vagrant ssh
$ cd /var/www/mypage/
$ hexo server -i 192.168.33.10
[info] Hexo is running at http://192.168.33.10:4000/. Press Ctrl+C to stop.hexo server
見れたー!!
Next
- github-pageで公開