droplet

VagrantとChefでDigitalOceanにLAMP環境をつくる

LINEで送る
Pocket

最近ちまたでよく名前を聞くDigitalOceanにVagrantを使って開発環境を一発で作成する設定を作ってみる事にした。ProvisioningにはChefを使う。作る開発環境はLAMP。それでは以下解説。

やる事

自分のMacのローカル環境のターミナルからvagrant up一発でDigitalOcean内にLamp環境のDropletを立ち上げる。

準備

まず、いろいろインストールしたりする必要があるのでこちらの記事でインストールしておく。

※「DigitalOceanに登録」では、「Vagrant」という名前でSSH公開鍵を登録しておく事。

次にVagrantからDigitalOceanを使うためのライブラリをインストールする。

  • vagrant-digitalocean
  • digital_ocean.box
  • vagrant-omnibus

vagrant-digitaloceanのインストール

$ vagrant plugin install vagrant-digitalocean

digital_ocean.boxのインストール

$ vagrant box add digital_ocean https://github.com/smdahlen/vagrant-digitalocean/raw/master/box/digital_ocean.box

これを行う事でDigitalOceanのvirtualboxの管理がしやすくなる。

vagrant-omnibusのインストール

$ vagrant plugin install vagrant-omnibus

DigitalOceanというリモートマシンに環境設定するためリモート側に適切なバージョンのChefをインストールする必要がある。vagrant-omnibusはVagrantのprovisioningの際にリモート環境側にChefをインストールする為のプラグイン。

Opensslへのパス登録

vagrant up を実行するために以下を行っておく。

$ ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE"
"/usr/local/etc/openssl/cert.pem"

で、出てきたcert.pemへのPATHを「.zshrc」へ追加しておく

export SSL_CERT_FILE=/usr/local/etc/openssl/cert.pem

Vagrantの設定

準備が終わったらいよいよLAMP環境構築する設定方法へ。

まず、作業ディレクトリを決める。ここでは、「~/Sites/lamp」とする。

$ mkdir -p ~/Sites/lamp
$ cd ~/Sites/lamp
$ knife solo init chef
$ vim chef/Cheffile
--------------------------------
site 'http://community.opscode.com/api/v1'

cookbook 'apt'
cookbook 'apache2'
cookbook 'mysql'
cookbook 'php'
--------------------------------
$ cd chef
$ librarian-chef install
$ cd ../
$ vagrant init {vagrant_project_name}

ここまで実行すると「~/Sites/lamp」ディレクトリの中にVagrantfileファイルとchefディレクトリが作成される。

chefディレクトリの作成部分はこちら、cookbookインストール部分はこちらの記事を参照。

Vagrantfileファイルの編集

DigitalOceanにdropletを作成するために、vagrant init コマンドで作成したVagrantfileファイルを編集する。Vagrantfileをテキストエディタで開けるといろんな設定がコメントアウトされた状態で初期化されているが以下2点について編集する。

  • providerの設定
  • provisionの設定

providerの設定

providerの設定をする事で、Vagrantが接続先のホスト(DigitalOcean)に自動的にサーバ環境を立ち上げてくれる。設定出来る項目は基本的にDigitalOceanのウェブサイトから作成できるdropletと同じ。「CPUサイズ」「リージョン」「OS」など。

config.vm.provider 'digital_ocean' do |vb, ovr|
ovr.ssh.private_key_path = "~/.ssh/id_rsa"
ovr.vm.box = "digital_ocean"
ovr.vm.box_url = "https://github.com/smdahlen/vagrant-digitalocean/raw/master/box/digital_ocean.box"

vb.token = {TOKEN}
vb.image = 'ubuntu-14-04-x64'
vb.region = 'sgp1'
vb.size = '512MB'
end
ENV['VAGRANT_DEFAULT_PROVIDER'] = 'digital_ocean'

上記にて{TOKEN}の部分には自分のトークンを設定する。

TOKENの作成方法はこちらを参照

※追記: vagrant-digitaloceanプラグインバージョン0.7.1 以降vb.imageの指定方法が変更となった。以前は’Ubuntu 14.04 x64’と「name」を記述していたが、0.7.1以降は’ubuntu-14-04-x64’の様に「slug」を指定する必要がある。理由としては、DigitalOcean側の仕様変更があったため。

provisionの設定

provisionは立ち上がったOS内の初期化を実施する。provision内でshellを直接書く事で何でも出来るが、ここではもっと簡単に管理するためにchef-soloを使う。すでに、apache, mysql, phpに対応するchefのcookbookをインストールしてあるので、後はその中のrecipeと呼ばれる設定をVagrantfile内のprovisionセクターで読み込むだけだ。

config.vm.provision "chef_solo" do |chef|
chef.cookbooks_path = "chef/cookbooks/"
chef.run_list = %w[
recipe[apt]
recipe[apache2]
recipe[apache2::logrotate]
recipe[apache2::mod_auth_basic]
recipe[apache2::mod_php5]
recipe[apache2::mod_rewrite]
recipe[apache2::mod_deflate]
recipe[apache2::mod_headers]
recipe[apache2::mod_ssl]
recipe[apache2::mod_vhost_alias]
recipe[mysql::client]
recipe[mysql::server]
recipe[php]
recipe[php::module_mysql]
]
end
config.omnibus.chef_version = :latest

※aptというレシピはyum cacheをアップデートしてくれる。これをしないでmysqlのインストールしようとしたら筆者の環境では失敗した。

※最後の行「config.omnibus.chef_version = :latest」にてリモート環境に適切なchefをインストールする。

Vagrantにてdropletを起動する

設定が完了したのでいよいよ実行してみる

$ vagrant up

上記コマンドを~/Sites/lamp内で実行。かなり時間がかかる(3分くらい)が、これで一気にDigitalOcean内にLAMP環境をインストールしてくれる。DigitalOceanのウェブ管理ページに行き、「Droplets」を見るとインスタンスが作られた事がわかる。

 

droplet
droplet

参考にさせて頂いたサイト

サーバー設定ツール「Chef」応用編:knife-soloとData Bagを使うサーバー設定ツール「Chef」応用編:knife-soloとData Bagを使う

Vagrant + chef-solo によるPHP + MySQLな開発環境構築入門

Provisioning a LAMP Stack and WordPress with Chef, Part 1: Apache, MySQL, and PHP

 [Vagrant 1.5] vagrant provisionして、chef binary was not found と出たら。

 

 

「いいね」ご協力お願い致します!

LINEで送る
Pocket

コメントを残す

メールアドレスが公開されることはありません。