1
1

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 3 years have passed since last update.

CakePHP3のCMSチュートリアルを速攻試せる環境をDockerで立ち上げる

Last updated at Posted at 2020-06-13

Overview

CakePHPのドキュメントにあるコンテンツ管理チュートリアル - 3.8
極力単純にDocker上で動かしつつ実行できる環境を作った。

別記事を書くためにCakeが動作するプロジェクトのベースが欲しかったので
自分が作成したCakeプロジェクトで利用しているファイルをシュリンクして作成した。

リポジトリ:https://github.com/stlwolf/cake3_cms_in_docker

この記事&リポジトリが役に立ちそうなケース

CakeをDocker上で実行するための環境作りについての情報はチラホラあるけど、
とりあえずNginxとか考えずにチュートリアルを写経しながら動作確認してみたいんじゃ〜
って人がいれば使えるんじゃないかと。

注:上記のユースケースから、開発環境や本番環境での利用に耐える実行環境ではありません。
  チュートリアルの記事通り、PHPのビルトインサーバーを利用します。

Environment

  • ホスト
    • macOS Catalina 10.15.4
    • CakePHP 3.7
  • コンテナ
    • PHP 7.3.18
    • mysqld Ver 5.7.27

Usage

  • composerライブラリのセットアップ

    • ./operation.sh setup
  • コンテナ&cakeサーバー起動

    • ./operation.sh
      operation.shはフォアグラウンドで実行されるので、 コンテナを停止する時はCtrl+Cで行ってください)
  • 無事起動したらブラウザで http://localhost:8765/ にアクセスすれば下記のページが表示されるはず

Screen Shot 2020-06-13 at 4.01.05.png
  • ここまででCMSチュートリアルの「データベース設定」の項目まで完了しているので、
    あとは「最初のモデルの作成」以降のチュートリアルを試すことができます。
    チュートリアルを写経したり、コードを追加して色々いじってみましょう。

軽い内容解説

├── docker
│   └── containers                  # コンテナ毎のDockerfileなどを配置
│       ├── common.env              # コンテナ共通の設定
│       ├── mysql                   # MySQLコンテナ 
│       │   ├── conf
│       │   │   └── my.cnf
│       │   └── init
│       │       └── 1_init_ddl.sql  # 「CMS チュートリアル - データベース作成¶」に記述があるSQL
│       └── php-fpm                 # bin/cake server を実行するPHPコンテナ
│           └── Dockerfile         
├── docker-compose.yml
├── operation.sh                    # 利用するコマンドをまとめた簡易スクリプト

docker/containers

各コンテナに関するファイルを配置してある。

common.env

phpコンテナとmysqlコンテナで共通で使う設定を抜き出してある。
タイムゾーンがJSTになってるのはベースにしたアーキテクチャがJSTで決め打ってた為。

mysql

MySQLを動作させる為の設定ファイルを配置。

init/1_init_ddl.sql

コンテナ作成時に実行されるSQLファイルを配置。
mysqlコンテナではdocker-entrypoint-initdb.dにマウントされる。
下記のSQLと、チュートリアルのこの箇所のSQLを記述してある。

`GRANT ALL ON *.* TO 'cakephp'@'%';` # cakeからアクセスするユーザを作成
`CREATE DATABASE cake_cms;`          # DB作成

docker-entrypoint-initdb.dについては、Docker Hubを参照。

php-fpm

PHPを実行してcakeサーバーを実行するためのコンテナ。
特にwebサーバーと連携させてないのでphp-fpmタグである必要はないけど、
ベースにしたアーキテクチャがphp-fpmnginx連携のものだったため、そのまま流用。

Dockerfile

CakePHPを動作させるのに必要なライブラリをインストールしてある。
必要なライブラリはインストール - 3.8を参照のこと。
コンテナ起動時に以下を実行して、ビルトインサーバーを起動させる。
CMD ["bin/cake", "server", "-H", "0.0.0.0"]

docker-compose.yml

特別にテクニカルなことはしていない。(と思う)
ローカルにcomposerをインストールしないで、コンテナ上で実行したかったので
下記の部分でコンテナイメージの作成だけ行っている。

  composer:
    image: composer
    volumes:
      - ./:/app:cached
    working_dir: /app

operation.sh

よく実行するDockerコマンドをスクリプトにした。
composerコマンドをcomposerコンテナ上で実行するために、以下のコマンドを利用する。

docker-compose run composer install --ignore-platform-reqs --no-interaction

[オプション説明]
--ignore-platform-req PHPで依存関係の解消時にホスト側の設定をみてエラーになるのを防ぐ    

composerコマンドのオプションについては Command-line interface / Commands - Composer を参照のこと。

config/app.php

  • ほぼチュートリアル「データベースの設定」にある内容通りに設定してあるけど
    'host'の設定値だけはコンテナで稼働しているmysqldに接続するために、mysqlに変更してある。(ドキュメントではlocalhost
     'Datasources' => [
         'default' => [
             'className' => 'Cake\Database\Connection',
             'driver' => 'Cake\Database\Driver\Mysql',
             'persistent' => false,
             'host' => 'mysql', # この値はphpfpmコンテナのdepends_onの値に対応させている
             'username' => 'cakephp',
             'password' => 'AngelF00dC4k3~',
             'database' => 'cake_cms',
             'encoding' => 'utf8mb4',
             'timezone' => 'UTC',
             'cacheMetadata' => true,
         ], 
1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?