仮想環境を用いたきっかけ
qiita初心者です。普段は大学で複数のサーバによる並列処理の研究、開発をしています。以前はローカル(Mac book air)開発環境を使ってプログラムを書いて、そのプログラムを大学で管理している何台かのサーバ(12 ~ 24台くらい)に移して動かしていました。最終的にプログラムを動かすサーバの設定に手間取ったり、ネットワーク設定の変更など不便に感じることが多かったです。出先で何かする時など、ちょっとした用事の時に新たにサーバを用意しないといけない時にも不便でした。またmacの開発環境が混み合うのも嫌でした(これに対しては様々な解決法があると思いますが!)。
Vagrant を用いたきっかけ
とりあえずVirtual boxを導入してみましたが、GUIの操作はイマイチ慣れませんでした。(完全に個人的な理由です)特にネットワーク構成などに戸惑いました。そこでVagrantを導入してみました。簡単に言うとCUIベースで仮想マシンを操作することができます。rubyファイルに仮想マシンの設定を書いていくので非常に感覚的に扱えます。
構造としてはGithubとVagrantを組み合わせた開発です。
これはあくまで開発時であり、実際にシステム評価をする時には物理サーバに環境を構築して行なっています!!!!
作業の流れ
まず前提としてVagrant の開発環境を構築する必要があります。このあたりを参考にしてmacに開発環境を構築します。
プログラムの開発
プログラムの開発は仮想マシン中の/vagrant以下のファイルについて行なっています。共有ファイルが仮想マシンを立ち上げたディレクトリ(たいていvagrantfileがあるとこ)にできるためこれらのファイルに対して操作を行います。これらのファイルはgithubのプライベートレポジトリで管理しておりgit操作の権限をローカル環境(mac book air)のみにもたせています。その関係でgitに対する処理は別ターミナルでホストマシンから行なっています。
vagrantfile はrubyベースになっていて、とても簡単に設定をいじることができます。
config.vm.define "server1" do |server|
server.vm.network "private_network", ip: "192.168.33.10"
server.ssh.forward_agent = true
end
config.vm.define "server2" do |server|
server.vm.network "private_network", ip: "192.168.33.11"
server.ssh.forward_agent = true
end
といった感じに記述していくことで設定を少しずつ変えながら全く同じ環境を簡単に複数立ち上げることができます。もちろんメモリ割り当てなどの設定もいじれます。
## 開発環境の吐き出し
vagrant halt [吐き出す対象の仮想サーバ名]
を入力し、package.boxを出力します。一台の仮想サーバなら[吐き出す対象の仮想サーバ名]は省略可能です。
##大学側のサーバ
vagrant を導入したのち、boxファイルを転送し、実行します。
vagrant init [package.boxファイルの名前]
複数の物理サーバ上に複数の仮想サーバを実行する場合、サーバ間はネットワーク疎通を図れるようvagrantfileに設定します(私はVLANセグメントを切ってVMにそのセグメントのアドレスをつけるようにvagrantfileに設定しています)。Githubでプログラムを移植して移行終了です。
またはプライベートなgit管理をしないのならば開発したプログラムごとpackageするのもありだと思います。
おわりに
直接遠隔のサーバにアクセスして開発からリリースまでを行うのもいいと思いますが複数のサーバを使った動作の検証を定期的にしたい場合、開発環境に適応した変更をそのまますべてのサーバに行なっていったり、普段の環境が使えない場所でデモをやるときなどにサーバを新たに用意したりするのは結構大変だと思うので仮想マシンは解決方法の一つとしてありだと思います。間違っているところもあるかもしれません。申し訳ありません。