Vagrantをやってみた
VagrantでCentOS7にApache+PHP+MySQL+phpMyAdminの自動構築をやってみたのでその時のメモ(完全自分用)
以上2点はインストールしておく。
フォルダ構成
最初にフォルダ構成を書いておこうと思います。
project ├─ vagrant ├─ bootstrap.sh ├─ Vagrantfile ├─ conf ├─ phpMyAdmin.conf
Vagrantの初期化
vagrant initで初期化します。
その際にBOXが必要で、下記サイトにいろいろなBOXがあるので自分が使いたいものを探します。
https://atlas.hashicorp.com/boxes/search
上記フォルダ構成のvagrantフォルダ内で下記コマンドを実行します。
$ vagrant init bento/centos-7.2
ちなみにbentoはchef社の公式BOXリポジトリらしいです。
https://atlas.hashicorp.com/bento/
また、他のサイトからBOXをDLして使えるらしいです。
その場合はbox addで使いたいBOXを追加してください。
$ vagrant box add {title} {url} $ vagrant init {title}
Vagrantfileが作成されたと思います。
Vagrantfileの設定
このままでは外部からアクセスできないのでネットワークの設定をします。
Vagrantfileの下記のコメントを外します。
# config.vm.network "private_network", ip: "192.168.33.10" config.vm.network "private_network", ip: "192.168.33.10"
次に同期フォルダの設定をしたいと思います。
ホストOSとゲストOS間でファイル共有をする設定を追加します。
config.vm.synced_folder "../", "/vagrant", mount_options: ['dmode=777', 'fmode=777']
ホストOSのVagrantfileがあるフォルダの1つ上のフォルダとゲストOSの/vagrantディレクトリを同期します。
同期フォルダを作ることでホストOSでファイルを変更した時にゲストOSでも反映されます。
なのでわざわざsambaを使ってマウントするということをしなくても、ホストOSで使っているIDEとかが使えるようになりますね。
mount_optionで設定しているのはパーミッションです。
次にプロビジョニングの設定をします。
ここに必要なソフトなどを自動でインストールするように書くことができます。
その設定をシェルで書くことができ、インラインで書く場合と違うファイルに書いてそれを実行する場合があります。
config.vm.provision :shell, :inline => "<実行するコマンド>" config.vm.provision :shell, :path => "<実行するファイル>"
今回はbootstrap.shに記述していこうと思います。
atlasのBOXでinitした場合はVagantfileに以下が書いてあればいいと思います。
# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure(2) do |config| config.vm.box = "bento/centos-7.2" config.vm.network "private_network", ip: "192.168.33.10" config.vm.synced_folder "../", "/vagrant", mount_options: ['dmode=777', 'fmode=777'] config.vm.provision :shell, :path => "bootstrap.sh" end
プロビジョニングの設定ファイル
今回はApache+PHP+MySQL+phpMyAdminを自動構築するスクリプトを書いていこうと思います。
bootstrap.shに以下を記述します。
#!/usr/bin/env bash echo '############################################################' echo '# PROVISION START' echo '############################################################' #Apache sudo yum -y install httpd sudo systemctl start httpd.service sudo systemctl enable httpd.service #firewalld sudo systemctl stop firewalld.service sudo systemctl disable firewalld.service #MariaDB sudo yum -y remove mariadb* sudo rm -rf /var/lib/mysql/ #wget sudo yum -y install wget #vim sudo yum -y install vim #MySQL sudo wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm sudo rpm -Uvh mysql-community-release-el7-5.noarch.rpm sudo sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/mysql-community.repo sudo yum -y --enablerepo=mysql56-community install mysql-community-server sudo systemctl start mysqld.service sudo systemctl enable mysqld.service sudo mysql -u root -e "SET PASSWORD FOR root@localhost = PASSWORD('root');" #PHP sudo yum -y install php php-mysql php-mbstring sudo systemctl restart httpd.service #phpMyAdmin sudo yum install -y epel-release sudo yum install --enablerepo=epel -y phpMyAdmin sudo cp -f /etc/httpd/conf.d/phpMyAdmin.conf /etc/httpd/conf.d/phpMyAdmin.conf.bak sudo cp -f /vagrant/vagrant/conf/phpMyAdmin.conf /etc/httpd/conf.d/phpMyAdmin.conf sudo systemctl restart httpd.service echo '############################################################' echo '# PROVISION FINISH' echo '############################################################'
phpMyAdminの初期設定では外部からのアクセスが許可されてないので設定を変えなければいけません。
なのでconfフォルダに設定を変えたphpMyAdmin.confをあらかじめ用意しておき、インストール後に入れ替えるようにしています。(43行目付近)
この方法を使って他にもApacheの設定ファイルなどを入れ替えることができます。
Vagrantの起動
以下のコマンドで起動できます。
$ vagrant up
初めて起動するときはイメージのダウンロードやプロビジョニングに設定したソフトのインストールなどで時間がかかります。
2回目以降はダウンロードやインストールをしないので早く起動することができます。
Vagrantのコマンド
$ vagrant up # 起動 $ vagrant halt # 停止 $ vagrant reload # 再起動 $ vagrant destroy # 破棄 $ vagrant provision # プロビジョニング実行 $ vagrant ssh # ゲストOSにSSHログイン
おわりに
なんとなくGitHubにあげてます。
GitHub - kkasai/va_sample
思ったよりも簡単に構築することができた。
chefとかできたらもっと柔軟に環境構築できるのかなーと思ったり。
今度はdocker使っていろんなコンテナー立てまくってセキュリティの勉強とかしたいなーと思っています。