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

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

記事一覧vagrantで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

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.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 もサクっとインストールします。

$ 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

参考カテゴリ

オススメ記事

最新の投稿やよく見られているのオススメ記事一覧です。

新しいぐるなびAPIで飲食店の店舗情報取得

過去に作成した「ぐるなびAPI」のプログラムや、ぐるなびの Web Service が新しくなったこともあり、API からの情報取得プログラムを書き換えてみました。 以前の記事は下記になります。 ・ ぐるなびAPIで...

WebAPI

>>記事を確認する

NginxのFastCGIキャッシュで白い画面がキャッシュされる

以前から、トップページにアクセスすると、レスポンスステータスは 200 で返ってくるのに、画面に何も表示されない現象が稀に見受けられたので調査してみました。 さすがに機会損失にも繋がるということで、...

Nginx

>>記事を確認する

Laravel5.4の認証ユーザーのパスワードハッシュについて

Laravel で用意されている認証モジュールを利用する際、ユーザーモデル(User.php)経由で登録されるパスワードのハッシュ方法について調べてみました。 Laravel 上ではパスワード文字列を bcrypt() のヘルパー...

PHP / Laravel

>>記事を確認する

Laravel5.4のコントローラコンストラクタでAuth::user()が取得できない

Laravel5.4 で認証を通したアクセスに対して、コントローラのコンストラクタでユーザモデルの値を取得しようと思ったら、なぜか Auth::user() の値が取得できなくて悩みました。 public function __construc...

PHP / PHPフレームワーク / Laravel

>>記事を確認する

NginxのHSTS(HTTP Strict-Transport-Security)の設定

「Let's Encrypt」のおかげで、全サイト SSL 化していますが、これまで nginx の設定では、http のアクセスがあった場合に https に 301 リダイレクトさせていました。 この場合、Googlebot に http のアク...

セキュリティ / Nginx / SSL

>>記事を確認する

GoogleMapのAPIキーの認証情報にリファラURL設定

昔は API キーを指定することで、JavaScript で GoogleMap が表示できていましたが、何年か前に、そのキーに対して認証情報の追加が推奨されました。 新規で発行する場合は必須になっているかもしれませんが...

Web全般 / WebAPI

>>記事を確認する

AmazonLinuxでApache2.4+php7.1+Laravel5.5

先日、「 VagrantでCentOS6.9のイメージを使う 」の通り、CentOS6.9 には Apache2.4 と PHP7.1 で Laravel のフレームワークが使える環境を構築しました。 ただ、将来的には AWS かつ Amazon Linux 上で動か...

Apache / PHP / AWS / PHPフレームワーク / Laravel

>>記事を確認する

AWSの無料利用枠内で複数サイトをサクサクと運営する方法

MySQLでテーブル定義を取得

似たような構成のテーブルを作る時に、今までは mysqldump コマンドで -d オプションを付けて実行していました。 これでも十分に要件は満たせるのですが、MySQL のコンソールからサクっと出したい場合もある...

データベース / MySQL

>>記事を確認する

Poderosa5の登場と文字色と背景色

新しい PC を購入したので、久し振りに Poderosa のインストールをしたのですが、Poderosa-Terminal として最新バージョンの 5 が 2016 年に登場していました。 これ、職場でもインストールしてみたのですが...

Windows / ツール

>>記事を確認する