実践記録5
ここまでは一つの仮想マシンだけを作成していましたが、ここからはマシンの数を複数台にしてみようと思います。
今後Ansibleを使ってみたいと思っているので、
Ansible用のホストサーバーと、Ansible構築対象用のWebサーバーを作成し、ssh接続ができるよう公開鍵認証設定を行います。
WebサーバとDBサーバくらい分けたら?
という気もしますが、サーバ台数増やすと当然vagrant upにかかる時間も増えてしまいます。
ぱっと試してぱっと消せる状態を保ちたいので2台に留めておきます。
前提
VirtualBoxとVagrantがインストールされていること。
インストール方法は以下の記事を参考
実践記録1VirtualBoxをインストールしてローカル開発環境を構築してみたいと思います。AWSなどのクラウドサービスを使った方が最近は簡単に環境を準備できますが、まずは自分のPCに仮想環境を構築してみようと思います。[…]
実践記録2実践記録1でVirtualBoxを使ってローカル開発環境を構築してみましたが、今回はVagrantという仮想環境構築ツールを使ってVirtualBox上に仮想マシンを構築してみようと思います。前提使用する環境にVi[…]
複数サーバの作成
実践記録4で使用したVagrantfileを使用していきたいと思います。
現在の定義状況は以下の通りです。
実践記録4実践記録3でVagrantを用いて作成した環境ですが、重大な欠陥を見つけてしまいました。それは、「Could not resolve host」エラーが発生してDNSの名前解決ができないこと。これを解消しなければ、[…]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Vagrant.configure("2") do |config| config.vm.box = "centos/7" config.vm.hostname = "demo" config.vm.network "private_network", ip: "192.168.33.10" config.vm.synced_folder "./", "/vagrant_data",type:"virtualbox" config.vm.provision "shell", inline: <<-'SHELL' sed -i -e '/^\[main\]$/a dns=none' /etc/NetworkManager/NetworkManager.conf systemctl restart NetworkManager wait echo -e 'nameserver 8.8.8.8\nnameserver 8.8.4.4' >> /etc/resolv.conf yum -y install epel-release yum -y install nginx yum -y install ansible echo "hello world!!" > /usr/share/nginx/html/index.html systemctl start nginx SHELL end |
サーバごとに以下の定義でくくってあげればOKのようです。
~~~構築定義~~~
end
「変数名.~~~」の形式で記載する必要があります。
※私はこれをミスって一度謎のサーバ2台出来上がりました。
それを元に以下の様に修正してみました。
Ansible導入用サーバ:demohost
Ansible構築対象サーバ:demoweb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | Vagrant.configure("2") do |config| # boxの指定 config.vm.box = "centos/7" # hostサーバの作成 config.vm.define :demohost do |server| server.vm.hostname = "demohost" server.vm.network "private_network", ip: "192.168.33.10" server.vm.synced_folder "./host", "/vagrant_data",type:"virtualbox" server.vm.provision "shell", inline: <<-'SHELL' sed -i -e '/^\[main\]$/a dns=none' /etc/NetworkManager/NetworkManager.conf systemctl restart NetworkManager wait echo -e 'nameserver 8.8.8.8\nnameserver 8.8.4.4' >> /etc/resolv.conf yum -y install epel-release yum -y install ansible SHELL end # webサーバの作成 config.vm.define :demoweb do |server| server.vm.hostname = "demoweb" server.vm.network "private_network", ip: "192.168.33.11" server.vm.synced_folder "./web", "/vagrant_data",type:"virtualbox" server.vm.provision "shell", inline: <<-'SHELL' sed -i -e '/^\[main\]$/a dns=none' /etc/NetworkManager/NetworkManager.conf systemctl restart NetworkManager wait echo -e 'nameserver 8.8.8.8\nnameserver 8.8.4.4' >> /etc/resolv.conf yum -y install epel-release yum -y install nginx echo "hello world!!" > /usr/share/nginx/html/index.html systemctl start nginx SHELL end end |
vagrant upコマンドで早速動かしてみたいと思います。
特定のサーバに対してvagrant sshやvagrant upなどを実行することができます。
それぞれのサーバにインストールしたansibleやnginxも問題ないようです。
仮想マシン間ssh接続用の公開鍵認証設定
現在は何も設定を行っていないのでdemohostからdemowebへssh接続を行うと以下の様にエラーとなります。
仮想マシン間でのアクセスには使用できません。
※試験用なのでpassphraseは未入力でEnter押しました。
id_rsa.pub→公開鍵
centos/7を使用している場合、デフォルトでパスワード認証の設定がオフになっているようです。
一度ホストマシン側に戻り、ssh接続先の仮想マシンにvagrant sshで接続して設定を変更する必要があるようです。
※sshd_configですよ!ssh_configではありません。
sshd_config:ssh接続される時の設定
1 2 | - PasswordAuthentication no + PasswordAuthentication yes |
設定変更後に下記コマンドでsshdを再起動することで設定を反映させます。
systemctl restart sshd
その後demohostサーバに戻り、再度以下コマンドを実行します。
今度ははじかれずに上記の様にコマンドを無事に実行することができました!
パスワードを求められますが、Vagrantのユーザーの初期パスワードは「vagrant」なので変更していなければそれでアクセスできるはずです。
その後以下の様に無事にsshで接続できることを確認します。
これで複数環境の準備は完了です!!!
※10.0.2.2はVirtualBoxにおいてホストOSに自動的に割り当てられるIPです。
先ほど有効にしたパスワード認証の許可設定はセキュリティ上よろしくないので、
公開鍵の共有が終わったらオフに戻しておきましょう。
うまくいったのはいいですが
毎回これをやるのは辛いので、どうにかしてVagrant up実行時にこの状態までもってきたいですね。
今回はここまでにして次回そこを反映していきたいと思います。
続きは以下の記事になります!
実践記録6実践記録5でAnsibleが使えるように複数サーバ間のSSH接続用の公開鍵認証設定を行いました。しかし手動での設定は無くしたいので、Vagrantfileを修正して公開鍵認証の設定を自動でできるようにしたいと思いま[…]
コメントを書く