2022/02/26
前回、DockerでNginxを使ってWebページを表示させました。
今回は、Docker を使ってLaravel の環境構築をします。
演習
Laradock を使って、Laravelの開発環境を構築します。
目的
- Laravelのスタートページを表示
- DBの設定⇒マイグレーションの実行
- PhpMyAdminの画面表示
前提条件
1.Gitが使える環境になっていること
2.Dockerが使える環境になっていること
仕様
- プロジェクト名:laravel_app
- 構築する環境:PHP 7.3/MySQL 5.7/Apache 2
- Laravel 6.10
laravel_app(開発環境用リポジトリ)
└ laradock/(laradockリポジトリ)
└ src/(laravelのソースリポジトリ)
コマンド実行結果
基本、作業は Git Bash でコマンドを実行していきます。
Git Bash は Git for Windows (※Windowsユーザー)をインストールするとついてきます。(※下のスクショではlaravel 6.5 になってます。)
手順
1.作業ディレクトリの作成
$ mkdir laravel_app
$ cd laravel_app
$ mkdir src
srcディレクトリ
は Laravel の格納場所になります。
2.Laradockをダウンロード(git submodule)
外部のリポジトリ(Laradock)を現在のプロジェクトに追加するために、git submodule
コマンドを使います。
# git moduleでLaradockを取り込むためにリポジトリを作成
$ git init
# git ignoreでphpstormの設定ファイル(.idea)を消しておく
$ vi .gitignore
# プロジェクト(laravel_app)にサブモジュール(Laradock)を追加
$ git submodule add https://github.com/laradock/laradock.git
ディレクトリ構成は以下のようになります。
3.設定ファイルを編集
ダウンロードしたlaradockディレクトリに移動してenv-example
をコピーして.env
を作成します。
$ cd laradock
$ cp env-example .env
次に先ほど作成した Laradock の設定ファイル(.envファイル)を編集します。
エディタによると Shift-JIS で開いてそのまま保存するので注意!
laravelの格納場所を設定
// 変更前
APP_CODE_PATH_HOST=../
// 変更後
APP_CODE_PATH_HOST=../src/
PHPのバージョンを設定
PHPのバージョンはデフォルトのままにしました。
流石にPHP5.6以下は選べないようになっています。
### PHP Version ###########################################
# Select a PHP version of the Workspace and PHP-FPM containers (Does not apply to HHVM).
# Accepted values: 7.4 - 7.3 - 7.2 - 7.1 - 7.0 - 5.6
PHP_VERSION=7.3
MySQLのバージョンを設定
MySQL5.8系から認証が変わりました。Laradockのmysqlディレクトリの設定を変更しないと、PHPからコネクト(マイグレーション)するときにエラーになります。
MySQL5.8である必要がない方は5.7でやると "すんなり" といきます。
// 変更前
MYSQL_VERSION=latest
// 変更後
MYSQL_VERSION=5.7
4.ApacheとMySQLのコンテナの起動
ApacheとMySQLのコンテナを作成&起動します。
Nginxを使いたい場合はapache2をnginxに置き換えるだけでOK。
// Dockerコマンドと同じく-dオプションはバックグランドで実行(デタッチモード)
$ docker-compose up -d apache2 mysql php-fpm workspace
// コマンドを短くしたいなら下記でもOK。
// docker-compose.yml の apache2 の項目で依存関係があるコンテナが指定されているため、一緒に立ち上がる
$ docker-compose up -d apache2 mysql
作業ディレクトリ(C:\プロジェクト名\laradoc)に移動していないとdocker-composerコマンドが使えないので注意!
docker-compose up
コマンド 一発でコンテナが全部動くようにすることができるコマンドです。image名とか、開けるポートとかビルドするDockerfileのパスは、まとめてdocker-compose.ymlに書きます。
docker-compose 基本コマンド
コマンド | 説明 |
---|---|
docker-compose ps | コンテナの一覧 |
docker-compose images | イメージの一覧 |
docker-compose build | サービスのimageをビルド |
docker-compose restart | サービスを再起動 |
docker-compose run |
サービスを起動 (※-dオプションでバックグランドで起動) |
docker-compose up | コンテナの作成と起動 |
docker-compose exec | サービスに対してコマンドを実行 |
docker-compose logs | サービスのログを出力 |
docker-compose stop | サービスを停止させる |
docker-compose rm | docker-compose.ymlにかかれているコンテナを削除 |
docker-compose down | コンテナを停止&削除 |
5.Workspaceコンテナの起動
Laravel本体のインストールは composer で行います。
composerや必要なライブラリが揃った workspaceコンテナ
に入って行います。
まずは、workspaceコンテナを起動。
// コンテナを作成&起動(※-dオプションでデタッチモード)
$ docker-compose up -d workspace
次に作成されたworkspaceコンテナに入ります。
$ winpty docker-compose exec workspace bash
Git Bashで execコマンド
を実行するとエラーが表示されます。この場合、winpty
をコマンドの頭につけると上手くいきます。
6.Laravelのインストール
workspaceコンテナ内にはcomposerはすでにインストールされています。
composerコマンドでlaravelをインストールします。
// -prefer-distオプション → zipでダウンロード。
[root@7e68a8b32e2a] composer create-project --prefer-dist laravel/laravel ./
7.スタートページの表示
ブラウザを開いて http://localhost/public にアクセスします。
以下のようにLaravelのスタートページが表示されれば第一段階はOK。
# Laravelプロジェクトルートに移動
[root@example ~]# cd /var/www/
# 権限変更
[root@example ~]# chmod 775 -R storage/
# 775でも権限エラーが出る場合
[root@example ~]# chmod 777 -R storage/
8.Laravelのデータベース設定
Laradockディレクトリにある.envファイルにmysqlの設定がかかれているのでそれを参考にします。
上記の項目を先ほどインストールしたLaravelの.envファイルに設定します。
:
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret
:
9.マイグレーション
laravelの設定ファイルを変更したらマイグレーションを実行。
[root@7e68a8b32e2a] php artisan migrate
10.PhpMyAdminコンテナの起動
exitコマンドでworkspaceコンテナを抜けて phpmyadminコンテナを作成&起動します。
$ docker-compose up -d phpmyadmin
11.データベースの確認
ブラウザから「http://localhost:8080」にアクセスして、以下のようにPhpMyAdminのログイン画面が表示されていればOKです。
2022 年 2 月の時点では PhpMyAdmin のポート番号が 8081 になっているそうです。
その場合は「http://localhost:8081」にアクセスしてください。
ユーザー名:default
パスワード:secret
でログインできます。
マイグレーションしたテーブルが作成されているか確認してみましょう。
12.URLからpublicを消す
Laravelをインストールしてプロジェクトを作成するとURLは https://example.com/public
となってしまいます。
publicを消すには、基本的にはpublicフォルダーの中身をプロジェクトのルートに持ってきてindex.phpを編集します。
しかし、実は上記以外にもhtaccessだけでも可能です。
liaotzukai/Php laravel 5.5 project .htaccess file
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]
RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
</IfModule>
こちらの.htaccessファイルをlaravelのプロジェクトのルートディレクトリに配置すればOKです。
https://example.com
にアクセスした時にドキュメントルートを設定しなくてもきれいなURL(※publicがいらない)でアクセス可能になります。
以上です。
自宅ではじめるDocker入門
Docker関連の数ある本でも、図や丁寧な解説で「わかりやすい」と評判がいい本です。コマンドを叩きながら、Dockerにおける「イメージ」「コンテナ」が理解できます。まだ、Kindle版が出てないのは惜しいですが、Docker入門としておススメの1冊です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。