26
22

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

Laradock + nginx + MySQL + phpMyAdmin => macOS

Last updated at Posted at 2018-07-20

#はじめに
qiitaの他の方々がすでに書かれていたことをもとに、自分の環境で動いた手順をまとめました。
何かとお役に立てたら幸いです。

  • Docker version 18.03.1-ce, build 9ee9f40
  • docker-compose version 1.21.1, build 5a3f1a3
  • すでにdocker、composerはインストールされた状態

##Laradockのインストール

作業するディレクトリ作成&移動
$ mkdir laradock_test && cd laradock_test
Laradockのインストール
$ git clone https://github.com/Laradock/laradock.git
laradockディレクトリへ移動
$ cd laradock
テンプレートから.envファイル作成
$ cp env-example .env

.envは後ほど変更するときに使います。

##コンテナを起動

コンテナの起動
$ docker-compose up -d nginx mysql phpmyadmin workspace
起動しているコンテナを表示
$ docker-compose ps
           Name                          Command              State                     Ports
----------------------------------------------------------------------------------------------------------------
laradock_mysql_1              docker-entrypoint.sh mysqld     Up      0.0.0.0:3306->3306/tcp
laradock_nginx_1              nginx                           Up      0.0.0.0:443->443/tcp, 0.0.0.0:8880->80/tcp
laradock_php-fpm_1            docker-php-entrypoint php-fpm   Up      9000/tcp
laradock_phpmyadmin_1         /run.sh supervisord -n          Up      0.0.0.0:8080->80/tcp, 9000/tcp
laradock_workspace_1          /sbin/my_init                   Up      0.0.0.0:2222->22/tcp

docker psでも見れますが、もうちょっと簡潔に見せるためにdocker-compose psで確認します。

##コンテナに入る

基本的なコンテナに入る方法
ex)$ docker-compose exec workspace bash

ただ、上記のままだとコンテナの中にrootユーザーとして入ることになり、composerの実行時に「rootユーザーでは実行しないように」と警告が表示されるます。
なので、--user オプションを laradock で指定してログインします。

user指定でworkspaceコンテナに入る
$ docker-compose exec --user=laradock workspace bash

##Laravel新規作成

laravelの開発に必要なものがworkspaceコンテナに用意されているため、workspace内で作業をすれば問題なし。

プロジェクトの作成
$ composer create-project --prefer-dist laravel/laravel myproject

しばらくするとmyprojectがlaradockと同階層に生成されます。

生成されたプロジェクトの階層
drwxr-xr-x    5 kamokamo  staff   160  7 18 23:06 .
drwxr-xr-x@ 131 kamokamo  staff  4192  7 18 23:29 ..
drwxr-xr-x   62 kamokamo  staff  1984  7 18 23:29 laradock
drwxr-xr-x   24 kamokamo  staff   768  7 18 19:09 myproject

この状態では、laradockのworkspace(laradock_test/laradock/workspace)でアプリケーションを生成したのに、そのディレクトリはlaradockが置かれている階層(laradock_test/myproject/)と同じパスになりました。

##アプリケーションのパスを変更

このままではworkspaceコンテナに入る度にmyprojectへ移動しないと行けないので、パスを変更します。

workspaceから出て.envを修正
$ exit;
$ vi .env
- APP_CODE_PATH_HOST=../
+ APP_CODE_PATH_HOST=../myproject/

また、他の設定も変更する必要があれば、今のうちに変えておきます。
自分の場合、

  • すでに使わ荒れているポートがある
  • MySQLの設定がうまく行っていないところ

という問題があったので以下の変更をしました。

変更事項
(user配下の~/.laradock/data/mysqlが永続化されたので作業するディレクトリ内へ変更)
- DATA_PATH_HOST=~/.laradock/data
+ DATA_PATH_HOST=.laradock/data/

(macのApacheが利用するポートと被って、エラーの可能性があったため)
- NGINX_HOST_HTTP_PORT=80
+ NGINX_HOST_HTTP_PORT=8880

(mysqlのmigrate時にエラーが出たので事前に変更)
- MYSQL_VERSION=latest
- MYSQL_DATABASE=default
- MYSQL_USER=default
+ MYSQL_VERSION=5.7
+ MYSQL_DATABASE=laradock
+ MYSQL_USER=laradock

##.envの変更をコンテナに反映

コンテナの再起動
$ docker-compose stop
$ docker-compose up -d nginx mysql phpmyadmin workspace

これでブラウザにlocalhost:8880でアクセスすると下記のように表示されます。
スクリーンショット 2018-07-20 11.23.17.png

##DB接続の確認

mysqlに接続
$ docker-compose exec mysql mysql -uroot -proot
mysql>

接続が確認できたら、今度はlaradockではなくmyprojectの方にある.envを修正します。

mysqlに接続
$ exit;
$ vi ../myproject/.env

laradockで変更したmysqlの設定に変えます。

変更事項
- DB_HOST=127.0.0.1
- DB_DATABASE=homestead
- DB_USERNAME=homestead
+ DB_HOST=mysql
+ DB_DATABASE=laradock
+ DB_USERNAME=laradock

そして、databaseは先に作っておく必要があるみたいなのでmigrateをします。
ただ、このままだと以下のエラーが出たので対策をしてからします。

SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes (SQL: alter table users add unique users_email_unique(email))

変更事項
$ exit;
$ vi ../myproject/app/Providers/AppServiceProvider.php

︙
  use Illuminate\Support\ServiceProvider;
+ use Illuminate\Support\Facades\Schema;


public function boot()
    {
-        //
+        Schema::defaultStringLength(191);
    }

これでmigrateの準備ができたので実行します。

migrate実行と結果
$ exit;
$ docker-compose exec --user=laradock workspace php artisan migrate:install
$ Migration table created successfully.

$ docker-compose exec --user=laradock workspace php artisan migrate
$ Migrating: 2014_10_12_000000_create_users_table
$ Migrated:  2014_10_12_000000_create_users_table
$ Migrating: 2014_10_12_100000_create_password_resets_table
$ Migrated:  2014_10_12_100000_create_password_resets_table

テーブルも生成されたので、確認をして見ると、

migrate実行と結果
$ docker-compose exec mysql mysql -uroot -proot laradock
mysql> show tables;

+--------------------+
| Tables_in_laradock |
+--------------------+
| migrations         |
| password_resets    |
| users              |
+--------------------+
3 rows in set (0.00 sec)

ちゃんと作られていました。

##書き込みのパーミッション変更
最後にwebサーバーから書き込みできるようにするため、パーミッションの設定を変更します。

パーミッション変更
$ exit;
$ docker-compose exec --user=laradock workspace
$ chmod 766 storage
$ chmod 766 bootstrap/cache

これで権限が変わったので、最後はコンテナを再起動します。

再起動
$ exit;
$ docker-compose restart

お疲れ様です。
長くなりましたが、これで今回の設定は終わりです。

##参考
Laradockを使ったlaravel開発環境
Laradockを使ったLaravel開発環境構築
Laradockを使ってLaravel環境を5分で構築する(つもりが若干躓いた)
LaradockでMySQLがどうしても立ち上がらない人あつまれー!
はじめての Laradock
Syntax error or access violation: 1071 Specified key was too long

26
22
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
26
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?