PHP のフレームワークで人気の Laravel を使うために、PHP や Web サーバー、データベースを一つ一つインストールするのが大変なので、これまた最近人気の Docker + Laradock を利用して Lavavel 5.4 の環境を作りました。
Docker のインストール
Docker は Docker 公式サイトからインストーラーをダウンロードして、簡単にインストールできます。
Laradock のダウンロード (clone)
Laradock の GitHub ページから Zip ファイルをダウンロードして展開するか、git コマンドで clone をします。
$ git clone https://github.com/Laradock/laradock.git
Laradock 環境設定ファイルの作成
ダウンロードした Laradock のフォルダーに移動します。
$ cd laradock
環境設定のサンプルファイルをコピーして、環境設定ファイルを作成します。
$ cp env-example .env
Laradock の workspace コンテナの作成と起動
docker-compose up コマンドで workspace コンテナの作成と起動をします。
$ docker-compose up -d workspace
Creating laradock_applications_1
Creating laradock_workspace_1
Laravel のプロジェクトの作成
Laradock の workspace コンテナに入ります。
$ docker-compose exec workspace bash
コンテナ内で、composer を使って Laravel のプロジェクトを作成します。
# composer create-project laravel/laravel プロジェクト名
workspace コンテナから出ます。
# exit
Laradock のコンテナの停止
起動しているコンテナを停止するには、docker-compose stop コマンドを使います。
$ docker-compose stop
Stopping laradock_workspace_1 ... done
Laradock のウェブサーバーとデータベースコンテナの作成と起動
docker-compose up コマンドで使いたいウェブサーバーやデータベースなどのコンテナを指定してコンテナの作成と起動をします。例えば、ウェブサーバーに Apache 2、データベースに MySQL を使うときは、次の通りです。
$ docker-compose up -d apache2 mysql
Creating laradock_applications_1
Creating laradock_mysql_1
Creating laradock_workspace_1
Creating laradock_php-fpm_1
Creating laradock_apache2_1
(ウェブサーバーに Nginx、データベースに MariaDB を使うときは、docker-compose up -d nginx mariadb
になります。)
docker-compose ps コマンドでコンテナの起動状況を表示できます。
$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------
laradock_apache2_1 /opt/docker/bin/entrypoint ... Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
laradock_applications_1 /true Exit 0
laradock_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp
laradock_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp
laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp
docker-compose up コマンドで指定したサーバー以外にも、Laravel で必要な php-fpm コンテナも自動的に起動していることがわかります。
Laravel 環境設定ファイルの編集
作成した Laravel プロジェクトのフォルダーに移動して、環境設定ファイル .env の APP_NAME
をアプリケーション名に、DB_HOST
を mysql
(MariaDB の場合は mariadb
) に変更します。
APP_NAME=アプリケーション名
...
DB_HOST=mysql
...
バージョン 5.7.6 以前の MySQL やバージョン 10.2.1 以前の MariaDB を使う場合
MySQL, MariaDB を使う場合、Laravel 5.4 から文字セットが utf8mb4 になっているので、カラムの型に string を指定して、ユニーク制約やプライマリーキーを設定すると、文字列の長すぎて次のエラーが出てしまいます。
[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was t
oo long; max key length is 767 bytes (SQL: ...)
[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was t
oo long; max key length is 767 bytes
そこで、AppServiceProvider でデフォルトの文字列長を修正します。app/Providers/AppServiceProvider.php ファイルを開いて、boot 関数に次のように追記します。
use Illuminate\Support\Facades\Schema;
...
public function boot()
{
Schema::defaultStringLength(191);
}
...
Laravel のインストール完了
ブラウザーで http://localhost にアクセスして、Laravel と表示されることが確認できれば、インストール完了です。