Ubuntu 20.04 に PHP 8.0 をインストールして Laravel 9 を使う

PHP 7.4 のサポート期限が2022年11月28日に切れて、いよいよ PHP 8 系の時代に入りました。一方で、Laravel も 6.x のサポート期限が2022年9月3日で切れています。8.x のサポート期限も2023年1月24日に切れるので、現時点の選択肢としては PHP 8 系と Laravel 9 の組み合わせが最有力でしょう。

一方、Ubuntu は最新の LTS である 22.04 は2027年4月までサポート期限があるため、現在新規でサーバを立ち上げるのであればこちらをインストールするのが適切でしょうが、20.04 のサーバを使っている人も多いのではないでしょうか。ひとつ前の LTS である 20.04 も2025年4月までサポート期限が残っており、その意味では十分「現役」といえますが、PHP のバージョンは 7.4 です(ちなみに 22.04 に標準でインストールされるのは PHP 8.1 です)。Ubuntu は本家の PHP のサポートが終了してもセキュリティ更新を提供してくれますが、Laravel をはじめとしてパッケージが PHP のバージョンに依存している場合、最新版を利用できないという難点があります。

前置きが長くなってしまいましたが、Ubuntu 20.04 の環境に PHP 8.0 をインストールし、Laravel 9 を使う方法をまとめてみます。

インストール直後の Ubuntu 20.04 に PHP 8.0 をインストールする

PHP 7.4 で稼働中の 20.04 に PHP 8.0 をインストールする前に、インストール直後の 20.04 に PHP 8.0 をインストールする方法を確認しておきましょう。

sudo add-apt-repository ppa:ondrej/php
sudo add-apt-repository ppa:ondrej/apache2
sudo apt install php8.0 php8.0-mbstring php8.0-mysql php8.0-zip zip
sudo apt install mariadb-server

パッケージをダウンロードするリポジトリに ppa:ondrej/php と ppa:ondrej/apache2 を追加し、php8.0 パッケージと Composer のインストールに必要な関連パッケージ、Maria DB 関連のパッケージをインストールします。ちなみに

sudo apt install php

とすると、最新の安定版である PHP 8.2 がインストールされます。とはいえ、PHP 8.2 は 2022年12月8日にリリースされたばかりなので、本番環境で使うにはリスクが高いと思います。

Composer のインストール

Ubuntu 標準の Composer もバージョンが古いので、Composer は apt を使わずにインストールします。現在は 2.2 系が LTS らしいので、composer-setup.php--2.2 を付けてインストールします。

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php --2.2
php -r "unlink('composer-setup.php');"
sudo mv composer.phar /usr/local/bin/composer

Laravel に必要なパッケージをインストール

続いて Laravel に必要なパッケージをインストールします。

sudo apt install php8.0-xml php8.0-curl

Node.js のインストール(Volta を利用)

Laravel でアセット管理をする場合には、Node.js が必要となりますが、20.04 の標準は 10 系なので、こちらも apt からのインストールを使わず、最新版がインストールできる環境を整えます。Node.js の管理ツールにはいろいろなものがありますが、Node.js や npm のインストールが不要で、プロジェクトごとに Node.js のバージョン管理ができる Volta を使うことにしました。

curl https://get.volta.sh | bash

あとはプロジェクトのルートディレクトリに移動して

volta pin node@16

とすれば、指定したバージョンの Node.js がインストールできます(上の例では 16 系)。

PHP 7.4 で稼働中の Ubuntu 20.04 に PHP 8.0 をインストールする

では、本題の PHP 7.4 で稼働中の Ubuntu 20.04 に PHP 8.0 をインストールしてみます。

sudo add-apt-repository ppa:ondrej/php
sudo add-apt-repository ppa:ondrej/apache2

ここまでは、クリーンインストール直後の場合と変わりません。ここで

sudo apt upgrade

を実行すると、php-common などのメタパッケージは PHP 8.2 系に更新されます。今回は 8.0 系にしたいので、先に PHP 関連のパッケージを削除しておきます。インストールされているパッケージは apt list --installed などで確認しておいてください。

sudo apt remove libapache2-mod-php composer php-bcmath php-common php-composer-ca-bundle php-composer-semver php-composer-spdx-licenses php-composer-xdebug-handler php-curl php-json-schema php-json php-mbstring php-mysql php-psr-container php-psr-log php-symfony-console php-symfony-filesystem php-symfony-finder php-symfony-process php-symfony-service-contracts php-xdebug php-xml php-zip

そのうえで改めて PHP 8.0 系のパッケージをインストールしていきます。

sudo apt install php8.0 php8.0-mbstring php8.0-mysql php8.0-zip php8.0-xml php8.0-curl

一部のパッケージが更新されているので、sudo apt upgrade も実行しておきましょう。Composer のインストールなど、その後の作業はクリーンインストール時と同じです。

PHP 8.0 から PHP 8.1 にアップグレードする

この状態から、PHP 8.1 にアップグレードする手順についても確認しておきます。上の手順でメタパッケージは削除しているので、PHP 8.1 関連のパッケージをインストールすることで、PHP 8.0 と PHP 8.1 を併存させることができます。

sudo apt install php8.1 php8.1-mbstring php8.1-mysql php8.1-zip php8.1-xml php8.1-curl

インストール直後の段階では、インストールスクリプト中で実行される update-alternatives によって、CLI 版の PHP は 8.1 に変更されますが、Apahe 版の PHP は 8.0 のままです。これを 8.1 に変更するには以下の操作を行います。

sudo a2dismod php8.0
sudo a2enmod php8.1
sudo service apache2 restart