PHPのバージョンアップ動的検証がしたい
前回、DockerとPHPStanを使ってソースコードの静的検証を行いました。
しかしこれで検出できるのは一部エラーのみで、動作させないと検出できないエラーもたくさんあります。Dockerでphp8の動的検証用環境を作成したいと思います。
1.Dockerで検証環境を構築。
前提環境:ホストマシーン=WSL2+Docker Desktop for Windows
2.PHP公式提供のイメージを利用。
PHP – Official image | DockerHub
今回検証したいのはPHP8+Apache+MySQLの環境です。
3.gdとかimagemagickを使うプログラムがある
4.mysqlも使う
ホストマシーン側ディレクトリ構成
test
├config
│ ├mysql
│ │ └my.cnf
│ └php
│ └php.ini
├html
├initdb.d
│ └export_db.sql
├mysql
├docer-compose.yml
├Dockerfile
└site.conf
Dockerの設定ファイル
Dockerfile
PHPの公式イメージから、8.3.2-apacheを使用することにしました。
DockerfileのRUN等の部分がぐちゃぐちゃですが、前後させたりするとエラーになったりまとめて記述したらエラーになったりで、とりあえずこれで通ったので記載してますが、もっと整理できるはず……?
最初にCOPYしているsite.confファイルには.htaccessが有効になるようにAllowOverride Allが書いてあります。
FROM php:8.3.2-apache
COPY ./site.conf /etc/apache2/sites-available/000-default.conf
RUN apt-get update && apt-get install -y \
libonig-dev zlib1g-dev libzip-dev zip
RUN docker-php-ext-install pdo_mysql mysqli
RUN docker-php-ext-install zip
RUN apt-get install -y imagemagick libmagickwand-dev; \
mkdir -p /usr/src/php/ext/imagick; \
curl -fsSL https://github.com/Imagick/imagick/archive/refs/tags/3.7.0.tar.gz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1; \
docker-php-ext-configure gd --with-jpeg; \
docker-php-ext-install gd imagick;
RUN apt-get install -y vim
RUN a2enmod rewrite
COPY ./config/php/php.ini /usr/local/etc/php/
Dockerfile
docker-compose.yaml
volumeディレクトリの指定とかMySQLの設定をしています。
ホスト側のディレクトリをvolumesで指定することで、MySQLのデータの書き込みをホスト側に記録して、立ち上げなおすたびにデータがリセットされるのを防ぎます。
また、 – ./initdb.d:/docker-entrypoint-initdb.d で、初回起動時にホスト側のinitdb.dの中に置いた初期データ投入用SQLを自動的に実行してくれます。
/initdb.dに置いたexport_db.sqlの中身は、phpMyAdminなどでdb全体をSQL形式でエクスポートしたものです。
version: '3.7'
services:
web:
build: .
container_name: "php83-2"
volumes:
- "./html/:/var/www/html"
privileged: true
ports:
- "80:80"
depends_on:
- mysql
mysql:
image: mysql:8
volumes:
- ./mysql:/var/lib/mysql
- ./config/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
- ./initdb.d:/docker-entrypoint-initdb.d
environment:
- MYSQL_ROOT_PASSWORD=mQk9VkiI3
- MYSQL_DATABASE=test_db
- MYSQL_USER=admin
- MYSQL_PASSWORD=%4VWyjwpk5ii
ports:
- "4306:3306"
container_name: mysql8-1
docker-compose.yaml
<VirtualHost *:80>
DocumentRoot /var/www/html
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
site.conf
[mysqld]
default_autentication_plugin=mysql_native_password
my.cnf
[Date]
date.timezone = "Asia/Tokyo"
upload_max_filesize = 32M
post_max_size = 32M
memory_limit = 512M
extension=zip
php.ini
ビルドと起動と停止、動作確認
上記ファイルを準備したら、PowerShellなどを起動してtestディレクトリに移動し
...\...\test> docker-compose build
...\...\test> docker-compose up
で、起動します。(buildは初回のみ)
停止は「Ctrl+C」です。
ブラウザでアドレスバーに「localhost」と入力してアクセスすると……
PHPのバージョンアップによりエラーが発生してたぶん動かないことでしょう。
エラーログ出力されるようにしたりでエラー箇所をどしどし修正していきましょう。
以上です