vagrantBox作成(3): LAMP環境構築

vagrantBoxの自作から公開までの第3回.
今回はLAMP環境構築を行う.

前回までの手順でcentosのみが入ったvagrant boxを生成した.
今回はこのboxにLAMP環境を構築してゆく.

vagrantBoxの自作から公開までのまとめ記事はこちら.

vagrantBoxの自作から公開まで まとめ
vagrantBoxを自作したので, 公開までの手順をまとめる.

動作環境

  • vagrant 1.8.7
  • virtualBox 5.0.20
  • centos 6.8

前提条件

centos 6.8 のみがインストールされたvagrant boxを使用する.
vagrant box作成は前回の記事を参照.
前回の記事はこちら.

今回はvagrantにssh接続をして行う作業がメインなのでホストマシンはwin, mac どちらでも構わない.

macなら vagrant ssh
winならRLoginなどでvagrantと接続する.

winユーザでクライアントソフトを使ったことがない人にはRLoginがオススメ.
RLoginを使いたい人は以前書いたこちらの記事が参考になるかも.

[Windows]Rloginからエックスサーバーにssh接続する方法
今回はRloginからエックスサーバへssh接続する方法を紹介します。 概要は次の通り。 私がRloginでエックス...

作業ディレクトリ作成

vagrantBoxを自作する作業ディレクトリをホストマシン上に作成する.
ディレクトリ名は何でもok.
今回は myBox とする.

$ mkdir ~/Desktop/vagrantBoxDiy/myBox

Vagrantfile生成

使用するboxなどを指定するために次のコマンドでVagrantfileを生成する.

Vagrantfile編集

結論からいうと Vagrantfile に config.ssh.insert_key = false を追記すれば良い.

何故この記述が必要なのか.
この点を少し詳しく紹介する.

vagrant Insecure Keypair 対策

概要は次の通り.

  • 誰が困るのか?
    • 提供されたboxを使うユーザ
  • いつ困るのか?
    • vagrant up 時.
  • どう困るのか?
    • vagrant up に失敗する.
    • 延々と default: Warning: Authentication failure. Retrying... が出力される
  • なぜ vagrant up に失敗するのか?
  • どうやって対策するのか?

ここでは最後の2点について解説.

なぜ vagrant up に失敗するのか?

config.ssh.insert_key
  • If true, Vagrant will automatically insert a keypair to use for SSH,
    replacing Vagrant’s default insecure key inside the machine if detected.
    By default, this is true.

引用: SSH SETTINGS | Vagrant by HashiCorp

vagrant内部に古いssh keyペアを持っていた場合, 自動的にそれとは別の新しいkeyペアを生成・置換するらしい.
第三者が提供されたboxを使う場合, vagrant up時に鍵がペアではなくなってしまう.
というのが対策の理由.

古いバージョンのvagrantを使っている場合, ssh周りでバグがあるらしい.
bugfixなどのchangelogは次のページにまとまっている.
mitchellh/vagrant | github

どうやって対策するのか?

自動的にkeypairを生成しないように, Vagrantfile に config.ssh.insert_key = false を追記する.

我々のようなbase box creator(vagrant boxをイチから作ろうとする人)はvagrantのssh周りについて考慮しないといけない.

Insecure Keypair

These keys are the “insecure” public/private keypair we offer to base box creators for use in their base boxes
so that vagrant installations can automatically SSH into the boxes.

If you’re working with a team or company or with a custom box and you want more secure SSH,
you should create your own keypair and configure the private key in the Vagrantfile with config.ssh.private_key_path

引用: https://github.com/mitchellh/vagrant/tree/master/keys

vagrant へログインするときのkeyペアはinsecure.
自前で用意したssh秘密鍵, 公開鍵は適切な場所に設置しよう.
秘密鍵は Vagrantfile に config.ssh.private_key_path としてパスを明記しよう.

今回は一人で使う予定なので, Vagrantfile に ssh keypairの自動生成のみをoffにする.

Vagrantfile
config.ssh.insert_key = false

最終的にVagrantfileはこんな感じになる

余分なコメントは全部削除した.

vagrant up , vagrant ssh

vagrant up で vagrant起動.

macユーザなら vagrant ssh でcentOSにログイン.
winユーザならRLoginなどでcentOSにログインしよう.

リポジトリ追加

本記事の作業で次の環境構築を行う.

  • Apache2.4.23 追加
  • MySQL 5.7.15 追加
  • phpMyAdmin 追加
  • PHP 5.6 追加

osにこれらのツールをインストールするとき,

  • 任意のツールを
  • 任意のバージョンで

使いたいと思うはずだ.
そのために, いくつかのリポジトリを利用する.

ここでは次の点を紹介する.

  • リポジトリをインストールするためのyumコマンドについて
  • 各リポジトリインストール方法

yumとは

Yellowdog Updater Modified (Yum ヤム)はLinuxのRPM Package Managerのパッケージを管理するメタパッケージ管理システムである。

引用: Yellowdog Updater Modified | wikipedia

yumについて簡単に解説.

  • パッケージ管理システムだよ
  • centosにデフォルトでインストールされているよ
  • yumコマンド を使ってLAMP環境をinstallするよ
  • yum と リポジトリの関係

パッケージ管理システムだよ

必要なソフトの install, update, delete などが可能

centosにデフォルトでインストールされているよ

次のコマンドを実行すると, デフォルトでyumコマンドが使えることが判る.

yumコマンド を使ってLAMP環境をinstallするよ

Apache, MySQL, PHP は yumコマンドを使ってインストールする.

yum と リポジトリの関係

yum は install, update, delete を行うコマンド.
リポジトリは ソフトが置いてある場所.

yum もデフォルトでリポジトリを持っているが, パッケージが古い.
最新版パッケージを利用するには外部リポジトリに頼った方が良い.

今回利用する外部リポジトリは次の通り.

  • EPEL
  • Remi
  • IUS
  • MySQL community

外部リポジトリのinstallは yumコマンド または rpmコマンド で行う.

リポジトリは複数持っていた方が良いけど, メリット・デメリットがある.

リポジトリを複数持つことのメリット

メリットは次の点.

  • 使用可能パッケージの種類が増える
  • 使用可能バージョンが増える
  • ダウンロード元が増える
リポジトリを複数持つことのデメリット

デメリットは次の点.

  • 管理が煩雑になる
    • どのリポジトリからインストールしたのか
    • どのバージョンをインストールしたのか

パッケージ管理は大抵の場合一筋縄ではいかない.
必要に応じてググって調べる方針で作業を進める.

インストール済みパッケージをアップデートしておく

作業開始前に, 次のコマンドでインストール済みパッケージのアップデートをしておく.

$ sudo yum -y update

ここからリポジトリのインストールを開始する.

EPEL リポジトリ インストール

次のコマンドを実行.

$ sudo yum -y install epel-release

-y は, 問い合わせがあったときにすべて yes と答えるオプション.

次の表示が出たら完了.

REMI リポジトリ インストール

$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

今回は centos6.x なので remi-release-6.rpm を指定.

rpm コマンドのオプションの意味は次の通り.

オプション 意味
-U パッケージのアップグレード. 前パージョンのパッケージが存在しない場合はパッケージの新規インストール.
-v 操作対象パッケージ名表示.
-h インストール状況を # で表示.

IUS リポジトリ インストール

公式HPから最新版をゲット.
今回は 1.0-14 をインストールする.

次のコマンドを実行.

wgetでDLしたものは不要なので削除しておく.

$ rm ius-release-1.0-14.ius.centos6.noarch.rpm

MySQL community リポジトリ インストール

MySQL公式リポジトリをインストールする.

自分の環境に合った Yum Repository を選択.
centos6.8 はRHELと互換性があるので Red Hat Enterprise Linux / Oracle Linux の downloadページから取得する.

$ sudo rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el6-9.noarch.rpm

次のコマンドで設定されたリポジトリを確認.

$ yum repolist enabled | grep "mysql.*-community.*"

Vim 追加

vimについては Vim | wikipedia を参照.

この後設定ファイルを編集する必要があるので, Vimをエディタとして用意する.

centosには元々ミニマルなvimがインストールされている.

ミニマルなvimは使い勝手が悪いらしい.
vim-enhancedを入手するために次のコマンドを発行する.

まず, 使えるvimのバージョン確認

インストール
$ sudo yum -y install vim-enhanced.x86_64

このとき依存関係のあるパッケージも同時にインストールされる.
次の表示が出れば完了.

Complete!

Apache2.4.23 追加

次のコマンドでインストール可能なApacheを全て表示する.
$ yum list | grep httpd24

httpd24u から始まるパッケージが多かったので次のようにインストール.
$ sudo yum -y install httpd24u

インストールしたApacheバージョンは次のコマンドで確認可能.

$ httpd -v

実行結果.
Server version: Apache/2.4.25 (CentOS)

静的ファイルキャッシュ対策

vagrant環境だとcssなど静的ファイルが正しく反映されない.

ネットワークマウントされた DocumentRoot (例えば NFS や SMB) では、カーネルは自身のキャッシュを使ってネットワークからのファイルを 送ることができないことがあります。

引用: EnableSendfile ディレクティブ | Apache.org

VirtualBoxの共有フォルダに設定したディレクトリは外部ストレージ上のものだた判断されてしまう.
その結果, Apacheが静的ファイルの更新を検知できない.

略称用語が気になったので正式名称だけ紹介しておく.

略称 正式名称
NFS Network File System.
SMB Server Message Block

対策として vagrant用の .confファイル を作成する.

ファイルを次のように記述.

変更内容を反映するために再起動を行う.
$ sudo service httpd restart

Apache自動起動有効化

毎回vagrantを起動する度に手動でApacheをスタートさせるのは手間だ.
自動起動を有効化するために次のコマンドを実行.

$ sudo chkconfig httpd on

ランレベルの設定は次のコマンドで確認可能.

Apacheの設定は以上.

MySQL 5.7.15 追加

次の公式ドキュメントを参考に作業を進める.

vet 5.6 なら日本語もある.

公式repositoryからインストール可能なRPMパッケージ

公式repositoryからインストール可能なRPMパッケージは次の通り.

  • MySQL Server
  • MySQL Client
  • MySQL Workbench
  • MySQL Utilities
  • Connector/ODBC
  • Connector/Python

今回は次の2つをインストールする.

  • MySQL Server
  • MySQL Client

el5, el6

ここで, ドキュメントに出てくる用語を少し解説.
el5, el6 は次のような意味.

用語 意味
el5 Enterprise Linux 5
(Red Hat Enterprise Linux version or CentOS version)
el6 Enterprise Linux 6
(Red Hat Enterprise Linux version or CentOS version)

centosのリリース(バージョン)毎に異なるパッケージが用意されている.
使用中のcentos リリースは次のコマンドで確認可能.

私の環境は 6.8 なので, el6 としてドキュメントを眺めてゆく.

MySQL Server, MySQL Client インストール

MySQL CommunityリポジトリからMySQL5.7をインストールする.

次のコマンドで先程追加したリポジトリ一覧を確認.
$ yum repolist all

更に, 次のコマンドで利用可能なパッケージ一覧を取得.
$ yum list available | grep mysql57

MySQL Server, MySQL Client インストール

Complete! と表示されれば完了.

寿司・ビール問題 対策

寿司・ビール問題とは

MySQLのDBでencoding=utf8の場合, UTF-8の文字列長が4byteの文字をDBに保存できなくなる問題.
詳しくはこちらのページを参照.

このタイトルはMySQL 8.0だけど, 2015年4月1日に投稿された Bug #76553 あたりから引きずっているバグらしい.

対策

MySQLの設定ファイルを編集してデフォルト文字セットを設定する.

$ sudo vim /etc/my.cnf

MySQL起動, 自動起動有効化

初期パスワードを vagrant として設定

MySQL5.7のパスワードポリシーは次のようになっている.

Assuming that the validate_password plugin is installed, it implements three levels of password checking:
LOW, MEDIUM, and STRONG.
The default is MEDIUM; to change this, modify the value of validate_password_policy.

(中略)

・MEDIUM policy adds the conditions that passwords must contain at least
1 numeric character,
1 lowercase character,
1 uppercase character,
and 1 special (nonalphanumeric) character.

引用: The Password Validation Plugin | dev.mysql.com

ローカル開発環境のみで利用するvagrant boxなので, 毎度このルールに則ったパスワードを入力するのは面倒.
シンプルに vagrant をパスワードとして使用したい.

パスワードのセキュリティ的な脆弱性が生まれるが, ローカル開発環境のみで利用するので良しとする.
以下, MySQLパスワード変更手順.

パスワード設定

設定方針は次の通り.

  • skip-grant-tables を有効にしている間にパスワード変更を行う.

次のコマンドで初期パスワードを調べ, ログインする.

ログイン後, どんな操作をしても次のようにパスワードの設定を求められる.
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

後で vagrant に変更するために, ここでは一旦ポリシーに従ったパスワード Vagrant_0 に設定する.
$ set password for root@localhost=password('Vagrant_0');

一度mysqlからログアウトする.
$ exit;

MySQLを停止.

パスワード無しでの接続を可能にする.

Resetting the Root Password: Generic Instructions

Stop the MySQL server if necessary, then restart it with the –skip-grant-tables option.
This enables anyone to connect without a password and with all privileges, and disables account-management statements such as ALTER USER and SET PASSWORD.
Because this is insecure, you might want to use –skip-grant-tables in conjunction with –skip-networking to prevent remote clients from connecting.
引用: Resetting the Root Password: Generic Instructions | dev.mysql.com

ここでは指示に従い --skip-networking オプションも付ける.
$ sudo mysqld_safe --skip-grant-tables --skip-networking &

mysqld_safe セーフモードで起動.
& バックグランド動作.

MySQLへrootでログイン
$ mysql -u root

rootパスワード リセット
ここではパスワードを vagrant とする.

MySQL5.6までは authentication_string ではなく password となっていたらしい.
今回は MySQL5.7 なのでこれでok.

flush privileges で設定した権限を反映する.

MySQL再起動
sudo service mysqld restart

ここまででMySQLの設定完了.

PHP 5.6 追加

apache2.4 fastcgi経由でPHPを動かす.
phpにはそのモジュール(php-fpm)が用意されているので, これを使う.

IUSリポジトリからPHPをインストール

開発用に php.iniファイル を置き換える

$ sudo cp /usr/share/doc/php56u-common-5.6.30/php.ini-development /etc/php.ini

php.ini 編集 : タイムゾーンを UTC に設定

date.timezone = UTC を追記.

$ sudo vim /etc/php.ini

php-fpm 設定

php-fpmの設定は次のサイトを参考に進める.

起動オーナーをapacheに変更

$ /etc/php-fpm.d/www.conf

セッションディレクトリ オーナー変更

php-fpm 自動起動

Apache2.4 と連携

リバースプロキシを設定することで, php-fpmを経由させる.

$ sudo vi /etc/httpd/conf.d/php-fpm.conf

PHPの設定は以上.
ここまででvagrant boxのLAMP環境構築は完了.

boxファイル作成

ここからはホストマシンで作業.
boxに好きな名前を付けて保存する.

$ exit

起動中の仮想マシンからboxファイルを作成する.
$ vagrant package

作成した package.box を好きな名前にrenameしてVagrantに登録する.
今回は minimum/centos68amp とした.
$ vagrant box add minimum/centos68amp package.box

minimum/centos68amp が追加されたことを確認する
$ vagrant box list

現在の仮想マシンは不要なので削除する
$ vagrant destroy -f

ここまででboxファイルの作成は完了.

今回は以上.

スポンサーリンク
336 x 280 – レクタングル(大)
336 x 280 – レクタングル(大)
  • このエントリーをはてなブックマークに追加

この記事が気に入ったら
いいね!しよう

スポンサーリンク
336 x 280 – レクタングル(大)
トップへ戻る