kurodakazumichi / issues

0 stars 0 forks source link

Vagrant #4

Open kurodakazumichi opened 6 years ago

kurodakazumichi commented 6 years ago

概要

Vagrantの使い方をまとめていく。 Vagrantは仮想環境の構築手順をまとめて、いつでも同じ構成の仮想環境を構築することができるツール。 仮想環境を構築するソフトは別途必要なので、VirtualBoxやVMWareなどをあらかじめインストールしておく必要あり。

公式サイト

https://www.vagrantup.com

関連

Unixコマンド VirtualBox, VMWareなどの仮想マシン Ruby

kurodakazumichi commented 6 years ago

VirtualBoxのインストール

ここからマシンにあったインストーラを取得、インストールする。 http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp

kurodakazumichi commented 6 years ago

Vagrantのインストール

ここからマシンにあったインストーラーを取得、インストールする。 https://www.vagrantup.com/downloads.html

kurodakazumichi commented 6 years ago

Boxを取得する

# 構文
# vagrant box add [options] <name, url, or path> <url>
vagrant box add centos67_64 https://github.com/CommanderK5/packer-centos-template/releases/download/0.6.7/vagrant-centos-6.7.box

いろいろ書き方はあるようだが、この形で取得できる。 Box:マシンイメージ、CentOS、UbuntuなどたくさんのBoxが存在するので使いたいものを取ってくるイメージ。

取得済みのboxを確認

vagrant box list

取得済みのboxを削除

vagrant box remove [boxの名前]

boxをまとめてるサイト

http://www.vagrantbox.es/

kurodakazumichi commented 6 years ago

仮想マシンを起動する

  1. 仮想マシンごとにディレクトリを作る
  2. vagrantを初期化する(Vagrantfileを作る)
  3. 仮想マシンを起動する
mkdir centos
cd centos
vagrant init centos67_64
vagrant up
kurodakazumichi commented 6 years ago

vagrantのコマンド

# 起動している仮想マシンの状態を確認する
vagrant status
# 仮想マシンを起動する
vagrant up
#仮想マシンを終了する
vagrant halt
# 仮想マシンをスリープする
vagrant suspend
# 仮想マシンを復帰する
vagrant resume
# 仮想マシンを再起動する
vagrant reload
# 仮想マシンを破棄する
vagrant destroy
kurodakazumichi commented 6 years ago

仮想マシンに接続する

vagrant ssh

これだけで仮想マシンに接続できる。

kurodakazumichi commented 6 years ago

WEBサーバーを構築する

yum -y install httpd
sudo service httpd start
sudo chkconfig httpd on
sudo service iptables stop
sudo chkconfig iptables off

解説

yum -y install httpd httpdをインストールする。

sudo service httpd start httpdをサービスで起動する。

sudo chkconfig httpd on 起動時にhttpdが自動で立ち上がるようにする。

sudo service iptables stop ファイアーウォールを無効にする。 ファイアーウォールが有効だと設定がややこしくなるらしいので、ローカルなら切ってしまえ。

sudo chkconfig iptables off 起動時にファイアーウォールが起動しないようにする。

kurodakazumichi commented 6 years ago

WEBページを表示する

  1. index.htmlを作成する
  2. Vagrantfileを編集する
  3. 仮想マシンを再起動する
  4. ブラウザからindex.htmlにアクセスして確認。

ファイル作成:/var/www/html/index.html

<h1>Hello World!</h1>

ファイル編集:Vagrantfile

〜省略
# Create a private network, which allows host-only access to the machine
# using a specific IP.
- # config.vm.network "private_network", ip: "192.168.33.10"
+ config.vm.network "private_network", ip: "192.168.33.10"
〜省略

プライベートネットワークを使う部分のコメントを外す。

vagrant reload

ブラウザで以下のURLにアクセス http://192.168.33.10

kurodakazumichi commented 6 years ago

共有フォルダ

HOSTマシン(Mac)のVagrantfileがあるフォルダがGUESTマシン(VirtualBox)上の/vargrantになっている。

index.htmlをMac上で編集できるように設定を変更する。

先ほど作成したindex.htmlを仮想マシン上ではなくマック上で編集できるように ドキュメントルートの位置を変更するやり方を記載。

# /var/www/htmlを削除
sudo rm -rf /var/www/html
# /var/www/htmlで/vagrantを見るようにシンボリックリンクをはる
sudo ln -fs /vagrant /var/www/html

2018/4/9 追記

一見うまく動作していると思っていたが、どうにもリアルタイムに中身が同期されない。 調べているとvagrant up時に一度rsyncで同期されるだけで リアルタイムに反映するためにはプラグインをいれる必要がある事がわかった。

https://qiita.com/herring_roe/items/eb9a8e49aa1e7e6cf091 https://tulist.club/technology/dev-env/2017/11/12/137

vagrant-vbguest のインストール

vagrant plugin install vagrant-vbguest

Vagrantfileの編集

# 共有フォルダの設定を以下のようにする
config.vm.synced_folder ".", "/vagrant",type:"virtualbox"

これでvagrantを起動するとリアルタイムに同期されるようになった。

kurodakazumichi commented 6 years ago

Provisioning機能

プロビジョニングはvagrant upをして起動した際に自動的に実行される処理のこと。 予め実行したいコマンドを用意しておき、Vagrantfileに設定を記述する事で実装できる。

実行時にshellスクリプトを実行する(inline)

ファイル編集:Vagrantfile

config.vm.provision :shell, :inline => "echo hello world"

Vagrantfileに上記の一文を追加すると、起動時にecho hello worldが実行される。

補足

vagrant upでプロビジョニングが実行されるのは一番最初にvagrant upをした時のみ 2回目以降はMachine already provisioned.などと表示される。 vagrant provisionとするかvagrant up --provisionとする事で明示的にプロビジョンを実行できる。

プロビジョンを外部ファイルにまとめる。

前述した方法はVagrantfileに直接shellを記述したが、shellを別ファイルに分ける事ができる。 その場合の方法は以下。

ファイル編集:Vagrantfile

config.vm.provision :shell, path => "provision.sh"

ファイル作成: Vagrantfileと同じフォルダにprovision.sh

echo hello world in provision.sh
kurodakazumichi commented 6 years ago

Boxを作成する。

ある程度サーバーの構築をした場合、その状態を保存して使いまわしたいという時に便利。

vagrant package

Vagrantfileのあるところで上記のコマンドを実行するとBoxが作成される。 package.boxというファイルが出来上がる。

kurodakazumichi commented 6 years ago

作成したBoxをシステム(Vagrant)に登録する。

# 構文
# vagrant box add <name> <box file>
vagrant box add my_box package.box

package.boxがあるところで上記コマンドを実行すると‘my_box‘という名前で登録される。 登録されたboxはcentosなど他のBoxと同様に使う事ができる。

補足

システムに登録されたら、元のpackage.boxは削除しても問題ない。

kurodakazumichi commented 6 years ago

Agent forward

ssh-add ~/.ssh/id_rsa # gitで使ってる秘密鍵を登録

Vagrangfileを編集

# agent forwardを有効にする設定を追記
config.ssh.forward_agent = true

これでvagrant sshすれば、HOSTの秘密鍵を使いまわせる。