#はじめに
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
$ git clone https://github.com/Laradock/laradock.git
$ cd laradock
$ 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
で指定してログインします。
$ 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
へ移動しないと行けないので、パスを変更します。
$ 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でアクセスすると下記のように表示されます。
##DB接続の確認
$ docker-compose exec mysql mysql -uroot -proot
mysql>
接続が確認できたら、今度はlaradock
ではなくmyproject
の方にある.env
を修正します。
$ 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
の準備ができたので実行します。
$ 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
テーブルも生成されたので、確認をして見ると、
$ 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