副業におすすめなサイトを見る→

【Docker】cakePHP4の環境構築を解説

アプリリリースのお知らせ

予定を探すアプリyoteipickerをリリースしました。

アプリの利用用途:暇だから何か予定入れたいけど今週の土日は何しようかな〜?ってときに使えるアプリです。

この記事では、dockerでcakePHP4の環境構築の手順を解説します。

今回構築する環境は以下です。

PHP 8.1
mysql 8.0
cakePHP4.3.6
apache2.4.52
composer1.10.13
phpmyadmin

この記事では、dcakePHP4環境をdockerで構築し、cakePHP4の

  • 初期画面の表示
  • 最初の設定
  • DBへの接続
  • テストでマイグレーション作成してテーブルを作成

まで解説します。

まずは作業するディレクトリを作成しましょう。

どこでもいいですが、自分の環境(Mac)では、デスクトップにcakephpディレクトリを作成し、その中にcakephp4_testsというディレクトリを作成しています。

cakephp4_tests % pwd
.../Desktop/cakephp/cakephp4_tests

cakephp4_tests %

まずは事前準備として、dockerDesktopをインストールしておきましょう。

>>ココナラと似てるおすすめの副業サイトを確認する

>>リモートワークもあるおすすめの転職サイトを確認する

休日で空いた時間の暇つぶしを探せるアプリを公開しています。

Contents

【docker×cakePHP4】ファイル構成

作成するファイル構成は以下のようになっています。

ファイルを用意しましょう。

├── docker
│   ├── mysql
│   │   └── my.cnf
│   └── php
│       └── Dockerfile
├── .env
├── .gitignore
└── docker-compose.yml

【docker×cakePHP4】PHP8とapacheのDockerfile

まずは、PHP8とapacheを導入するために、docker > php > Dockerfileに内容を書き出していきます。

FROM php:8.1-apache

# Composer のバージョン と ハッシュ値
ARG composer_ver=1.10.13
ARG composer_hash=5ca7445cfd48dd27c5a84aa005a47b4d9fd91132313830609875df3a6973708f

# Composer の保存先
ARG composer_path=/usr/local/bin/composer

RUN apt-get update \
  # Composer インストール
  && 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 \
  && apt-get install -y unzip \
  && apt-get install -y libicu-dev \
  && docker-php-ext-install intl \
  && docker-php-ext-install pdo_mysql \
  && a2enmod rewrite

apt-get install -y unzipやdocker-php-ext-install intlはcakephp4で必要なので、こちら忘れずに記載しましょう。

【docker×cakePHP4】my.cnf-mysqlの設定

mysqlの設定をするために、docker > mysql > my.cnfに以下のように書きます。

# MySQLサーバーへの設定
[mysqld]
# 文字コード/照合順序の設定
character-set-server = utf8mb4
collation-server = utf8mb4_bin

# タイムゾーンの設定
default-time-zone = SYSTEM
log_timestamps = SYSTEM

# mysqlオプションの設定
[mysql]
# 文字コードの設定
default-character-set = utf8mb4

# mysqlクライアントツールの設定
[client]
# 文字コードの設定
default-character-set = utf8mb4

【docker×cakePHP4】docker-compose.yml

dockerコンテナの設計書でもあるdocker-compose.ymlを書いていきます。

version: '3'
services:
  php:
    build:
      context: ./docker/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/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

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=db
      - PMA_USER=${PMA_USER}
      - PMA_PASSWORD=${PMA_PASS}
    links:
      - db
    ports:
      - ${PMA_PORT}:80
    volumes:
      - ./docker/phpmyadmin/sessions:/sessions

mysql5.7とmysql8は認証方法が異なります。なので、mysql8を導入する際は、docker-compose.ymlにもあるように、
command: –default-authentication-plugin=mysql_native_password
を忘れずに記載しておきましょう。

MYSQL_DATABASE=${DB_NAME}のように、${DB_NAME}が気になったかと思いますがこれは環境変数です。
DB名やパスワードなどの知られたくない情報は直接記載せずに、${DB_NAME}などとし、.envファイルに書いていきます。

