個人開発するときはDockerfileとか以前作成したものを使いまわしてたから、PHPのバージョンが毎回古かった。今回はLaravel9のバージョンを使いたくアップグレードしたからその過程を解説する。
公式ドキュメントを参考に実施したんだけど色々設定を変えないといけなく正直めんどくさい。でも環境構築後でDependenciesがほぼなかったからよかった。バージョンとかによってやり方は変わってくるので注意。
バージョンアップの経緯としては、こちらのフロントエンドロードマップでModule BundlersのツールはViteを推奨していて使ってみたかったから。 Viteを使うにはLaravelのバージョンを9.19.0以上にしないといけないらしい。
目次:クリックでジャンプ
今のバージョン
- PHP version:7.4.*
- Laravel version:8.83.*
- MYSQL version:5.7.*
- Apache version:2.4.*
- Xdebug version:2.9.1
Laravelのバージョン確認方法
バージョン確認したら8.83.27
PHPのバージョンを調べる
バージョン確認したら7.4.33
Laravel9で必要なPHPバージョンは8.0.2以上。
それ未満なので上げれるLaravelのバージョンは8.xになる。
今回は9.xにしたいので、先にPHPのバージョンを上げる必要がある。
Dockerfileを修正
Dockerfileにphpのバージョンを指定してるので上記のように修正。
下記コピー。
FROM php:8.1.1-apache RUN pecl install xdebug && \ docker-php-ext-enable xdebug
PHP8.1から必要なXdebugバージョンは3らしい。上記のようにバージョンを指定しないで記載する。
php.iniを修正
php.iniファイルにXdebugの設定を上記のように修正。
下記コピー。
[xdebug] xdebug.mode=debug xdebug.start_with_request=yes xdebug.client_host=host.docker.internal xdebug.client_port=9003 xdebug.log=/tmp/xdebug.log xdebug.log_level=0
再度、dcocker-compose build --no-cacheとdocker-compose up -dを実行
PHPのバージョンアップできた。
次にLaravelのバージョンを8から9にバージョンアップ。
app/Http/Middleware/TrustProxies.phpファイルを修正
1.
use Fideloper\Proxy\TrustProxies as Middleware;
上記を下記のように書き換える。
use Illuminate\Http\Middleware\TrustProxies as Middleware;
2.
protected $headers = Request::HEADER_X_FORWARDED_ALL;
上記を下記のように修正
protected $headers = Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_HOST | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PROTO | Request::HEADER_X_FORWARDED_AWS_ELB;
↓こんな感じ。
fideloper/proxyの削除
composer remove fideloper/proxy
composerコマンドでインストールしているfideloper/proxyパッケージを削除。
composer.json書き換え
1:"php": "^7.3", → "php": "^8.1", 変更
2:"laravel/framework": "^8.0", → "laravel/framework": "^9.0", 変更
3:"facade/ignition": "^2.3.6", → "spatie/laravel-ignition": "^1.0" 変更
4:league/flysystem-ftp → "league/flysystem-sftp": "^3.0" 変更(あれば)
composer updateコマンド実行
composer updateコマンドを実行して、Laravelをアップグレード
Laravelのバージョンを確認したら9.52.8になってた。
バージョンアップ成功。
ただ、「Deprecated: PHP Startup: Use of mbstring.internal_encoding is deprecated in Unknown on line 0」エラーが表示される。
php.iniで「mbstring.internal_encoding」を設定してたのでコメントアウトしもう一度docker-compose build --no-cacheとdocker-compose up -dを実行したら直った。
変更後のバージョン
- PHP version:8.1.*
- Laravel version:9.52.*
- MYSQL version:5.7.*
- Apache version:2.4.*
- Xdebug version:2.9.1