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
などのログを確認すると良い。(実際に、僕も設定ファイルのスペルミスで一発でできなかったが、ログを見ると解決できた。)