Devilboxを使いCodeIgniter4の開発環境を構築する

この記事は CodeIgniter Advent Calendar 2022 - Qiita の1日目です。まだ、空きがありますので、興味のある方は気軽に参加してください。

Devilboxを使うと、DockerでCodeIgniter4(3でもOK)の開発環境を簡単に構築できます。

Devilboxのメリット

Dockerでの開発環境の構築方法はいろいろなツールなどがありますが、Devilboxは基本的に docker-composer そのままです。 独自コマンドなどは必要ありません。

以下のようないろいろなサーバが一発で構築でき、phpMyAdminなどの管理ツールも含まれています。

  • MariaDB 10.6.7
  • PostgreSQL 14.2
  • Redis 6.2.7
  • Memcached 1.6.17
  • MongoDB 5.0.13

また、独自証明書のSSLサーバも含まれています。

それから、英語ですがドキュメントが充実しています。

動作確認環境

  • CodeIgniter 4.2.10
  • Devilbox v2.2.0 (2022-04-14)
  • Docker Desktop 4.14.1
  • macOS 10.15.7

Devilboxの動作には、Docker EngineとDocker Composeが必要です。 Dockerを起動した状態で以下の作業を行って下さい。

1. Devilboxのインストール

以下のコマンドを実行し、Devilboxをインストールします。

$ git clone https://github.com/cytopia/devilbox --depth=1

2. .envファイルの設定

.envファイルを作成します。

$ cd devilbox/
$ cp env-example .env

自分のユーザーIDとグループIDを調べます。

$ id -u
$ id -g

.envファイルに自分のIDを設定します。

--- env-example 2022-11-30 12:13:08.000000000 +0900
+++ .env    2022-11-30 12:16:03.000000000 +0900
@@ -132,8 +132,8 @@
 ###
 ### Type `id` on the terminal to find out your values
 ###
-NEW_UID=1000
-NEW_GID=1000
+NEW_UID=501
+NEW_GID=20


 ###

macOSなので、MOUNT_OPTIONSを設定します。

@@ -448,7 +448,7 @@
 ###
 ### MOUNT_OPTIONS=,z
 ###
-MOUNT_OPTIONS=
+MOUNT_OPTIONS=,cached


 ###

3. コンテナの起動

$ docker-compose up

4. Devilbox intranet

ブラウザで http://127.0.0.1/ にアクセスします。

以下のコンテナが動作していることが、わかります。

  • BIND 9.16.29
  • PHP 8.1.6
  • Nginx 1.20.2
  • MariaDB 10.6.7
  • PostgreSQL 14.2
  • Redis 6.2.7
  • Memcached 1.6.17
  • MongoDB 5.0.13

4. PHPコンテナに入る

付属のシェルスクリプトを起動して、コンテナに入ります。

$ ./shell.sh
------------------------------------------------------------------------------------------
                              _            _ _ _               
                             | |          (_) | |              
                           __| | _____   ___| | |__   _____  __
                          / _` |/ _ \ \ / / | | '_ \ / _ \ \/ /
                         | (_| |  __/\ V /| | | |_) | (_) >  < 
                          \__,_|\___| \_/ |_|_|_.__/ \___/_/\_\

                                  http://devilbox.org
                            https://devilbox.readthedocs.io



                                    Available Tools
          https://devilbox.readthedocs.io/en/latest/readings/available-tools.html

                           How to work inside this PHP container
 https://devilbox.readthedocs.io/en/latest/intermediate/work-inside-the-php-container.html



                    | Available Dirs   | Description                  |
                    |------------------|------------------------------|
                    | /shared/httpd    | Project base directory       |
                    | /shared/backups  | Backup directory             |
                    | /var/mail        | Email directory              |
                    | /var/log         | Log file directory           |

------------------------------------------------------------------------------------------

devilbox@php-8.1.6 in /shared/httpd $ 

5. CodeIgniter4プロジェクトの作成

まず、バーチャルホスト用のディレクトリ(my-ci)を作成します。

devilbox@php-8.1.6 in /shared/httpd $ mkdir my-ci

プロジェクト名(ci4app)を指定してCodeIgniter4のプロジェクトを作成します。

$ cd my-ci/
devilbox@php-8.1.6 in /shared/httpd/my-ci $ composer create-project codeigniter4/appstarter ci4app

ホストOS上では、devilbox/data/www/my-ci/ci4app/ にインストールされました。

ドキュメントルートにシンボリックリンクを張ります。

devilbox@php-8.1.6 in /shared/httpd/my-ci $ ln -s ci4app/public htdocs

5. DNSの設定

/etc/hosts に以下を追加します。

# devilbox
127.0.0.1 my-ci.loc

6. CodeIgniter4の設定

env をコピーして .env を作成し、変更します。

データベースへのアクセス情報などを設定します。

--- env 2022-10-31 09:26:15.000000000 +0900
+++ .env    2022-11-30 15:16:20.000000000 +0900
@@ -14,13 +14,13 @@
 # ENVIRONMENT
 #--------------------------------------------------------------------

-# CI_ENVIRONMENT = production
+CI_ENVIRONMENT = development

 #--------------------------------------------------------------------
 # APP
 #--------------------------------------------------------------------

-# app.baseURL = ''
+app.baseURL = 'http://my-ci.loc/'
 # If you have trouble with `.`, you could also use `_`.
 # app_baseURL = ''
 # app.forceGlobalSecureRequests = false
@@ -39,13 +39,13 @@
 # DATABASE
 #--------------------------------------------------------------------

-# database.default.hostname = localhost
-# database.default.database = ci4
-# database.default.username = root
-# database.default.password = root
-# database.default.DBDriver = MySQLi
-# database.default.DBPrefix =
-# database.default.port = 3306
+database.default.hostname = 127.0.0.1
+database.default.database = my_ci
+database.default.username = root
+database.default.password =
+database.default.DBDriver = MySQLi
+database.default.DBPrefix =
+database.default.port = 3306

 # database.tests.hostname = localhost
 # database.tests.database = ci4_test

その他の詳しい設定方法は、CodeIgniter 4.2のインストール方法【2022年最新版】を参照してください。

Welcomeページの確認

ブラウザで http://my-ci.loc/ にアクセスします。

Welcomeページが表示されました。

コンテナの起動

次回以降のコンテナの起動は、以下のコマンドを実行します。

$ docker-compose up -d

必要なコンテナだけを起動することもできます。

$ docker-compose up -d httpd php mysql

コンテナの停止

コンテナの停止は、以下のコマンドです。

$ docker-compose stop
$ docker-compose rm -f

この記事は CodeIgniter Advent Calendar 2022 - Qiita の1日目です。まだ、空きがありますので、興味のある方は気軽に参加してください。

参考

関連

Date: 2022/12/01

Tags: codeigniter, codeigniter4, docker