Help us understand the problem. What is going on with this article?

Vagrant+Virtualboxを使いWindows10上にCentOS7.3+php7+MySQL5.7の環境を構築する

More than 1 year has passed since last update.

はじめに

VirtualBOXでも同じ環境を複製する場合は、Vagrant+chefが便利ということなので、CentOSサーバの環境を構築してみた。以下の確認環境は Windows10 Home 64bit。

Vagrant / VirtualBoxのインストール

VirtualBoxのインストール

VirturlBOXのダウンロードページ https://www.virtualbox.org/wiki/Downloads から、WIndows 版をダウンロードしインストールを実行。記入時点では Vitualbox-5.1.22。

Vagrant 本体のインストール

Vagrant は https://www.vagrantup.com/downloads.html から vagrant-1.9.5 の Windows版をダウンロードしてイントール実行。実行後、コマンドプロンプトで vagrant -v でバージョンを確認。

Vagrant プラグインのインストール

コマンドプロンプトからomnibusプラグインをインストールします。これは、起動時にChef Client/Chef Soloを確認、無ければ自動でインストールを行うプラグインです。他にも sahara 等便利なプラグインもあります。

> vagrant plugin install vagrant-omnibus

念のためバージョンとインストールされたプラグインを確認

>vagrant -v
Vagrant 1.9.5

>vagrant plugin list
vagrant-omnibus (1.5.0)
vagrant-share (1.1.8, system)

仮想マシンの準備

利用するBOXのダウンロード

centOS-7.2のBOXは、http://www.vagrantbox.es/ から選択。コマンドプロンプトを立ち上げて以下を実行。

> vagrant box add CentOS72 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.2/vagrant-centos-7.2.box

最新の CentOS-7.3にするため、Vagrant Cloudから、bento/centOS-7.3
(https://app.vagrantup.com/bento/boxes/centos-7.3)
に変更。以下のコマンドでboxに追加。

vagrant box add bento/centos-7.3  --provider virtualbox

ダウンロードにしばらく時間がかかります。

Vagrant の設定

任意のフォルダを作り以下を実行

> mkdir mycentos
> cd mycentos
> vagrant init bento/centos-7.3

実行したディレクトリに設定ファイル Vagrantfile ができる。

Vagrantfileの変更

作成された環境設定ファイル Vagrantfile ファイルを編集します。
以下の部分のコメントを外す

  • IPアドレスの設定
  config.vm.network "private_network", ip: "192.168.33.10"
  • プラグインomnibusの利用
   # vagrant-omnibus
   # config.omnibus.chef_version = :latest
     config.omnibus.chef_version = 3.13

プロプロビジョニング毎に最新をインストールしにいくのでバージョンを指定したが、latestにしておく方が安心かもしれない。

仮想マシンの起動

ここまでの設定で仮想マシンが起動できるか確かめます。

vagrant up

かなり時間がかかります

ログイン

適当なSSHクライアントから、上で設定したIPアドレスにログインできることを確かめます。
ID/PASS : vagrant/vagrant でログインします。

仮想マシンの停止

vagrant halt

VirtualBoxマネージャで見ると「電源オフ」と表示されます。

仮想マシンの設定

外部リポジトリの追加

最新のphpやMySQLをインストールするために、epel及びremiリポジトリを追加し

site-cookbooks/yum_repo/recipes/default.rb

# epel-repository
yum_package "epel-release" do
    action :install
end

# remi-repository
execute "yum-repo" do
  user 'root'
  command 'yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm'
  creates "/etc/yum.repos.d/remi.repo"
end

PHP7 + Composer のインストール

site-cookbooks/php/recipes/default.rb

# php7
package 'php' do
  flush_cache [:before]
  action :install
  options "--enablerepo=remi --enablerepo=remi-php71"
end

%w(php-openssl php-common php-mbstring php-xml).each do |pkg|
  package pkg do
    action :install
    options "--enablerepo=remi --enablerepo=remi-php71"
  end
end

# composer
bash 'install_composer' do
  not_if { File.exists?("/usr/local/bin/composer") }
  user 'root'
  cwd '/tmp'
  code <<-EOH
    curl -sS https://getcomposer.org/installer | php -- --install-dir=/tmp
    mv /tmp/composer.phar /usr/local/bin/composer
  EOH
end

Apacheのインストール&起動

Apacheの設定ファイルを予めテンプレートに用意しておき、CentOSにコピーします。

site-cookbooks/http/recipes/default.rb

yum_package "httpd" do
    action :install
end

template "test.conf" do
  path   "/etc/httpd/conf.d/test.conf"
  source "test.conf.erb"
  owner "root"
  group "root"
  mode   0644
end

service "httpd" do
    action :start
end

site-cookbooks/http/templates/default/test.conf.erb の例。必要な設定をここに含めておけばOK。

alias /test/ /home/vagrant/public/

<Directory /home/vagrant/public/>
  AllowOverride all
  Require all granted
</Directory>

MySQLのインストール&起動

site-cookbooks/mysql/recipes/default.rb

remote_file "#{Chef::Config[:file_cache_path]}/mysql-community-release-el7-11.noarch.rpm" do
  source 'https://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpm'
  action :create
end
rpm_package 'mysql57-community-release' do
  source "#{Chef::Config[:file_cache_path]}/mysql-community-release-el7-11.noarch.rpm"
  action :install
end
package "mysql-community-server" do
  action :install
end
service "mysqld" do
  supports :status => true, :restart => true, :reload => true
  action [ :enable, :start ]
end

別途データベースの初期設定が必要、MySQL57の初期rootパスワード取得を調べ中

必要なパッケージのyumインストール

nano
emacs は趣味です。

site-cookbooks/yuminstall/recipes/default.rb

%w(git nano emacs).each do |pkg|
  package pkg do
    action :install
    options "--enablerepo=remi --enablerepo=remi-php71"
  end
end

(番外)yum update 実行

site-cookbooks/yumupdate/recipes/default.rb

execute "yum-update" do
  user "root"
  command "yum -y update"
  action :run
end

Vagrantfileに実行設定を追加

./Vagrantfile に以下の記述を追加。

    config.vm.provision "chef_solo" do |chef|

      chef.cookbooks_path = "./site-cookbooks"
      chef.add_recipe "yum_repo"
      chef.add_recipe "yumupdate"
      chef.add_recipe "http"
      chef.add_recipe "php"
      chef.add_recipe "mysql"
    end

仮想サーバに反映

仮想サーバを再起動し、設定を反映します。

>vagrant reload --provision

処理が完了したら、再度sshログインして所定の設定ができていることを確認する
エラーがでたらどこかでタイプミスをしている可能性が高いです。

設定情報の共有

これから以下のを事をして開発環境をそろえる

  • 各種設定やテスト用データベースの自動登録レシピを追加。
  • git で共有し、git clone / vagrant up で開発環境完成の状態にする。

共有フォルダのマウントエラー対応

yum updete 後に、vagrant コマンドで下のようなエラーが発生しました。

Vagrant was unable to mount VirtualBox shared folders. This is usually
  <snip>
Vagrant box. For context, the command attempted was:

mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant

The error output from the command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device

yum updateにより、カーネルが更新されしまい、ディレクトリ共有を行うVirtualboxGuestAdditionのバージョンが, ホストとゲストでずれることによって発生するようです。これを解消するためにプラグインを導入します。

vagrant plugin install vagrant-vbguest

参考

あちこちを参考にさせてもらいましたが、古いものはそのままではダメで、適切に読み変える必要があります。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした