vagrantでCentOS7のLAMP環境イメージを作成する手順

vagrantでCentOS7のLAMP環境イメージを作成する手順

CentOSvagrantでCentOS7のLAMP環境イメージを作成する手順

ここ数年はローカル開発環境に vagrant を使っていますが、CentOS6 と PHP5.4(apache2.2)の組み合わせを標準にしてきました。PHP5.4 も 5.4.33 のバージョンを最後にセキュリティの対応のみとなっていましたが、それから 1 年が経過(2015年9月に完全にサポートは終了しました)するということで、vagrant の環境も CentOS7.1 + PHP5.6(apache2.4)の環境に置き換える準備をしていました。

プライベートな環境では PHP5.5 + nginx の環境を使っていますが、PHP5.5 も 2016 年の 10 月頃には 5.5.30 のセキュリティ対応のサポートが終了してしまうため、5.6 への移行が急務になってきそうです。さすがに今すぐ PHP7 への移行は考えていません。

vagrantのイメージ管理について

開発現場によっては vagrant をチーム内で共有して使うケースもあるでしょうし、開発環境は個人にお任せっていう場合もあると思います。また、後からイメージを共有したくなった場合に、vagrant のイメージをどのように共有するのがベストなのか迷うところです。

Vagrantfile の書き方も人によって好みが分かれそうですが、ここでは公開されている box イメージを追加して、OS を起動してから各ミドルウェアの設定を手順化していくことにします。後々、config.vm.provision でシェルを指定して手順を流してもいいでしょうし、Chef のレシピ化するという手段も選択肢としてはあります。

CentOS7で大きく変わった運用

CentOS7 からは、それまで CentOS6 で使っていた一部のコマンドが使えなくなっていて、サービスの管理やネットワーク系のコマンドの見直しが必要になります。慣れものを使った方が楽ですし効率もいいのですが、時代の流れには逆らえません。

サービス管理

サービスの一覧や自動起動の ON/OFF などで多用していた chkconfig がデフォルトではインストールされず、サービスの管理は systemd のデーモンが行うことになりました。今後は systemctl コマンドをメインに使うことになりそうです。

Life with open mind: Systemdコマンド早見表(CentOS 7対応)

パケットフィルタ

ipchains から iptables へと時代が変わり、そして firewalld が登場です。もちろん iptables も yum からインストール可能なので、お決まりの定義を使いたい方は入れ替えるのもアリです。ちなみに、すっかり AWS の環境がスタンダードとなっている私は、ネットワークの構成上 firewalld もサービス停止して使いません。

ネットワーク系コマンド

ここが一番大きなポイントとなるかもしれません。NIC の設定や状況、待ち受けポートの確認など、サーバの状態確認などで多用していた ifconfig や netstat が使えなくなっています。これも yum で net-tools パッケージをインストールすれば使えますが、時代の流れに乗っかります。

コマンドの対応表は下記のサイトが参考になりそうです。

RHEL7/CentOS7でipコマンドをマスター - めもめも

CentOS7の基本設定

まずは、既存パッケージを最新にし、その後、開発ツールのパッケージをインストールします。

$ sudo su -

$ yum -y update

$ yum -y groupinstall base "Development tools"

サービスの確認

まずはサービスの状態を確認します。chkconfig --list に代わるコマンドです。

$ systemctl list-unit-files -t service

ロケールの設定

現状の設定を確認して変更します。

$ localectl status

$ localectl set-locale LANG=ja_JP.utf8

$ localectl set-keymap jp106

時間の設定

タイムゾーンの設定も現状の設定を確認して変更します。

$ timedatectl status

$ timedatectl set-timezone Asia/Tokyo

ハードウェアクロックも UTC になっているのでローカルタイムへ変更します。

$ vi /etc/adjtime
    
#UTC
LOCAL

そして、ntpd に代わるのが chrony です。時間の同期をする場合は以下のように設定します。

$ vi /etc/chrony.conf
    
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server ntp1.jst.mfeed.ad.jp iburst
server ntp2.jst.mfeed.ad.jp iburst
server ntp3.jst.mfeed.ad.jp iburst
    
