LaradockでLaravel-adminを立ち上げるまで 2018年12月版


はじめに

個人的にはPHPのWebアプリケーションFrameworkの中ではCakePHP が一番得意なんだけど最近若いヤングに大人気らしい Laravel も使えるようになっておいたほうがよさそうな気がしたので使ってみることにした。

で、実用的なScafforldっぽいものの構築はどういうふうにするのかしらといろいろ調べてみてこれが良さそうだなと思ったのが LaradockLaravel-admin 。Laravel 5.7から Laravel Nova という管理パッケージが公式になったが有料なので Laravel-admin にしといた。

Laradockを設定してコンテナを起動する

$ git clone https://github.com/Laradock/laradock.git
$ cd laradock

env-exampleをコピーして.envとしてテキストエディタで開く

$ cp env-example .env
$ vi .env

DATA_PATH_HOSTはmysqlなどのストレージのデータファイルの格納場所を示す。
デフォルトは ~/.laradock/data となっているが今回はあとで削除することを想定してLaradockのレポジトリ下に変更しておく

.env
# Choose storage path on your machine. For all storage systems
# DATA_PATH_HOST=~/.laradock/data
DATA_PATH_HOST=[YOUR WORKNG DIRECTORY]/laradock/.laradock/data

.env 内の MYSQL_VERSIONを`5.7とする。latestだと現状MySQL8が入るがPDOをはじめいろいろなものが8に追従できてない現状なので、無難に5.7を使うことにする

.env
# MYSQL_VERSION=latest
MYSQL_VERSION=5.7

さらに .env の末尾に以下の記述を追加して保存する

.env
DB_CONNECTION=mysql
DB_HOST=mysql
REDIS_HOST=redis
QUEUE_HOST=beanstalkd
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret

コンテナを起動する

$ docker-compose up -d nginx mysql phpmyadmin redis beanstalkd

各コンテナが正常に起動した

...
Creating laradock_redis_1            ... done
Creating laradock_mysql_1            ... done
Creating laradock_docker-in-docker_1 ... done
Creating laradock_workspace_1        ... done
Creating laradock_phpmyadmin_1       ... done
Creating laradock_php-fpm_1          ... done
Creating laradock_beanstalkd_1       ... done
Creating laradock_nginx_1            ... done

この時点で http://localhost にアクセスすると 404 Not Foundとなる。まだLaravelをセットアップしていないため

http://localhost:8080 にアクセスすると phpmyadmin が起動している。サーバmysql 、ユーザ名 root、 パスワード rootでログインできる

ログインすると default というスキーマが作成されている。これがLaravelが使うDBとなる

ちなみにmysqlを直接コマンド操作したい場合はmysqlコンテナにログオンして操作すればよい

$ docker exec -it laradock_mysql_1 bash
$ mysql -u root -p
Password: root

Laravelをセットアップする

Laravelのワークスペースとなるコンテナに、ユーザlaradockでログオンする。

$ docker exec -u laradock -it laradock_workspace_1 bash

ログオンディレクトリは /var/www でWebサーバのドキュメントルートになっている。ここにLaravelのプロジェクトを作成する。今回はプロジェクトを MyProject とする

$ composer create-project laravel/laravel MyProject

プロジェクトが作成できたことを確認する

$ cd MyProject
$ ls
app        composer.json  database      public     routes      tests
artisan    composer.lock  package.json  readme.md  server.php  vendor
bootstrap  config         phpunit.xml   resources  storage     webpack.mix.js

ストレージとキャッシュのディレクトリを書き込み可能にする

$ chmod 766 storage
$ chmod 766 bootstrap/cache

いったんコンテナからログオフする

$ exit

コンテナを停止させる

$ docker-compose stop

.envを開く

$ vi .env

APP_CODE_PATH_HOST../MyProject としてドキュメントルートが MyProjectを指すようにする

.env
# Point to the path of your applications code on your host
# APP_CODE_PATH_HOST=../
APP_CODE_PATH_HOST=../MyProject

コンテナを起動する

$ docker-compose up -d nginx mysql phpmyadmin redis beanstalkd

http://localhostにアクセスするとLaravelの初期画面が表示される

Laravel-admin をインストールする

公式 を参考にしながらやってみる

ワークスペースのコンテナにログオンする

$ docker exec -u laradock -it laradock_workspace_1 bash

以下を実行する

$ composer require encore/laravel-admin
$ artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"

プロジェクト内の .env を開く

$ vi .env

DB_HOST=mysqlDB_DATABASE=defaultDB_USERNAME=rootDB_PASSWORD=rootにそれぞれ変更する

.env
DB_CONNECTION=mysql
# DB_HOST=127.0.0.1
DB_HOST=mysql
DB_PORT=3306
# DB_DATABASE=homestead
DB_DATABASE=default
# DB_USERNAME=homestead
DB_USERNAME=root
DB_PASSWORD=root

インストールを実行する

$ artisan admin:install

config/filesystems.php を開く

$ vi config/filesystems.php

disks配列に下記のadminの設定を追加する。Adminダッシュボードでアップロードした画像等をパブリックアクセスできるようにするため。
https://github.com/z-song/laravel-admin/issues/1327#issuecomment-336821532

filesystems.php
    'disks' => [

        ...

    'admin' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ],


    ],

storageへのシンボリックリンクを作成する

$ artisan storage:link

http://localhost/admin/ にアクセスすると管理画面へのログイン画面となる。
Username: admin、Password: admin でログインする

ダッシュボードが表示される

感想

どちらもドキュメントみるかぎりでは簡単にできそうだったんだけど、意外とハマりどころが多かったので手順を記載しておいた。特にMySQL周りは最初latestでやっていていろんなエラーに悩まされた。まあ各コンテナの更新状況によっていろいろ動かないことが出てくるのはあるあるだし、Laravelも開発が活発なのでこのセットアップログもいつまで保つかわからない。なので2018年12月版としておいた。