【docker×cakePHP4】.envに環境変数を書く

MYSQL_DATABASE=${DB_NAME}のように環境変数を使っているので、.envに対応する環境変数を書きましょう。

${WEB_PORT}
${DB_NAME}
${DB_USER}
${DB_PASS}
${PMA_USER}
${PMA_PASS}
${PMA_PORT}

に対応する環境変数を.envに書く必要があります。

書き方は、以下のように${WEB_PORT}ならWEB_PORT、${DB_NAME}ならDB_NAMEとすればOKです。

WEB_PORT=
DB_NAME=
DB_USER=
DB_PASS=
DB_PORT=

PMA_USER=
PMA_PASS=
PMA_PORT=

ユーザー名やパスワードはそれぞれで設定してください。

WEB_PORT=9811
DB_NAME=cakephp4_tests
DB_USER=ユーザー名を設定する(ex.cake)
DB_PASS=パスワードを設定する(ex.password)
DB_PORT=9821

PMA_USER=ユーザー名を設定する
PMA_PASS=パスワードを設定する
PMA_PORT=9831

.envの記載ができました。

ただ、このままでは.envがgit管理されてしまいソースが上がってしまうので、git管理から外します。

※ついでにdockerを立ち上げるにもphpmyadminのsessionのファイルができるのでそちらも外しておきます。

.env
docker/phpmyadmin/sessions

【docker×cakePHP4】コンテナを立ち上げる

dockerファイルの記載ができたので、dockerコンテナを立ち上げていきます。

まずは、そもそもdocker-compose.ymlをもとにコンテナをビルドする必要があります。

cakephp4_tests % docker-compose up -d
...
Creating cakephp4_tests_db_1 ... done
Creating cakephp4_tests_php_1        ... done
Creating cakephp4_tests_phpmyadmin_1 ... done

上記のように立ち上がりました。

dockerDesktopも確認すると、こちらでも問題なく立ち上がっています。

現段階では、http://localhost:9831にアクセスすると、phpmyadminにログインできることが確認できます。

【docker×cakePHP4】cakePHP4をインストールする

cakePHP4のインストールをしていきます。

そのために、PHPコンテナに入り、そこでcakePHP4のインストールを実行しましょう。

// コンテナの情報を見る
cakephp4_tests % docker ps

// CONTAINERIDやIMAGEやNAMEなどのコンテナ情報が出てきくるので、
// コンテナにはdocker exec -it CONTAINERIDまたはコンテナ名 bashで入れる
cakephp4_tests % docker exec -it cakephp4_tests_php_1 bash
:/var/www/html# 

// var/wwwに一つ上の階層にするのは後で説明します。
:/var/www/html# cd ../
root@95f71b8688e6:/var/www# 

コンテナにログインしたことで、自動的に空のhtmlファイルが作成されていると思います。

├── docker
│   ├── mysql
│   │   └── my.cnf
│   ├── php
│   │   └── Dockerfile
│   └── phpmyadmin
│       └── sessions
├──html
├──.env
├──.gitignore
└── docker-compose.yml

/var/wwwでcakephp4のインストールを実行します。cakephp/app:4.*の後にhtmlと名前を指定することで、先ほど自動的に作られたhtml配下にcakePHP4のファイルたちがインストールされます。

※cakePHP4のインストールは5〜10分ぐらいかかります。

:/var/www# composer create-project --prefer-dist cakephp/app:4.* html
...(途中で以下のようにパーミッションを聞かれるので、Yにしてenterボタン)
Set Folder Permissions ? (Default to Y) [Y,n]? Y
...
Updated Security.salt value in config/app_local.php
/var/www# 

無事にインストールができると上記のようになります。

html配下にcakePHP4のソースたちが入ってきます。

【docker×cakePHP4】cakePHP4の設定

インストールもできたので、初期画面の表示もできるようになります。

