サーバ周り(CentOS)を色々と弄ってみたかったのでローカルに仮想環境を構築することにした。
AWSで構築しようかとも思ったが敷居が高そうなので、先ずはローカルで頑張ってみることにする。
理由:負荷分散テストとか、セキュリティ関連の脆弱性テストを自分なりに試してみたいから。
###2016.9.10(追記)
ゴチャゴチャと色々とやってみたけど...素直にDocker for Macを入れてdocker-compose.yml記述するだけの方が楽だな・・・。
##Linux系サーバ関連の基礎知識
かつてUnix系OSと言えばSunのSolarisだったが、MicrosoftやLinux陣営に負けOracleに買収されるも今は殆ど息をしていない。
現在はRedHat社がUnixサーバ系の業界標準であり、同社はFedoraで最新カーネルやアプリを検証し、RedHatで商用サポート提供し、CentOSで裾野を広げる戦略をとっている。CentOSは商用RedHatの互換クローンとして有志ボランティアによる無償提供版だったが、2014年1月以降はRedHat社の支援を受け事実上の無償公認版になっているので、業務用サーバの勉強にはもってこいなOSだ。
##開発環境
OS X EI Capitan 10.11.6
Xcode Version 7.3.1 (7D1014)
Homebrew導入済み(0.9.9)
Command Line Tools導入済み
##brewでインストールしたもの
- vituialbox(5.1.2r108956)
- vagrant(1.8.5) バグあり要注意
##事前準備
- Xcodeインストール
- Command Line Toolsインストール
- Homebrewインストール
- なぜVituialboxだけでなくvagrantも入れるのかについては、先人がまとめてくれているので感謝しつつ読む。
##VirtualboxVagrantのインストール
参考サイト
$brew update
$brew install Caskroom/cask/virtualbox Caskroom/cask/vagrant
$vagrant -v
$virtualbox
##Vagrant 1.8.5のバグ対応
brewのvagrantは、2016/9/2時点ではバグverなので以下を直修正。
これをせずにvagrant upをするとSSH接続エラーでうまく起動せず。
その場合はvagrant destroyでVMイメージを削除するか、.vagrantフォルダと、~/VirtualBox VMsフォルダ内に作成されたイメージを一旦削除し、vagrant haltで停止させた上でバグ対応。
$mdfind public_key.rb
#sudo vim /opt/vagrant/embedded/gems/gems/vagrant-1.8.5/plugins/guests/linux/cap/public_key.rb
56行めに追記。 chmod 0600 ~/.ssh/authorized_keys
##Vagrant設定
Vagrant images もしくはChef社で、CentOS7のイメージURLを探してコピー。
$mkdir ~/保存先
$cd ~/保存先
$vagrant box add CentOS7 "コピーしたURL"
$vagrant init
$vagrant up
$vagrant ssh
※vagrant sshを実行するとvagrantユーザでログインされる。
※vagrantユーザとrootのパスワードは"vagrant"
##インストール後のCentOS設定
$su
#yum -y update
#yum -y groupinstall "Base" "Development tools"
#yum -y install yum-cron
#vi /etc/yum/yum-cron.conf
apply_updates = no
↓
apply_updates = yes
#systemctl start yum-cron
#systemctl enable yum-cron
#systemctl is-enabled yum-cron
##ホストOSとのファイル共有時のエラー対応
Macと仮想ゲストでフォルダ共有した際、SSHログインは可能だがフォルダ共有されず。
vagrant sshでログイン後にmountを試みるも怒られる。
原因はVirtualBoxのゲスト用プラグインのver違い(ホスト5.1.2 ゲスト4.3.14)であるっぽいのでGuest Additionsを入れ直す。
$vagrant plugin install vagrant-vbguest
VBゲスト管理用プラグインを0.10.0から0.13.0にアップグレード
$vagrant vbguest
Guest Additionsが5.1.2に入れ替わる。
途中ゲストOS側にX.org関連が無いぞと注意されるも使わんから無視。
$vagrant reload
vagrantを再起動
$vagrant ssh
ログイン後に共有フォルダがmountされていることを確認。
(Vagrantfileで記述したconfig.vm.synced_folderフォルダ)
###Vagrantfileでの複数vmイメージを管理する場合
config.vm.define :web do | web |
web.vm.hostname = "web"
web.vm.network :private_network, ip: "192.168.33.10", virtualbox__intnet: "intnet"
end
config.vm.define :mysql do | db |
db.vm.hostname = "mysql"
db.vm.network :private_network, ip: "192.168.33.20", virtualbox__intnet: "intnet"
end
###Vagrant上のDockerで複数vmイメージを管理する場合
(参考サイト)複数Dockerコンテナ自動起動を参考にしつつ、docker-compose.ymlを記述。
config.vm.provision "docker"
config.vm.provision "shell", inline: <<-SHELL
curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s-
uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
SHELL
config.vm.provision "shell",
inline: "docker-compose -d -f /tmp/app/docker-compose.yml up",
run: "always"
###Dockerセキュリティ
Dockerでホストを乗っ取られた?
Dockerでハック