仕事

Dockerで構築したLaravelのバージョンアップをする方法


個人開発するときは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

-仕事