$ systemctl restart chronyd
   
$ systemctl enable chronyd
    
$ chronyc sources

詳細は下記のサイトが参考になります。

CentOS - 新しいNTPクライアント&サーバ、chrony - Qiita

■パケットフィルタ

iptables の代わりに存在している firewalld は停止して自動起動も止めてしまいます。

$ systemctl stop firewalld
    
$ systemctl disable firewalld

各種ミドルウェアの設定

SELinux は最初から無効になっていたので、上記で基本設定は終了とします。

Apacheのインストール

ローカル開発環境では SSL(https)のサイトを動かす機会も増えてきたと思いますので、オレオレ証明書でアクセスできる状態にします。

$ yum -y install httpd httpd-devel mod_ssl

Apacheの設定

httpd.conf は各環境によって細かな設定などが違うと思いますので、環境に合わせて設定してください。まずは、サーバ証明書を有効期限 10 年で作成するようにします。秘密鍵のパスフレーズは一旦設定しますが、最後に server.key から除去します。

$ sed -i 's/365/3650/g' /etc/pki/tls/certs/Makefile

$ make -f /etc/pki/tls/certs/Makefile /etc/pki/tls/certs/server.crt

$ openssl rsa -in /etc/pki/tls/certs/server.key -out /etc/pki/tls/certs/server.key

SSL の設定。

$ vi /etc/httpd/conf.d/ssl.conf

SSLCertificateFile /etc/pki/tls/certs/server.crt
SSLCertificateKeyFile /etc/pki/tls/certs/server.key
DocumentRoot "/var/www/html"
SSLProtocol all -SSLv2 -SSLv3

Apache の起動と自動起動設定。

$ systemctl start httpd

$ systemctl enable httpd

PHPのインストール

remi のリポジトリを使って 5.6 をインストールします。

$ yum -y install --enablerepo=remi --enablerepo=remi-php56 php php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd php-phpunit-PHPUnit php-pecl-xdebug php-pecl-xhprof

PHPの設定

php.ini の設定も各自にお任せで。冗長構成を想定して、セッションは memcached で管理することにするので、memcached をインストールして PHP からも使えるようにします。

$ yum -y --enablerepo=remi install memcached memcached-devel libevent-devel

$ yum --enablerepo=remi-php56 -y install php-pecl-memcached

$ echo "extension=memcache.so" >> /etc/php.d/memcache.ini

$ systemctl start memcached

$ systemctl enable memcached

画像加工をする機会があるかもしれないので、imagemagic も入れます。画像アップロード時の Exif 情報の削除とか今では一般的ですしね。

$ yum install -y libjpeg-devel ImageMagick ImageMagick-devel

$ pecl install imagick

$ echo "extension=imagick.so" >> /etc/php.d/imagick.ini

MySQLの設定

MySQL もサクっとインストールします。

$ yum -y install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

$ yum -y install mysql mysql-devel mysql-server mysql-utilities

$ systemctl start mysqld

$ systemctl enable mysqld

$ mysql_secure_installation

my.ini の設定をして MySQL サーバを再起動します。

$ systemctl restart mysqld

スマホ向けのサービスでは、絵文字を気軽に使ってくるユーザーが多いので、文字コードは utf8mb4 にしておくのがいいでしょうか。utf8 では 3 バイト文字までしか扱えませんでしたが、MySQL6 からは utf8 も 4 バイト文字に対応するとか。

vagrantのイメージを出力する

ざっくり、備忘録として手順を残しましたが、この手順を流した状態のイメージファイルがあると別の人が使う際に楽です。冒頭で書いたように、この手順をシェル化やシェフノレシピ化してもいいと思いますが、今すぐに別の人に使ってもらいたい場合はパッケージ化するのが一番早いです。

起動していたイメージを終了させて、package 出力させます。出力されたボックスファイル(*.box)を、別の人が vagrant に box add することで、すぐに同じ環境が試せます。

$ vagrant halt
    
$ vagrant package

最終更新日:

関連記事

人気記事

新着情報