http://localhost:9811

にアクセスすると、cakePHP4の初期画面が表示されます。

次に、cakePHP4の初期設定、DB接続、マイグレーションでテーブル作成までしていきます。

cakePHP4の初期設定

初期設定といっても、タイムゾーンの変更ぐらいです。

    'App' => [
        'namespace' => 'App',
        'encoding' => env('APP_ENCODING', 'UTF-8'),
        'defaultLocale' => env('APP_DEFAULT_LOCALE', 'ja_JP'),
        'defaultTimezone' => env('APP_DEFAULT_TIMEZONE', 'Asia/Tokyo'),

デフォルトではLocale(場所)とTimezone(時間)がアメリカになっているので、日本に変更しました。

cakePHP4のDB接続

http://localhost:9811にアクセスし、cakePHP4の初期画面の下の方にデータベースとの接続情報があります。

現在は以下のように何も設定していないので、not able to connectとなっており、接続できていません。

DB接続するには、app_local.phpを編集します。

    'Datasources' => [
        'default' => [
            'host' => 'db',
            /*
             * CakePHP will use the default DB port based on the driver selected
             * MySQL on MAMP uses port 8889, MAMP users will want to uncomment
             * the following line and set the port accordingly
             */
            //'port' => 'non_standard_port_number',

            'username' => '.envに書いたユーザー名',
            'password' => '.envに書いたパスワード',

            'database' => 'cakephp4_tests',

DB接続できました。

cakePHP4でマイグレーションを作成し、テーブルを試しに作る

最後にマイグレーションファイルを作って、テーブルができるか確認します。

cakePHP4では、マイグレーションやモデル、コントローラーの作成は、bin/cakeコマンドが使えるのでこちらを活用しましょう。

bin/cakeコマンドが実行できるのは、PHPコンテナのcakePHP4がインストールされている箇所です。
※/var/www/htmlになります。

コンテナの入り方は、すでに先ほど解説済みなので、そちらを参考にしてください。

// ここでbin/cakeコマンドが打てる
/var/www/html# 

マイグレーションファイルを作成します。

root@95f71b8688e6:/var/www/html# bin/cake bake migration CreateUsers

config > Migrations配下にマイグレーションファイルが作成されます。

<?php
declare(strict_types=1);

use Migrations\AbstractMigration;

class CreateUsers extends AbstractMigration
{
    /**
     * Change Method.
     *
     * More information on this method is available here:
     * https://book.cakephp.org/phinx/0/en/migrations.html#the-change-method
     * @return void
     */
    public function change()
    {
        $table = $this->table('users');
        $table->addColumn('name', 'string', [
            'default' => null,
            'limit' => 255,
            'null' => true,
        ]);
        $table->create();
    }
}

ファイルの編集ができたので、実行します。

/var/www/html# bin/cake migrations migrate
using migration paths 
 - /var/www/html/config/Migrations
using seed paths 
 - /var/www/html/config/Seeds
using environment default
using adapter mysql
using database cakephp4_tests
ordering by creation time

 == 20220305034822 CreateUsers: migrating
 == 20220305034822 CreateUsers: migrated 0.1288s

All Done. Took 0.1981s

Dumps the current schema of the database to be used while baking a diff

using migration paths 
 - /var/www/html/config/Migrations
using seed paths 
 - /var/www/html/config/Seeds
Writing dump file `/var/www/html/config/Migrations/schema-dump-default.lock`...
Dump file `/var/www/html/config/Migrations/schema-dump-default.lock` was successfully written

実行が成功しました。

phpmyadminに接続(私の環境では、localhost:9831)し、usersテーブルが作成できているか確認します。

無事にテーブルも作成できていることが確認できました。

>>ココナラと似てるおすすめの副業サイトを確認する

>>リモートワークもあるおすすめの転職サイトを確認する

休日で空いた時間の暇つぶしを探せるアプリを公開しています。

スキルを売り買いするならココナラ

コメント

コメントする

CAPTCHA


Contents
閉じる