ずっとさくらVPS(2G)でこのブログを運用していましたが、月1,500円支払うの必要があるのかと悩むようになりました。
年間15,000円払うのであれば、その分節約して美味しい日本酒でも飲みたいものです。
ということで、この前のsymfony meetup #7で@koriymさんに開発環境にDigitalOceanを勧められたので、まずは自分のブログから導入してみました。
vagrant + chefで構築
今回はvagrant + chefという環境で構築しました。
OSはCentOS7.1で、webサーバにはh2oを利用しています。
まずはDigitalOceanでAPIキーを入手する
Login後のページの上部にあるリンクAPIからPersonal Access Tokens
を作成しましょう。
適当にcookbookとか用意する
ChefDK入っているので、適当にchef-repoを作りましょう。
1
2
|
$ chef generate repo blog
$ cd blog
|
Berksfileを用意します。
1
2
3
4
5
|
$ vi Berksfile
source 'https://supermarket.chef.io'
cookbook 'h2o', '~> 0.1.1'
|
cookbookファイルができているのでデフォルトのレシピに以下のように記述します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
$ vi cookbooks/example/recipes/default.rb
include_recipe 'h2o::default'
directory '/var/www/polidog.jp' do
action :create
owner 'root'
mode '0755'
recursive true
end
begin
t = resources(:template => "/etc/h2o/h2o.conf")
t.source "h2o.conf.erb"
t.cookbook "blog"
rescue Chef::Exceptions::ResourceNotFound
Chef::Log.warn "could not find template /etc/rsyslog.conf to modify"
end
|
h2o用のconf用のテンプレートを用意します
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
$ vi cookbooks/templates/default/h2o.conf.erb
hosts:
"polidog.jp":
listen:
port: 80
paths:
"/":
file.dir: /var/www/polidog.jp/public
access-log: <%= node['h2o']['logdir'] %>/access.log
error-log: <%= node['h2o']['logdir'] %>/error.log
pid-file: <%= node['h2o']['pid'] %>
user: <%= node['h2o']['user'] %>
|
Vagrantプラグインインストール
vagrant-digitaloceanをインストールしましょう。
1
|
$ vagrant plugin install vagrant-digitalocean
|
Vagrantfileを用意する
Vagrantfileは以下のように書いてあげます。
今回はCentOS7.1で、リージョンはシンガポールを選択しています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure('2') do |config|
config.vm.provider :digital_ocean do |provider, override|
override.ssh.private_key_path = '~/.ssh/vagrant-digitalocean.pem'
override.vm.box = 'digital_ocean'
override.vm.box_url = "https://github.com/smdahlen/vagrant-digitalocean/raw/master/box/digital_ocean.box"
provider.token = 'your token'
provider.image = 'centos-7-0-x64'
provider.region = 'sgp1'
provider.size = '512mb'
end
config.vm.provision 'chef_zero' do |chef|
chef.cookbooks_path = ["cookbooks", "berks-cookbooks"]
chef.data_bags_path = 'data_bags'
chef.roles_path = 'roles'
chef.add_role "digital"
end
end
|
Chef-Zeroも使えていろいろとハッピーですね!
ハマった箇所
ローカルでvagrant操作する感覚で操作できるので特に問題はないんですが、一つだけ気になるところがありました。
vagrant halt
が出来ないんですよね。。。
まあ止めることないからいいんですが、どうやらAPIのバージョンが1系になっているのかエラーが発生してしまいます。
まだ詳しく調べてないので、あとで調べます。
最後に
リージョンが国内にないのはちょっと辛いですが、静的ページ返すだけの簡単なサーバであれば月500円ぐらいで借りられるDigitalOceanはなかなか良いかと思います。
さくらVPSでvagrant up
できれば最高なんだけどなぁ・・・(笑)