見出し画像

DockerでCakePHP4の環境構築

題の通り、DockerでCakePHP 4 (4.1.6) の環境構築をしたので手順を残す。
(何回か同じことをしている。その都度手順を忘れてビルド時にエラーを吐かれまくるので記録を残すことにした。)

docker-compose.yml

version: "3.7"

services:
 nginx:
   image: "nginx:1.18"
   container_name: "cakephp-nginx"
   env_file:
     - "./.env"
   volumes:
     - "./nginx/conf.d:/etc/nginx/conf.d"
     - "./app:/usr/share/nginx/html"
   ports:
     - "8080:80"

 php-fpm:
   image: "php-fpm:cake-php"
   build:
     context: "./"
     dockerfile: "Dockerfile.php-fpm"
   container_name: "cakephp-php-fpm"
   env_file:
     - "./.env"
   volumes:
     - "./app:/var/www/html"

 mysql:
   image: "mysql:8.0"
   container_name: "cakephp-mysql"
   env_file:
     - "./.env"

.env

MYSQL_ROOT_PASSWORD=password
MYSQL_USER=cakephp
MYSQL_PASSWORD=cakephp
MYSQL_DATABASE=cakephp

Dockerfile.php-fpm

FROM "php:7.4-fpm"

RUN apt update && apt upgrade -y && apt install -y \
    apt-utils \
    libicu-dev \
    libzip-dev \
    unzip \
    wget

RUN docker-php-ext-install \
    intl \
    pdo_mysql \
    zip

RUN cd /usr/local/src \
 && wget https://raw.githubusercontent.com/composer/getcomposer.org/bfd95e2a4383ee9cf7c058c2df29d7acb5f86d77/web/installer \
    --output-document=./composer-setup.php \
 && echo '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3 *composer-setup.php' > ./installer.sha384sum \
 && sha384sum -c ./installer.sha384sum \
 && php ./composer-setup.php \
    --filename=composer \
    --install-dir=/usr/local/bin \
    --quiet \
 && rm ./composer-setup.php ./installer.sha384sum

WORKDIR /var/www/html

RUN composer create-project --prefer-dist cakephp/app:~4.1.0 ./

nginx/conf.d/cakephp.localhost.conf

upstream php-fpm {
  server php-fpm:9000;
}

server {
  server_name cakephp.localhost;

  listen 80;

  root /usr/share/nginx/html/webroot;
  index index.php;

  location / {
    try_files $uri $uri/ /index.php?$args;
  }

  location ~ \.php$ {
    try_files $uri =404;
    include fastcgi_params;
    fastcgi_pass php-fpm;
    fastcgi_index index.php;
    fastcgi_intercept_errors on;
    fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
  }
}

app/config/app_local.php

<?php
return [
  'debug' => filter_var(env('DEBUG', true), FILTER_VALIDATE_BOOLEAN),

  'Security' => [
    'salt' => env('SECURITY_SALT', '84e4c6e091f6e066e06096fede621b15e4f4b99549ded32f43d42b861bf3e4e9'),
  ],

  'Datasources' => [
    'default' => [
      'host' => 'mysql',
      'username' => env('MYSQL_USER'),
      'password' => env('MYSQL_PASSWORD'),
      'database' => env('MYSQL_DATABASE'),
    ],
  ],
];

ぼやき

https://getcomposer.org/download/ のインストール用スクリプトをDockerfileにそのまま使っていたが、Composerの最新版が更新されるとインストーラファイルのハッシュ値が変わってしまうのでビルドエラーになる。

かといってチェック用のハッシュ値までHTTP経由で取得するのも本末転倒な気がするので、取得するインストーラファイルをコミットハッシュで固定して取得するようにした。


この記事が気に入ったらサポートをしてみませんか?