Edited at

Vagrant で hexo 環境構築

More than 3 years have passed since last update.

つくってみた


リポジトリ


初手

$ 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) 向けの高品質なアドオンパッケージ

https://fedoraproject.org/wiki/EPEL/ja

$ 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

http://192.168.33.10:4000/

Hexo_-_Vimperator.png

見れたー!!


Next


  • github-pageで公開