0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CakePHP4の環境構築

Last updated at Posted at 2023-08-01

普段の業務はほぼLaravel一択なので、CakePHP4の環境構築で色々と調査した。
以下にメモを残しておく。

前提・背景等

  • CakePHP4
    • php8.1
    • mysql8
  • ソースコード状態の評価と、アプリケーションに対する新規機能追加の見積もりを行いたい。
    • なので、とりあえずローカルで動作する環境を作れればOK

概要

  • PHPとMysqlのコンテナがあればとりあえず動くやろの精神
    • (後からわかったが)いくつかphp のextensionが必要
  • (後からわかったが)メール送信する機能もあったのでMailpitも入れといた

成果物

docker関連

ファイル、ディレクトリの構成は以下の要領

.env
docker-compose-local.yml
docker/local/php/Dockerfile
docker/local/mysql/my.cnf

.env

.env
# docker-compose.yml の名前を変えているため
COMPOSE_FILE=docker-compose-local.yml

# ポートが競合する場合は適宜変更
WEB_PORT=8080
DB_PORT=3306
# mysql、あとでCAKEPHPの設定ファイルに書く
DB_NAME=database_name
DB_USER=database_user
DB_PASS=database_password

# Mailpit関連。こちらもポートが競合する場合は適宜変更する
FORWARD_MAILPIT_PORT=1025
FORWARD_MAILPIT_DASHBOARD_PORT=8025

docker-compose-local.yml

  • あくまでlocal用なので、名前ちょっと変えてある
  • 参考URLを紛失してしまったのだが、似たようなことをやっている人が居たのでほぼそのままパクって、Mailpitだけ追加
  • Mailpitの設定は、Laravel sailで建てるときとほぼ同じ
docker-compose-local.yml
version: '3'
services:
  php:
    build:
      context: ./docker/local/php
      dockerfile: Dockerfile
    depends_on:
      - db
    volumes:
      - ./:/var/www
    ports:
      - ${WEB_PORT}:80

  db:
    image: mysql:8.0
    command: --default-authentication-plugin=mysql_native_password
    volumes:
      - ./docker/local/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
    environment:
      - MYSQL_DATABASE=${DB_NAME}
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASSWORD=${DB_PASS}
      - MYSQL_ROOT_PASSWORD=${DB_PASS}
    ports:
      - ${DB_PORT}:3306
    restart: always
  mailpit:
    image: 'axllent/mailpit:latest'
    ports:
      - '${FORWARD_MAILPIT_PORT:-1025}:1025'
      - '${FORWARD_MAILPIT_DASHBOARD_PORT:-8025}:8025'

Dockerfile

やってること、メモなど

  • composerのハッシュ値は毎回公式で調べてね
  • ドキュメントルートのパスを/var/www/webrootに変更
  • Mailpitに送る時必要なのでsendmail
  • あと、アプリが使うっぽい拡張をいくつか
    • zip
    • gd
  • extensionについては、DockerでPHP拡張をインストールする方法をググって、適宜足したり引いたりしている(※一部、ちゃんと動いてないものがあるかも?詳細な動作は未確認)
FROM php:8.1-apache

# Composer のバージョン と ハッシュ値
ARG composer_ver=2.5.8
ARG composer_hash=f07934fad44f9048c0dc875a506cca31cc2794d6aebfc1867f3b1fbf48dce2c5

# Composer の保存先
ARG composer_path=/usr/local/bin/composer
# DocumentRoot
ENV APACHE_DOCUMENT_ROOT /var/www/webroot

RUN apt-get update \
  && php -r "copy('https://getcomposer.org/download/$composer_ver/composer.phar', '$composer_path');" \
  && chmod 755 $composer_path \
  && php -r "if (hash_file('sha256', '$composer_path') !== '$composer_hash') { \
          echo '!!! Failed to install Composer !!!'; \
          unlink('$composer_path'); \
      } \
      echo PHP_EOL;" \
  && apt-get install -y  \
    vim \
    unzip \
    libicu-dev \
    libzip-dev \
    libonig-dev \
    libfreetype6-dev \
    libjpeg62-turbo-dev \
    libpng-dev \
    libjpeg-dev \
    sendmail \
    sendmail-cf \
    mailutils \
  && docker-php-ext-install \
    intl \
    pdo_mysql \
    zip \
    gd \
  && a2enmod rewrite

RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf

my.cnf

  • 適宜設定する(特別何もてないので割愛)

アプリケーション側

  • Mailpit に送る設定のみ変更。
  • 注意点として、portは1025(FORWARD_MAILPIT_PORTで指定したポート番号ではない)
app_local.php
    'EmailTransport' => [
        'default' => [
            'className' => 'Smtp',
            'host' => 'mailpit',
            'port' => 1025,
            'username' => null,
            'password' => null,
        ],
    ],

苦情・感想

  • アプリケーションが特定のPHP拡張に依存してる場合はcomposer.json に記載しておいてほしい(マナー)
  • というか、最初からDockerで環境建てて、リポジトリにdocker-compose.yml 入れといてほしい
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?