Ubuntu18.04.1にphpbrew+php7.2+apache2+MySQL5.7の開発環境を整える方法

今まではCentOSを開発環境に使っていたが、Ubuntuの方がデザインが良いし使っていて気持ちが良かったので乗り換えた。

それに伴ってphpの開発環境を新たに構築し直したので、その方法を備忘録としてまとめておく。

今回の開発環境&入れるパッケージ

  • Ubuntu 18.04.1
  • phpbrew
  • php 7.2
  • apache2.4
  • MySQL 5.7

今回はwebサーバーはapacheを採用したが、nginxでも良かったかもしれない。

1, phpに必要なパッケージをインストール

まずは、以下のコマンドでパッケージ全体を最新のものにする。(おそらく、この作業は飛ばしても差し支えないと思うが念の為)

sudo apt-get update && apt-get upgrade

今回は直接phpをインストールするのではなく、phpbrewと言うphpのバージョン管理をしてくれるものを使ってphpを使う。phpbrewを使う事で、「普段はphp7.2を使いたいけど、検証のために5.3を使いたいな」みたいな事が簡単にできる。

phpbrewを使うためには、あらかじめ必要なパッケージをインストールしておく必要がある。詳しくは公式ページ「Requirement · phpbrew/phpbrew Wiki」に掲載されているが、以下は手順を説明していく。

まずは、以下の3つのコマンドを順番に実行する。

sudo apt-get install -y php7.2 php7.2-cli

sudo apt-get install -y build-essential autoconf automake autotools-dev re2c

sudo apt-get install -y  \
  libxml2 libxml2-dev \
  libssl-dev openssl \
  gettext \
  libicu-dev \
  libmcrypt-dev libmcrypt4 \
  libmhash-dev libmhash2 \
  libfreetype6 libfreetype6-dev \
  libgd-dev libgd3 \
  libpng-dev libpng16-16 \
  libjpeg-dev libjpeg8-dev libjpeg8 \
  libxpm4 libltdl7 libltdl-dev libreadline-dev

次にsudo vim /etc/apt/sources.listを実行して、先頭に# deb-srcと書かれているコメントを全てコメントアウトをする。(コメントアウトは、先頭の#を消すだけ)

そして、以下を実行。

sudo apt-get update

sudo apt-get build-dep -y php7.2

ボクの場合に起こったことだが、上記のコマンドを実行すると以下のエラーが出る可能性がある。

E: いくつかのアーカイブを取得できません。apt-get update を実行するか --fix-missing オプションを付けて試してみてください。
E: ビルド依存関係の処理に失敗しました

この場合はエラー文の通りに、--fix-missingオプションを付けると上手くいく。

sudo apt-get build-dep -y php7.2 --fix-missing

phpを入れてみる

ここまでくれば、後はphpbrewを入れるだけ。やり方は、公式ページ「phpbrew/phpbrew: Brew & manage PHP versions in pure PHP at HOME」に基づいた方法で行う。

curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew

chmod +x phpbrew

sudo mv phpbrew /usr/local/bin/phpbrew

以下を実行すると、phpbrewの初期設定&「Enjoy!」みたいな文が表示される。

phpbrew init

後は以下の2つのコマンドで終わり

[[ -e ~/.phpbrew/bashrc ]] && source ~/.phpbrew/bashrc

source ~/.phpbrew/phpbrew.fish

phpbrewの使い方は、

phpbrew known

インストールできるphpのバージョンをチェックできる。--moreオプションを付けると、より詳細にバージョンを見れる。

phpbrew install 7.1.0 +default

phpをインストールする場合は、上記の様にする。+defaultを付けると、phpでよく使うパッケージ(xml関連のやつとか)もまとめてインストールしてくれる。(phpbrew/phpbrew: Brew & manage PHP versions in pure PHP at HOME)

例えば、defaultに加えてmysqlのパッケージも入れたいという場合は以下の通りのすると良い。

phpbrew install 7.1.0 +default +mysql

そして、実際に使うバージョンを指定する時には、以下の通りにする。

phpbrew use 7.1.0

MySQLをインストール&phpで使えるようにする

次にMySQLをインストールして、phpでも使えるようにする。

まずは以下のコマンドを入力。

sudo apt install mysql-server

あとはお好みで以下のコマンドなどで、MySQLの初期設定を行う。

sudo mysql_secure_installation

