25
51

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-06-27

はじめに

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

参考

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

25
51
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
51

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?