PHPの環境構築地味に大変なので、Dockerで環境構築してみました。
dockerをインストールしていることが前提条件となります。
環境
- php7.4系
- mysql5.7
ディレクトリ、ファイル作成
workspace/test_php
|-nginx
│ └conf.d
│ └default.conf
|-php
│ ├Dockerfile
│ └php.ini
├docker-compose.yml
このようなディレクトリ、ファイル構成になるように空ディレクトリ、空ファイルを作っておきます。
ファイルの中身の記述
docker-compose.yml
version: "3"
services:
db:
image: mysql:5.7
environment:
MYSQL_DATABASE: test_php
MYSQL_USER: root
MYSQL_PASSWORD: test
MYSQL_ROOT_PASSWORD: test
ports:
- "4306:3306"
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- ./db/mysql:/var/lib/mysql
php:
build: ./php
volumes:
- ./nginx/html:/usr/share/nginx/html
- ./php/php.ini:/usr/local/etc/php/conf.d/php.ini
depends_on: ["db"]
nginx:
image: nginx:latest
volumes:
- ./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
- ./nginx/html:/usr/share/nginx/html
restart: always
ports: ["8080:80"]
depends_on: ["php"]
- こちらに関しては、「docker-compose.yml 解説」等でググれば色々な記事がヒットすると思います。
Dockerfile
FROM php:7.4.0-fpm
RUN apt-get update \
&& docker-php-ext-install pdo_mysql
ADD ./php.ini /usr/local/etc/php/php.ini
- DockerでPHPの環境構築をすると、
PDOがデフォルトでsqlite
になっているので、環境構築時にpdo_mysqlをインストールします。 - php.ini をコンテナの中の
/usr/local/etc/php/php.ini
にコピーします。
php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
- タイムゾーンをAsia/Tokyoに変更しています。
default.conf
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ [^/]\.php(/|$) {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
shell
// test_php/配下で実行
$ docker-compose up -d
nginx/配下にhtmlディレクトリが作られます。
html/ 配下にindex.phpを作成します。
index.php
<?php
echo phpinfo();
?>
localhost:8080/にアクセスして、phpの画面が出てきたら成功です。