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

参考カテゴリ

オススメ記事

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

標準出力と標準エラー出力をパイプに渡す

よく、標準出力先をファイルにリダイレクトすることはありますが、意外に標準エラー出力は使う機会がありません。しかし、やはりツールやパッケージ製品になると標準エラー出力も活用されているようです。でも、...

Linux(FreeBSD)

>>記事を確認する

主要無料ブログ5つに対する自動投稿PHPプログラム

アメブロへ楽天APIなどの情報を自動で投稿する の反響が良かったので、どうせならアメブロ以外の無料ブログの XML-RPC を使った自動投稿も紹介したいと思います。これには FC2BlogManager.php というライブ...

PHP

>>記事を確認する

snmpでデバイスの情報を取得

snmpでデバイスの情報を取得するコマンドです。これを元に、ディスクIOなどのMIB値を探します。 $ snmpwalk -v 2c -c {SNMPGROUPNAME} localhost 1.3.6.1.4.1.2021.13.15.1.1.2 (結果の一部) UCD-DIS...

Linux(FreeBSD)

>>記事を確認する

awkで指定したカラム以降をprint表示する

前回、awk で最後のカラム以外を表示してみましたが、今回は指定したカラム以降のカラムを全部表示したいと思います。 例えば、7 個の文字列がカンマで区切られているファイルがあるとしたら、3 番目のカラム...

awk / シェル

>>記事を確認する

CentOSでRedisサーバを使う

冗長化した Web サーバなどで、セッションの管理や、セッションや特定のユーザーに紐付く一時データを管理するのに memcache を使う場面は多いと思います。 その memcache の中でも主流なのが memcached です...

Linux(FreeBSD) / CentOS / Redis

>>記事を確認する

ドメイン取るなら低価格で楽々管理

バリュードメインは、GMO デジロック社の低価格ドメイン総合サービスです。

このサイト含め、私もこれまでに 100 個以上のドメインを取得して管理してきましたが、WHOIS の代理公開も可能なので、無料 SSL 証明書の Let's Encrypt と組み合わせれば、かなりの低価格で SSL サイトも運営できます。

年単位で領収証発行もしてくれるので、たくさんサイトを抱えているアフィリエイターや個人事業主にもオススメです。

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

MySQLでテーブル定義を取得

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

データベース / MySQL

>>記事を確認する

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

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

Windows / ツール

>>記事を確認する

Laravel5.1からLaravel5.5へアップデートする

LTS だった Laravel5.1 のバグフィックスサポートが 2017 年の 6 月で終わり、セキュリティサポートも 2018 年の 6 月で終了となります。 このタイミングで、兼ねてから発表のあった、次期 LTS の Laravel5.5...

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

>>記事を確認する

VagrantでCentOS6.9のイメージを使う

CentOS7 が既に 7.3 まで出ていますが、AmazonLinux がまだ 6 の構成と似ていることから、なかなか 7 系に移行できません。 そこで、Vagrant のイメージも 6 系の最新版を使うと思ったのですが、下記の BOX ...

Linux(FreeBSD) / CentOS / Vagrant

>>記事を確認する