■目次
Vagrant概要環境構築IPアドレスの指定について複数サーバの起動についてボックスを作成&使用(要検証)クローン(要検証)アクセスするドメインを自動設定(要検証)トラブルVagrantコマンドメモ
■Vagrant概要
VirtualBox ... 仮想化環境。Windows内でLinux、Mac内でWindows…など、、既存のOS内で別のOSを使うことができる。 Vagrant ... VirtualBoxなど、仮想化環境を容易に構築することができる。 ここでは、Windows上にLinux環境を作るものとする Vagrant https://ja.wikipedia.org/wiki/Vagrant_(%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2) VirtualBox https://ja.wikipedia.org/wiki/VirtualBox VMware https://ja.wikipedia.org/wiki/VMware Oracle VM VirtualBox http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnj... VagrantとDockerについて名前しか知らなかったので試した http://qiita.com/hidekuro/items/fc12344d36d996198e96 Vagrant(1.7.2)でCentOSをインストールする http://qiita.com/ringo0321/items/f07ea1dfc9b7eb9326f8 仮想環境構築ツール「Vagrant」で開発環境を仮想マシン上に自動作成する http://knowledge.sakura.ad.jp/tech/1552/ Oracle VM VirtualBoxを使う http://www.atmarkit.co.jp/ait/articles/1009/30/news122.html VirtualBoxの導入からOSインストールまでのチュートリアル解説 http://success.tracpath.com/blog/2013/10/15/virtualbox%E3%81%AE%E5%B0%8E%E5%85%A5%E3%81%8B%E3%82%89o... VirtualBoxとVagrantで開発環境を構築 http://www.webcyou.com/?p=4632 2016年版、Dockerのすべてが5分でわかるまとめ!(コマンド一覧付き) http://paiza.hatenablog.com/entry/docker_intro 開発環境の構築・共有を簡単にするVagrant入門 https://thinkit.co.jp/story/2015/03/19/5740 Vagrantで複数環境を立ち上げる際、IPアドレスの割当やポートフォワードを全て自動化する http://qiita.com/jyokyoku/items/85b030537a5728c9d771
■環境構築
■準備 XAMPPなど何らかのローカル環境を使っている場合、念のためあらかじめ終了させておく ■VirtualBoxインストール ※環境によっては、最新版では動作しないことがあるので注意 ※2018年2月21日の時点でWindows10にインストールする際、 「VirtualBox-5.1.32-120294-Win.exe」 「vagrant_2.0.1_x86_64.msi」 なら動作した(最新版のVirtualBoxでは、CentOS起動時に「default: SSH auth method: private key」で止まってしまった) ※2018年5月26日の時点でWindows10にインストールする際、 「VirtualBox-5.2.12-122591-Win.exe」 「vagrant_2.1.1_x86_64.msi」 なら動作した(最新版のVirtualBoxでは、CentOS起動時に「default: SSH auth method: private key」で止まってしまった) https://www.virtualbox.org/ から VirtualBox-5.2.12-122591-Win.exe をダウンロード 初期設定のまま C:\Program Files\Oracle\VirtualBox\ にインストール 途中「Warning Network Interfaces」と表示されるが、「Yes」を選択する 途中デバイスソフトウェアのインストールについて確認されるが、「インストール」を選択する Oracle VM VirtualBox マネージャが起動すれば完了 ■Vagrantインストール https://www.vagrantup.com/ から vagrant_2.1.1_x86_64.msi をダウンロード 初期設定のまま C:\HashiCorp\Vagrant\ にインストール PCを再起動 ■CentOS6用にVagrantBox作成 http://www.vagrantbox.es/ でCentOS6用BoxのURLを確認 (Oracleだったりその他サイトだったり、ダウンロード先はたくさんあるので好みの場所から取得する) 以下、Windowsのコマンドプロンプトで操作 >vagrant box list There are no installed boxes! Use `vagrant box add` to add some. ※はじめはボックスは無い >vagrant box add centos64-x86_64 https://github.com/2creatives/vagrant-centos/releases/download/v6.4.2/centos64-x86_64-20140116.box ==> box: Box file was not detected as metadata. Adding it directly... ==> box: Adding box 'centos64-x86_64' (v0) for provider: box: Downloading: https://github.com/2creatives/vagrant-centos/releases/download/v6.4.2/centos64-x86_64-20140116.box box: Progress: 100% (Rate: 159k/s, Estimated time remaining: --:--:--) ==> box: Successfully added box 'centos64-x86_64' (v0) for 'virtualbox'! ※CentOSをダウンロード(時間がかかる) ※実行しても、反応があるまで少しラグがある >vagrant box list centos64-x86_64 (virtualbox, 0) ※追加されたボックスを確認できる ■Vagrantfile作成 >mkdir C:\vagrant\centos6 >cd C:\vagrant\centos6 ※CentOS6用フォルダを作成して移動。場所やフォルダ名は任意 >vagrant init --minimal centos64-x86_64 A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant. ※Vagrantfile(VMの構成を書くためのファイル)を作成 ※--minimal を省略すると、コメント付きのファイルが作成される ※Vagrantfileの内容は以下のとおり。「centos64-x86_64」には先程入手したボックスの名前を指定する(任意の名前ではない) Vagrant.configure(2) do |config| config.vm.box = "centos64-x86_64" end ※テキストエディタで以下のように編集 Vagrant.configure(2) do |config| config.vm.box = "centos64-x86_64" config.vm.box_check_update = false config.vm.network "private_network", ip: "192.168.33.10" # config.vm.network "forwarded_port", guest: 80, host: 80 # config.vm.synced_folder "./code", "/var/www/html/code" end ■仮想マシンを起動 >vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Importing base box 'centos64-x86_64'... ==> default: Matching MAC address for NAT networking... ==> default: Setting the name of the VM: centos6_default_1464956072354_48896 ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat ==> default: Forwarding ports... default: 22 (guest) => 2222 (host) (adapter 1) ==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 default: SSH username: vagrant default: SSH auth method: private key default: Warning: Remote connection disconnect. Retrying... default: default: Vagrant insecure key detected. Vagrant will automatically replace default: this with a newly generated keypair for better security. default: default: Inserting generated public key within guest... default: Removing insecure key from the guest if it's present... default: Key inserted! Disconnecting and reconnecting using new SSH key... ==> default: Machine booted and ready! ==> default: Checking for guest additions in VM... default: The guest additions on this VM do not match the installed version of default: VirtualBox! In most cases this is fine, but in rare cases it can default: prevent things such as shared folders from working properly. If you see default: shared folder errors, please make sure the guest additions within the default: virtual machine match the version of VirtualBox you have installed on default: your host and reload your VM. default: default: Guest Additions Version: 4.3.6 default: VirtualBox Version: 5.0 ==> default: Mounting shared folders... default: /vagrant => C:/vagrant/centos6 ※仮想マシンを起動(初回はBoxのダウンロードとVM生成があるため時間がかかる) ※完了すると、Oracle VM VirtualBox マネージャで確認できる ■SSHでアクセス >vagrant ssh `ssh` executable not found in any directories in the %PATH% variable. Is an SSH client installed? Try installing Cygwin, MinGW or Git, all of which contain an SSH client. Or use your favorite SSH client with the following authentication information shown below: Host: 127.0.0.1 Port: 2222 Username: vagrant Private key: C:/vagrant/centos6/.vagrant/machines/default/virtualbox/private_key SSHでの接続情報が表示されるので、この情報でSSHログインできる (環境によっては、即座にSSHで操作できる状態になるみたい) もしくは、以下のホスト名とポートでもアクセスできる (Vagrantfile で「config.vm.network "private_network", ip: "192.168.33.10"」と設定した場合) Host: 192.168.33.10 Port: 2222 Vagrantの持つ機能で「ホストOS(この場合はWindows)から127.0.0.1の2222番ポートへアクセスした場合、VagrantのSSHへ転送する」となっている 設定されているのはSSHへのアクセスのみ それとは別にVagrantはネットワークの設定機能を持っている デフォルトで「ホストOSから192.168.33.10の22番ポートへのアクセスは2222番ポートへ転送する」となっているため、SSHアクセスができる これを使えば80番ポートでHTTPアクセスさせることもできる FTP - vagrantのssh-addressとprivate-network-ipの違い(32537)|teratail https://teratail.com/questions/32537 Vagrantで立ち上げた仮想環境にIPアドレスを振ってsshでログインする - Qiita https://qiita.com/grachro/items/4d34a43a9a57946f3693 ■日本語化 # yum -y groupinstall "Japanese Support" … 日本語関連のパッケージをまとめてインストール # localedef -f UTF-8 -i ja_JP ja_JP.utf8 … ロケールを追加 # vi /etc/sysconfig/i18n … i18nを修正
#LANG="en_US.UTF-8" LANG="ja_JP.UTF-8"
$ date … 日本語化を確認する(一旦ログアウトして確認する) 2017年 11月 18日 土曜日 20:19:27 JST ※すべてが日本語化されるわけではないみたい VagrantのCentOSを日本語化してみる http://d.hatena.ne.jp/yk5656/20140527/1402758009 ■ファイヤーウォールを設定 $ su - … rootになる Password: vagrant # service iptables stop … ファイヤーウォールを無効にする(ローカル開発環境のため) # chkconfig ip6tables off # chkconfig iptables off ■タイムゾーンを設定 # date … 時間を確認する(時差がある) Fri Jun 3 12:35:48 UTC 2016 # cp /usr/share/zoneinfo/Japan /etc/localtime … 時差を調整する cp: overwrite `/etc/localtime'? y # vi /etc/sysconfig/clock
#ZONE="Etc/UTC" ZONE="Asia/Tokyo"
# date … 時間を確認する(時差が調整されている) Fri Jun 3 21:36:45 JST 2016 以降は通常通りサーバを構築する 開発環境なので、急ぐなら yum update は省略していいかも ■HTTPでアクセス(nginxの場合) # yum -y install nginx … nginxをインストール # service nginx start # chkconfig nginx on インストール後、Vagrantfile で設定したIPアドレスである http://192.168.33.10/ にアクセスすると nginxのデフォルト画面が表示される ■HTTPでアクセス(Apacheの場合) # yum -y install httpd … Apacheをインストール # vi /etc/httpd/conf/httpd.conf … サーバ名を設定
ServerName localhost.localdomain:80
# service httpd start # chkconfig httpd on # vi /var/www/html/index.html … テストページ作成
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>テスト</title> </head> <body> <p>テスト。</p> </body> </html>
インストール後、Vagrantfile で設定したIPアドレスである http://192.168.33.10/ にアクセスすると /var/www/html/index.html の内容が表示される ■PHPを使用(Apacheの場合) # yum -y install php php-mbstring php-gd 通常通り、上のようなコマンドでインストールできる ただし開発環境なので、タイムゾーンや文字コードなどの基本的な設定以外に、以下の設定も行なっておくことを推奨 (すべてのエラーを画面に表示) # vi /etc/php.ini
#error_reporting = E_ALL & ~E_DEPRECATED error_reporting = E_ALL #display_errors = Off display_errors = On
# service httpd restart ■localhostでアクセスする&同一LAN内からアクセスする ※以下の方法の他に、「config.vm.network」の設定でDHCPや固定IPの設定などを行うこともできる 詳細は「IPアドレスの指定について」の項目を参照(そちらの方が正攻法かもしれない) 例えばVagrantfile に以下の設定を追加して起動すると、 http://localhost:8080/ でアクセスできるようになる config.vm.network "forwarded_port", guest: 80, host: 8080 つまり、Vagrantfile に以下の設定を追加して起動すると、 http://localhost:80/ でアクセスできるようになり、ポート番号を省略して http://localhost/ でアクセスできる config.vm.network "forwarded_port", guest: 80, host: 80 この状態なら、同一LAN内から http://192.168.1.25/ のようにPCのIPアドレスを指定すればlocalhostにアクセスできる (LANやWindowsのネットワーク設定はされているものとする) OSX における Vagrant 80番ポートフォワーディング - Qiita http://qiita.com/hidekuro/items/a94025956a6fa5d5494f LAN内の他端末からvagrantの仮想マシンにsshする - Qiita http://qiita.com/teratsyk/items/10bf89422ce98265c8a8 ■フォルダ同期 初期状態では C:\vagrant\centos6 の内容と /vagrant の内容が同期している 以下のように指定すると、任意の場所を同期させることができる (この場合、C:\vagrant\centos6\code の内容と /var/www/html/code の内容が同期している) config.vm.synced_folder "./code", "/var/www/html/code" 開発時はバーチャルホストを設定して、C:\vagrant\centos6\code と /var/www/vhosts を丸ごと同期させたりすると便利 以下はVagrantfileの設定例 config.vm.synced_folder "./code", "/var/www/vhosts" 開発時はWindowsのhostsファイルを編集して http://refirio.localhost/ のようなURLでアクセスすると良さそう ■メールの送信 # yum -y install mailx sendmail sendmail-cf # systemctl start sendmail # systemctl enable sendmail # systemctl is-enabled sendmail ↑上記の手順で最低限メールを送信できるらしいが、設定を行わなくても↓でメールを送信できた PHPからの送信も mb_ 含め大丈夫だった # mail refirio.work@gmail.com Subject:test … 「test」と入力してENTER test … 「test」と入力してENTER . … 「.」と入力してENTER ■CentOS7+nginx(整理中) MacにVagrantでCentOS7環境を作成 - Qiita https://qiita.com/sudachi808/items/3614fd90f9025973de4b v1801.01 の CentOS 7 Vagrant box に日本語ロケールを追加する方法 - Qiita https://qiita.com/ryo-sato/items/00dea41bf665626c9b43 vagrant box list vagrant box add centos/7 3 vagrant box list mkdir C:\vagrant\centos7 mkdir C:\vagrant\centos7\code cd C:\vagrant\centos7 vagrant init centos/7 Vagrant.configure(2) do |config| config.vm.box = "centos/7" config.vm.box_check_update = false config.vm.network "private_network", ip: "192.168.33.10" config.vm.network "forwarded_port", guest: 80, host: 80 config.vm.synced_folder "./code", "/var/www/html/code" end vagrant up su - systemctl stop firewalld systemctl disable firewalld localectl list-locales | grep -i ja yum -y reinstall glibc-common localectl list-locales | grep -i ja localectl set-locale LANG=ja_JP.UTF-8 localectl status timedatectl set-timezone Asia/Tokyo timedatectl status yum -y install nginx … これで駄目なら以下でインストール yum -y install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm yum -y install --enablerepo=nginx nginx systemctl start nginx.service systemctl enable nginx.service http://192.168.33.10/ ■バーチャルマシンを削除する場合 >cd C:\vagrant\centos6 >vagrant destroy ※「vagrant up」を実行したフォルダに移動して「vagrant destroy」を実行する ■ボックスを削除する場合 >vagrant box remove centos64_x86_64
■IPアドレスの指定について
Vagrantfileの「config.vm.network」で、IPアドレスを指定できる(HTTPアクセスなどに使用するアドレス) いずれの場合も、SSHでのアクセスは 127.0.0.1 で行う Vagrantでpingが通らない!ゆえにVagrantネットワークを学び直したよ | ITかあさん http://www.kaasan.info/archives/3665 Vagrant 初心者 Network 設定 - Qiita https://qiita.com/yusk24/items/e43b25ce4eeda69b4b57 LAN内の他端末からvagrantの仮想マシンにsshする - Qiita https://qiita.com/teratsyk/items/10bf89422ce98265c8a8 よく使うVagrantfileの設定のまとめ https://www.virment.com/vagrantfile-settings/ ■forwarded_port
config.vm.network "forwarded_port", guest: 80, host: 8080
ホストマシンから http://localhost:8080/ でアクセスできる PCのIPアドレスを指定すれば、同一LAN内からVagrantにアクセスできる 詳細はこのドキュメントの「環境構築」の「localhostでアクセスする&同一LAN内からアクセスする」を参照 ■private_network
config.vm.network "private_network", ip: "192.168.33.10"
ホストマシンから 192.168.33.10 にアクセスできる サーバ内でIPアドレスを確認すると、以下のようになっている $ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:cb:d7:28 brd ff:ff:ff:ff:ff:ff inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0 inet6 fe80::a00:27ff:fecb:d728/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:ae:64:f9 brd ff:ff:ff:ff:ff:ff inet 192.168.33.10/24 brd 192.168.33.255 scope global eth1 inet6 fe80::a00:27ff:feae:64f9/64 scope link valid_lft forever preferred_lft forever ■public_network(DHCP)
config.vm.network "public_network"
以下の場合、ホストマシンから 192.168.1.105 にアクセスできる(毎回IPアドレスの確認が必要) 同一LAN内の他マシンからもアクセスできる $ ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:cb:d7:28 brd ff:ff:ff:ff:ff:ff inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0 inet6 fe80::a00:27ff:fecb:d728/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:ae:64:f9 brd ff:ff:ff:ff:ff:ff inet 192.168.1.105/24 brd 192.168.1.255 scope global eth1 inet6 fe80::a00:27ff:feae:64f9/64 scope link valid_lft forever preferred_lft forever $ ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:CB:D7:28 inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fecb:d728/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:868 errors:0 dropped:0 overruns:0 frame:0 TX packets:579 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:90222 (88.1 KiB) TX bytes:82612 (80.6 KiB) eth1 Link encap:Ethernet HWaddr 08:00:27:AE:64:F9 inet addr:192.168.1.105 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:feae:64f9/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:510 errors:0 dropped:0 overruns:0 frame:0 TX packets:37 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:39865 (38.9 KiB) TX bytes:4801 (4.6 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) ■両方を指定
config.vm.network "private_network", ip: "192.168.33.10" config.vm.network "public_network"
以下の場合、ホストマシンから 192.168.33.10 にアクセスできる 192.168.1.106 でもアクセスでき、このアドレスなら他マシンからもアクセスできる(毎回IPアドレスの確認が必要) $ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:cb:d7:28 brd ff:ff:ff:ff:ff:ff inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0 inet6 fe80::a00:27ff:fecb:d728/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:ae:64:f9 brd ff:ff:ff:ff:ff:ff inet 192.168.33.10/24 brd 192.168.33.255 scope global eth1 inet6 fe80::a00:27ff:feae:64f9/64 scope link valid_lft forever preferred_lft forever 4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:71:6d:ff brd ff:ff:ff:ff:ff:ff inet 192.168.1.106/24 brd 192.168.1.255 scope global eth2 inet6 fe80::a00:27ff:fe71:6dff/64 scope link valid_lft forever preferred_lft forever ■public_network(IP固定)
config.vm.network "public_network", ip: "192.168.1.10", bridge: "en0: Wi-Fi (AirPort)"
IPアドレスの重複があると、Vagrant起動時にエラーになる
The following SSH command responded with a non-zero exit status. Vagrant assumes that this means the command failed! /sbin/ifdown 'eth1' mv -f '/tmp/vagrant-network-entry-eth1-1526521968-0' '/etc/sysconfig/network-scripts/ifcfg-eth1' /sbin/ifup 'eth1' Stdout from the command: Determining if ip address 192.168.1.10 is already in use for device eth1... Error, some other host (60:F8:1D:BA:9D:46) already uses address 192.168.1.10. Stderr from the command:
config.vm.network "public_network", ip: "192.168.33.101", bridge: "en0: Wi-Fi (AirPort)"
他のアドレスを指定すればエラーが解消された …が、ブラウザから接続できない 試したネットワークのセグメントが 192.168.1.0/24 のため、192.168.33.0/24 だと通信できなかったのだと思われる また改めて検証したい
■複数サーバの起動について
Capistrano で Rails アプリケーションの自動デプロイ - Qiita https://qiita.com/Salinger/items/4ee4f3c5ebd5227196c0 Vagrantで複数の仮想マシンを立ち上げる マルチマシン(Malti-Machine)設定 - Qiita https://qiita.com/zum/items/03da94291ffbc9af2244 以下のようなVagrantfileで、複数のサーバを一度に起動できる Vagrant.configure(2) do |config| config.vm.box = "centos72" config.vm.box_check_update = false config.vm.define "server1" do |node| node.vm.hostname = "server1.localhost" node.vm.synced_folder "C:/vagrant/multi/code1", "/var/code" node.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2210 #node.vm.network "private_network", ip: "192.168.33.10", virtualbox__intnet: "intra" node.vm.network "private_network", ip: "192.168.33.10" end config.vm.define "server2" do |node| node.vm.hostname = "server2.localhost" node.vm.synced_folder "C:/vagrant/multi/code2", "/var/code" node.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2211 #node.vm.network "private_network", ip: "192.168.33.11", virtualbox__intnet: "intra" node.vm.network "private_network", ip: "192.168.33.11" end config.vm.define "server3" do |node| node.vm.hostname = "server3.localhost" node.vm.synced_folder "C:/vagrant/multi/code3", "/var/code" node.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2212 #node.vm.network "private_network", ip: "192.168.33.12", virtualbox__intnet: "intra" node.vm.network "private_network", ip: "192.168.33.12" end end この場合、以下の情報でSSHアクセスできる ポート: 2210 鍵: C:/vagrant/multi/.vagrant/machines/server1/virtualbox/private_key ポート: 2211 鍵: C:/vagrant/multi/.vagrant/machines/server2/virtualbox/private_key ポート: 2212 鍵: C:/vagrant/multi/.vagrant/machines/server3/virtualbox/private_key Webサーバをインストールすれば、以下のURLでHTTPアクセスできる http://192.168.33.10/ http://192.168.33.11/ http://192.168.33.12/ 以下のようにすれば、サーバ間でSSHアクセスできる $ ssh -p 22 vagrant@192.168.33.11
■ボックスを作成&使用(要検証)
作成した環境を複製して使い回す ■ボックスを作成 >vagrant package --base refirio_net_default_1465954562620_24555 --output vagrant-centos-6.7-refirio_net-20160615.box ==> refirio_net_default_1465954562620_24555: Clearing any previously set forwarded ports... ==> refirio_net_default_1465954562620_24555: Exporting VM... ==> refirio_net_default_1465954562620_24555: Compressing package to: C:/vagrant/refirio_net/vagrant-centos-6.7-refirio_net-20160615.box --base ... 作成対象の仮想マシン名 --output ... 出力 box ファイル名 仮想マシン名は「Oracle VM VirtualBox マネージャ」で確認できる「refirio_net_default_1465954562620_24555」を指定した C:\vagrant\refirio_net\vagrant-centos-6.7-refirio_net-20160615.box が作成されたので、ボックスとして使えるか確認する 大丈夫なら、他のPCなどでも使えるか確認する ボックスとは別にスナップショットも試す cronも試す ■作成したボックスから作成 >vagrant box add centos-6.7-refirio_net C:\Users\Refirio\Documents\VirtualBox\vagrant-centos-6.7-refirio_net-20160615.box Vagrant.configure(2) do |config| config.vm.box = "vagrant-centos-6.7" config.vm.box_check_update = false # config.vm.network "forwarded_port", guest: 80, host: 80 config.vm.network "private_network", ip: "192.168.33.10" # config.vm.synced_folder "C:/localhost/home/refirio_net/public_html/test", "/var/www/html/test" end >vagrant init --minimal centos-6.7-refirio_net Vagrant.configure(2) do |config| config.vm.box = "centos-6.7-refirio_net" config.vm.box_check_update = false # config.vm.network "forwarded_port", guest: 80, host: 80 config.vm.network "private_network", ip: "192.168.33.11" # config.vm.synced_folder "C:/localhost/home/refirio_net/public_html/test", "/var/www/html/test" end >vagrant up default: Warning: Authentication failure. Retrying... のエラーが表示された >vagrant ssh Host: 127.0.0.1 Port: 2222 Username: vagrant Private key: C:/Users/Yamano/.vagrant.d/insecure_private_key 上記情報で接続すると「秘密鍵ファイルが存在しません。」と表示された が、 Host: 127.0.0.1 Port: 2222 Username: vagrant Password: vagrant なら接続できた。 .vagrant/machines/default/virtualbox/ の内容を確認すると、鍵ファイルがなく本来よりもファイル数が少ない エラーの最中にここに鍵ファイルを置くと通った? でも以前の .vagrant/ を置いて vagrant up すると、内容がクリアされた上で新規に作られた よって一度 vagrant up で立ち上げてから .vagrant/ を入れ替えればよかった? と思ったけど、そうでも無いかも。要検証 未検証だが、以下も参考にできそう Vagrantでboxファイル作成 - Qiita https://qiita.com/Esfahan/items/46da3ce1893a67789b58 vagrant upコマンド実行時にAuthentication failure.エラーが発生する - Qiita https://qiita.com/shyse/items/9ec50b868b90f847c75f Vagrant 1.7 〜 で vagrant package する場合の注意 - Qiita https://qiita.com/komazarari/items/eebdfd06300275c02914 VagrantでSSH鍵の設定 - [Authentication failure. Retrying…]の対処策 - Qiita https://qiita.com/Esfahan/items/e5f707dc6d116c2cc751 package化したboxを使うときによく出るエラー -- blog.10rane.com http://blog.10rane.com/2015/08/28/errors-out-when-using-to-package-the-box/
■クローン(要検証)
コマンドでシャットダウンし、Oracle VM VirtualBox マネージャで、 「仮想マシンを右クリック → クローン → 名前を付けて次へ → すべてをクローン → クローン」 とするとクローン(環境の複製)ができる
■アクセスするドメインを自動設定(要検証)
vagrant使うときのipアドレスを自分の好きなようにカスタマイズ! http://blog.fukamin.me/2015/08/06/vagrant%E4%BD%BF%E3%81%86%E3%81%A8%E3%81%8D%E3%81%AEip%E3%82%A2%E3... config.vm.hostname = "local.fukamin.me" のように書けばVagrantがhostsファイルを編集してくれるらしい この場合、Vagrantが立ち上がっている間だけhostsファイルに記述が追加されるらしい …が、自分の環境ではなぜかアクセスできず。要調査 現状のこのファイルの手順では、SSHで接続できてもHTTPで接続できないことがあった 以前ダウンロードした centos64-x86_64 から新規に環境を作って問題なかったので、OSの設定などに問題は無いと思われる Windows10環境で新規にVagrantをインストールするときは、追加で何らかの設定が必要だとか? 同一ネットワーク内で同一IPアドレスを使えないとか? 同一ネットワーク内の複数のPCで 192.168.33.10 で起動させても大丈夫だった。重複は問題ないみたい? 次回構築時、以下の手順などを確認する Vagrant + Virtualbox + CentOS 6.5 でhttpdサーバを構築できない https://teratail.com/questions/26240 VagrantでCentOS7を立てたが、httpアクセスが繋がらない時にやったこと http://qiita.com/ta__ho/items/1bdd8403a15be7411e20 Windowsにインストールされているセキュリティソフトの影響とか?それらをすべてOFFにしてみる 80番ポート以外に変更すればアクセスできたかも?8080ポートでのアクセスなども試してみる 「vagrant http ポート」でググると色々出てくる OSX における Vagrant 80番ポートフォワーディング http://qiita.com/hidekuro/items/a94025956a6fa5d5494f Vagrant + VirtualBoxで仮想環境側のポートをあける http://qiita.com/kkam0907/items/4a345cd5e834969d3859 Vagrantのport forwardは普通に80 → 80に転送すればよいのでは http://dqn.sakusakutto.jp/2014/02/vagrant_port_forward_80_80.html
■トラブル
■起動しようとすると「vagrant No usable default provider could be found for your system.」と表示される VirtualBoxやVMWareなどの仮想環境ソフトウェアを先にインストールする ■起動しようとすると「The virtual machine 'XXXXX' has terminated unexpectedly」のようなエラーになる C:\vagrant\centos6>vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Clearing any previously set forwarded ports... ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat default: Adapter 2: hostonly ==> default: Forwarding ports... default: 22 (guest) => 2222 (host) (adapter 1) ==> default: Booting VM... There was an error while executing `VBoxManage`, a CLI used by Vagrant for controlling VirtualBox. The command and stderr is shown below. Command: ["startvm", "be217c1e-0540-4fcb-8fb9-32b12b5cd567", "--type", "headless"] Stderr: VBoxManage.exe: error: The virtual machine 'centos6_default_1469071051278_3326' has terminated unexpectedly during startup with exit code -1073741819 (0xc0000005) VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component MachineWrap, interface IMachine VirtualBoxが開けなくなったら http://yuttariblog.blogspot.jp/2014/07/virtualbox.html Windowsアップデートの影響で動かなくなることがあるらしいが、最新版にすれば動作するらしい Windowsコントロールパネルの「プログラムのアンインストール」から 「Oracle VM VirtualBox 5.0.20」 「vagrant」 をアンインストールし、その時点での最新版の 「VirtualBox-5.1.22-115126-Win.exe」 「vagrant_1.9.5.msi」 をインストールすれば起動するようになった 以前作成した設定や構築したサーバは、そのまま残っていた 2017年12月4日、大きなWindowsアップデートを適用すると起動しなくなった。その時点での 「VirtualBox-5.2.2-119230-Win.exe」 「vagrant_2.0.1_x86_64.msi」 をインストールしなおせば起動するようになった 環境によっては上記の組み合わせでも起動しなかったが 「VirtualBox-5.1.30-118389-Win.exe」 「vagrant_2.0.1_x86_64.msi」 をインストールしなおせば起動するようになった 「とりあえずは最新(5.2)のVirtualBoxと、それにあったVagrantで試す。駄目なら5.1内で最新のVirtualBoxと、それにあったVagrantで試す」 なら、割となんとかなる。ということかもしれない ■起動しようとすると「default: SSH auth method: private key」で止まり、その後「Timed out while waiting for the machine to boot」となる 「VirtualBox-5.2.0-118431-Win.exe」 「vagrant_2.0.1_x86_64.msi」 で発生した 別環境で起動を確認できた 「VirtualBox-5.1.22-115126-Win.exe」 「vagrant_1.9.5.msi」 にバージョンダウンしてみると起動できた VagrantとVirtualBox(もしくはWindowsとVirtualBox?)のバージョンで相性があるようで、マイナーバージョンにすると起動することがある Windows - Vagrantup時に、SSH auth method: private keyでタイムアウトになる(99629)|teratail https://teratail.com/questions/99629 以下は直接の解決では無かったが、参考までに "vagrant up"したら"SSH auth method: private key"で止まった話 - Qiita https://qiita.com/sasurai_usagi3/items/2ba572013b16f2703f6a Vagrant UP時にSSH auth method: private key・・・で詰まった話 - Qiita https://qiita.com/is_ryo/items/d67d29fc56cf3cd07199 問題なく使えていたが、大きなWindowsアップデートを行った後に 「The virtual machine 'XXXXX' has terminated unexpectedly」 のようなエラーになって起動しなくなった。上に記載したように、VirtualBoxとVagrantを最新版にすると起動するようになった 作成済みのBoxを破棄して、再度一から構築すると起動したこともある ■起動しようとすると「[default] GuestAdditions versions on your host (5.1.22) and guest (4.3.6) do not match.」のようなエラーになる /vagrantのマウントに失敗 - その2 | technote http://tech.withsin.net/2017/04/17/vagrant-mount-failed/ ■フォルダ同期の設定を行ったらエラーになる 仮想マシンを起動しようとすると以下のエラーが表示された ==> default: Mounting shared folders... default: /vagrant => C:/vagrant/refirio_net Failed to mount folders in Linux guest. This is usually because the "vboxsf" file system is not available. Please verify that the guest additions are properly installed in the guest and can work properly. The command attempted was: mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant The error output from the last command was: /sbin/mount.vboxsf: mounting failed with the error: No such device サーバ自体は起動しているのでSSHで接続し、vboxをリビルドする vagrantでmountエラーの解決方法 http://qiita.com/osamu1203/items/10e19c74c912d303ca0b $ sudo /etc/init.d/vboxadd setup Removing existing VirtualBox non-DKMS kernel modules [ OK ] Building the VirtualBox Guest Additions kernel modules Building the main Guest Additions module [ OK ] Building the shared folder support module [ OK ] Building the OpenGL support module [FAILED] (Look at /var/log/vboxadd-install.log to find out what went wrong) Doing non-kernel setup of the Guest Additions [ OK ] その後、仮想マシンを停止&起動すればフォルダ同期もできた >vagrant halt ==> default: Attempting graceful shutdown of VM... >vagrant up ==> default: Mounting shared folders... default: /vagrant => C:/vagrant/refirio_net default: /var/www/html/test => C:/localhost/home/refirio_net/public_html/test ==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision` ==> default: flag to force provisioning. Provisioners marked to run always will still run. ■外部CSSを修正しても反映されない インラインで調整した場合には反映されないが、 丸ごと書き換えるとファイルサイズの差分だけ反映される?ような現象が発生する sendfileでキャッシュされている可能性がある # vi /etc/httpd/conf/httpd.conf で EnableSendfile off と設定されていることを確認する。 バーチャルホストやユーザディレクトリを使用している場合、 対象ディレクトリに対して以下の設定を追加する <Directory "/path/to/target"> EnableMMAP Off EnableSendfile Off </Directory> その後Webサーバを再起動する # service httpd restart Nginxの場合も、以下の設定で同様に調整できる sendfile off; VagrantでCSSの更新が反映されない場合の対処法 http://qiita.com/shoyan/items/12389d5beaa8695b1a53
■Vagrantコマンドメモ
vagrant --version ... バージョン確認 vagrant -v ... 同上 vagrant init xxx ... 仮想マシン初期化 vagrant up ... 仮想マシン起動 vagrant halt ... 仮想マシン停止 vagrant reload ... 仮想マシン再起動 vagrant destroy ... 仮想マシン破棄 vagrant share ... 仮想マシン状態確認 vagrant box add xxx https://xxx.yyy/zzz ... URLからボックスを追加 vagrant box add xxx C:\xxx\yyy\xxx.box ... ローカルのボックスを追加 vagrant box list ... ボックス一覧を表示 vagrant box remove xxx ... ボックスを削除