vagrantBoxの自作から公開までの最終回.
今回はサーバにvagrant boxをホスティングし, 配布環境を構築する.
vagrantBoxの自作から公開までのまとめ記事はこちら.
動作環境
- windows8.1 64bit
- RLogin
- エックスサーバー x10
- virtualBox 5.0.20
- vagrant 1.8.7
- centos 6.8
前提条件
前回の記事で自作した vagrant box を使用する.
前回の記事はこちら.
今回はエックスサーバでホスティングを行う.
sshクライアントソフトは RLogin を使用する.
winユーザで他のクライアントソフトを使っているのならそれもok.
RLoginについてはこちらの記事が参考になるかも.
今回のゴール
今回のゴールは次の通り.
- 次のコマンドで vagrant box のDLができる
vagrant box add --name box名 http://ホスト名/boxのあるディレクトリ/metadata.json
- metadata.json を編集することでバージョン管理ができる
バージョニング & 配布環境構築 をするとどんな良いことがあるのか
ここではvagrant boxのバージョニングや配布環境構築によるメリットを紹介.
- バージョニング
- 現在に比べてクリーンな旧boxの使用が可能
- 配布環境構築
- 複数台のPCで動作環境の統一が可能
可能であれば一人で使う場合もバージョニングした方が良い.
理由は, 過去に作成したboxへのロールバックが可能だから.
複数人で作業を行うのなら配布環境を構築するべき.
「私のPCだと動作するけど, あなたのPCだと動作しないね」
というような状況を回避できる.
もしも同じvagrant boxを使用した上でこのような現象に遭遇したら, コードに集中したデバッグが可能になる.
下準備・事前知識
vagrant box をホスティングするための準備を行う.
概要は次の通り.
- サーバー ディレクトリ構成
- ホストマシンに curl をインストール
サーバー ディレクトリ構成
あらかじめサーバ内のどこにvagrant boxを配置するか決めておく.
vagrant box ホスティング時のディレクトリ構成については次のサイトが参考になる.
d wwwroot/
d wwwroot/boxes
d wwwroot/boxes/yourname
f wwwroot/boxes/yourname/.htaccess
d wwwroot/boxes/yourname/box1
f wwwroot/boxes/yourname/box1/metadata.json
f wwwroot/boxes/yourname/box1/box1-$version1-$provider.box
f wwwroot/boxes/yourname/box1/box1-$version2-$provider.box
f wwwroot/boxes/yourname/box1/box1-$version2-$otherprovider.box
d wwwroot/boxes/yourname/box2
f wwwroot/boxes/yourname/box2/metadata.json
f wwwroot/boxes/yourname/box2/box2-$version1-$provider.box
(… etc)
私はエックスサーバにホスティングする.
次の場所にディレクトリを作り, そこにboxファイルや.jsonを置くことにする.
/home/サーバ名/ドメイン名/public_html/vagrantBox
私の環境では public_html
がwebルートになっている.
apacheからのアクセス許可がある階層に vagrantBox というディレクトリを作成する.
ここに vagrantBox と jsonファイル を作成してゆく.
ホストマシンに curl をインストール
vagrant1.8.7 が抱えるバグ対策のために必要.
バグについては後述する.
ホストマシンにcurlがインストールされていない場合は次の手順でインストールしておく.
次のサイトへアクセス.
Win64 - Generic
の Win64 x86_64 zip
をダウンロード.
curl.exe のあるディレクトリにpathを通しておく.
curlが必要な理由 と 不具合対策
vagrant1.8.7 ではvagrant内蔵のcurlパッケージが悪さをする.
これが原因でサーバからvagrant boxのDLができない.
参考: 1.8.7 fails to download or update boxes #7969 | github.com
ホストマシンにcurlがインストールされていれば, vagrant内curlパッケージは不要.
ゲストマシンにログインし, 次のコマンドでvagrant内のcurlパッケージを削除する.
1 2 3 |
$ sudo rm -rf /opt/vagrant/embedded/bin/curl |
手順
ここからは次の作業を行ってゆく.
- vagrant boxバージョニング
- サーバへの設置
概要は次の通り.
- vagrant box パッケージ化
- サーバにvagrant box を設置
- package.box をrename-> box名= centos68amp.2-0-0.box
- 今回は都合上このversion
- Rlogin または FileZilla 等のファイル転送ツールで転送
- package.box をrename-> box名= centos68amp.2-0-0.box
- json 編集
- .htaccess 編集
vagrant box add --name box名 http://ホスト名/boxのあるディレクトリ/metadata.json
でvagrant boxのDL
vagrant box パッケージ化
ここでは .boxファイル を作成する.
vagrantを起動したまま, 一度ホストマシンに戻る.
ホストマシンで次のコマンドを実行すると .bax ファイルが生成される.
$ vagrant package
サーバにvagrant box を設置
ファイル転送ツール (FileZilla等) で次の場所に .box ファイルを置く.
私はRLoginで転送を行った.
/home/サーバ名/ドメイン名/public_html/vagrantBox/package.box
このディレクトリに複数の.boxが存在する予定なので, バージョンの識別が可能になるようにrenameする.
今回は次のような名前にした.
/home/サーバ名/ドメイン名/public_html/vagrantBox/centos68amp.2-0-0.box
json 編集
次にjsonファイルを編集する.
/home/サーバ名/ドメイン名/public_html/vagrantBox/metadata.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
{ "name": "centos68amp", "description": "This box contains CentOS6.8, Composer, Apache2.4, MySQL and R", "short_description": "CentOS6.8", "versions": [{ "version": "2.0.0", "status" : "active", "description_html": " reconstruct w/o php-fpm ", "description_markdown": "reconstruct w/o php-fpm", "providers": [{ "name": "virtualbox", "url" : "http://ドメイン名/vagrantBox/centos68amp.2-0-0.box", "checksum_type": "sha1", "checksum": "c5f25ae387558ba9bdfbd735b7598ec11a87347b" }] }] } |
description
の値は何でもok.
version
は好きな番号で. 今回は 2.0.0
とした.
checksum
はlinuxコマンドで値を確認する.
$ sha1sum centos68amp.2-0-0.box
.htaccess 編集
.htaccessの変更が必要.
キャッシュコントロールが間違っているかも知れないが, 私はこのように記述した.
/home/サーバ名/ドメイン名/public_html/vagrantBox/.htaccess
1 2 3 4 5 6 7 8 9 10 |
Header unset Pragma FileETag None Header unset ETag DirectoryIndex metadata.json IndexIgnore * Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate, private" Header set Pragma "no-cache" AddType application/json .json |
vagrant box add --name box名 http://ドメイン名/boxのあるディレクトリ/metadata.json
でvagrant boxのDL
ホストマシンで vagrant box list
で表示されるようにboxをDLする.
コマンドプロンプトで次のコマンドを実行.
$ vagrant box add --name centos68amp http://ドメイン名/vagrantBox/metadata.json
$ vagrant box list
でboxと, そのバージョンまで表示されれば成功.
今回は以上.