次にphpでMySQL等を扱えるようにパッケーズをインストールする。(上記のphpbrewの作業で+default +mysqlのオプションを付けた場合は不要)

sudo apt-get install php-pear php7.2-curl php7.2-dev php7.2-gd php7.2-mbstring php7.2-zip php7.2-mysql php7.2-xml

また、phpは5.3以前のバージョンではphp-mysqlというパッケージを使うことでphpとMySQLはやり取りができていたが、php5.3以降は代わりにphp-mysqlndというパッケージが使うことが推奨されるようになった。

mysqli、PDO_MySQL、そして mysql といった PHP 拡張モジュールは、 どれも C クライアントライブラリの軽量なラッパーです。これらの拡張モジュールは、 mysqlnd ライブラリあるいは libmysqlclient ライブラリのいずれかを使えます。どちらを使うのかを決めるのは、コンパイル時です。 mysqlnd ライブラリは、PHP 5.3.0 以降に組み込まれています。 遅延接続やクエリのキャッシュなど、libmysqlclient にはない機能も搭載されているので、 この mysqlnd ライブラリを使うことを強くおすすめします。

参考記事:PHP: どのライブラリを選ぶか - Manual

また、今回はphp7.2-mysqlのパッケージを入れているが、これはphp7.2-mysqlndと同等のパッケージになるので、どれか1つをインストールすれば良い。

参考記事:Ubuntu – bionic の php7.2-mysqlnd パッケージに関する詳細

apache2を入れる

次にapache2を入れて、開発環境をwebサーバーとしての機能をもたせる。おそらくUbuntuには標準でapacheが入っていると思うので、apache2 -vで確認をすると良い。

もし、apache2が入っていなければ以下のコマンドを行う。

sudo apt install apache2

apacheを入れることで、開発環境はwebサーバーとしても動くことになったが、今のままだと上手く動かない。

そこで、もし開発環境のサーバーにアクセスしたら、どこのディレクトリのどのファイルを読み込めば良いかと言うのを設定する必要がある。

そのためにも、まずは開発環境用のディレクトリを作成する。apache2の初期設定ではvar/www/以下のディレクトリやファイルを読み込むことになっているので、まずはvar/www/ディレクトリにstudyディレクトリを追加し、そのstudyディレクトリの権限をユーザーに設定する。

sudo mkdir /var/www/study
sudo chown user:user /var/www/study

userの部分は、自分の開発環境のユーザー名を入れること。(基本的に、ターミナルの左に表示される名前)

次にcd /etc/apache2/site-availableディレクトリに行き、適当にstudy.confファイルを作成する。

cd /etc/apache2/sites-available
sudo vim study.conf

そしてstudy.confファイルには以下のように記述する。

<VirtualHost *:80>
      ServerName study
      DocumentRoot /var/www/study
      DirectoryIndex index.php
  
      <Directory "/var/www/study">
          AllowOverride All
          Allow from All
      </Directory>
</VirtualHost>     

今回は、ルートをindex.phpに設定し、http://studyでローカル環境にアクセスできるようにしている。

上記の作業で新たに/etc/apache2/sites-available/study.confファイルを作ったわけだが、きちんとapache2にこのファイルを読み込ませる必要がある。そのために以下のコマンドを実行する。

sudo a2ensite study

これで/etc/apache2/sites-available/study.confの中に記述した<VirtualHost *:80>内の部分をapacheが読み取るようになる。

参考記事:a2ensite(8) — apache2 — Debian jessie — Debian Manpages

ここまで来て、念の為にapacheを再起動する。再起動のコマンドはUbuntuのバージョンによって異なる場合があるが、18.04.1だと以下の通りになる。

sudo systemctl restart apache2

最後に/etc/hostsファイルをsudo vim /etc/hosts等で開き以下の1文を追加する。

127.0.0.1 study

実際に、ローカル環境が構築できるか確かめてみよう。

そのためには、/var/www/study/index.phpのファイルを用意してあげて、index.phpに以下の1文を入れよう。

<?php phpinfo(); ?>

もはや、phpのHello World的な存在の1文だが、これを追加したあとにhttp://studyにアクセスしてみる。

もし、phpのバージョンについての表が画面に出てくれば、環境構築は成功。もし、上手く表示されない場合は/var/log/apache2などのログを確認すると良い。(実際に、僕も設定ファイルのスペルミスで一発でできなかったが、ログを見ると解決できた。)