LoginSignup
47
47

More than 3 years have passed since last update.

LaradockでLaravel環境構築【手順書】

Last updated at Posted at 2019-07-09

はじめに

LaradockでLaravel環境を作る手順書です。
単純に動かすだけの手順でなく、下記点を含んでいます。

  • Laradockで2つ目の環境を構築する時に困らないための設定事項
  • 設定しておくと開発時に多少楽になるための設定事項
  • 嵌った点の備忘録

前提環境

  • docker-composeが使用できること
  • ターミナルを使用できること
    • Windowsの場合gitbashやPowerShell推奨(command promptは見づらい・文字化けの危険があるため)
  • 海外のCDNサーバにブロックされていたりしないこと
    • 短期間に環境を作りまくったせいか一部サーバに一時的にブロックされたことがあります
    • この場合ネットワークを変えることで解決したりします(ポケットwifi等)
  • 2018年以前に取得したLaradockを使用しないこと
    • Laradockの使用しているdocker-compose.ymlがv2である可能性があります

完成形

サーバ構成

  • nginx
    • + php-fpm
  • mysql
  • redis
  • APサーバ(workspace)

ディレクトリ構成

Laradockとプロジェクトディレクトリ(laravel)を同階層に置く想定です。
(プロジェクトディレクトリ下にLaradockを置きたくないので、Laradockの設定を変える作業が入ります)

my_project
├── laravel
│   ├── app
│   ├── bootstrap
│   ├── config
│   └ ...
└── laradock
    ├── adminer
    ├── aerospike
    └ ...

手順

  1. Laradock取得
  2. Laradockの設定ファイル修正
  3. Laradockビルド・アクセス
  4. Laravelインストール・yarnインストール
  5. Laravel設定ファイル修正
  6. ブラウザアクセス

1.Laradock取得

適当な場所にプロジェクト用ディレクトリを作成し、Laradockをダウンロード

$ mkdir ~/my_project
$ cd ~/my_project
$ git clone https://github.com/laradock/laradock.git

2.Laradockの設定ファイル修正

  • 設定ファイルの作成
    • .env作成
      • サーバ構成の基本となるファイルです
    • createdb.sql作成
      • テーブル構築の初期設定をしてくれるファイルです
$ cd ./laradock
$ cp -a ./env-example ./.env
$ cp -a ./mysql/docker-entrypoint-initdb.d/createdb.sql.example ./mysql/docker-entrypoint-initdb.d/createdb.sql
  • 下記ファイルを修正
.env
//document rootをlaravelにすることで、以降/laravel/を省略
- APP_CODE_PATH_HOST=../
+ APP_CODE_PATH_HOST=../laravel/

- APP_CODE_PATH_CONTAINER=/var/www/
+ APP_CODE_PATH_CONTAINER=/var/www/laravel/

//mysql等のデータ本体の置き場所。これを修正しておかないと別プロジェクト作成時に競合する。
- DATA_PATH_HOST=~/.laradock/data
+ DATA_PATH_HOST=~/.laradock/my_project/data

//コンテナ区別用prefix。これを修正しておかないと別プロジェクト作成時に競合する。
- COMPOSE_PROJECT_NAME=laradock
+ COMPOSE_PROJECT_NAME=my_project-laradock

//任意のバージョンに変更
- PHP_VERSION=7.2
+ PHP_VERSION=7.3

//laravelがmysql8.0を使うにはユーザ設定に追加で修正が必要なため5系を指定
- MYSQL_VERSION=latest
+ MYSQL_VERSION=5.7
/nginx/sites/default.conf

//他のプロジェクトと区別しやすいよう、ドメイン名を設定している(必須ではない)
- server_name localhost;
+ server_name dev.my_project.com;

//laravelディレクトリを作ったための対応
- root /var/www/public;
+ root /var/www/laravel/public;
/mysql/docker-entrypoint-initdb.d/createdb.sql

//プロジェクト用DB作成
- #CREATE DATABASE IF NOT EXISTS `dev_db_1` COLLATE 'utf8_general_ci' ;
- #GRANT ALL ON `dev_db_1`.* TO 'default'@'%' ;
+ CREATE DATABASE IF NOT EXISTS `project_db` COLLATE 'utf8_general_ci' ;
+ GRANT ALL ON `project_db`.* TO 'default'@'%' ;

// テスト用DB作成(ユーザは使いまわす想定)
- #CREATE DATABASE IF NOT EXISTS `dev_db_2` COLLATE 'utf8_general_ci' ;
- #GRANT ALL ON `dev_db_2`.* TO 'default'@'%' ;
+ CREATE DATABASE IF NOT EXISTS `test` COLLATE 'utf8_general_ci' ;
+ GRANT ALL ON `test`.* TO 'default'@'%' ;

3. Laradockビルド・アクセス

下記コマンドを実行し、サーバを構築・ビルド

$ cd ~/my_project/laradock
$ docker-compose build workspace nginx mysql redis
$ docker-compose up -d nginx mysql redis

立ち上がったら下記コマンドでworkspaceサーバへアクセス
(立ち上げに失敗したら、docker-compose logsコマンド等で状態確認して対応)

$ docker-compose exec --user=laradock workspace bash

4. Laravelインストール・yarnインストール

workspaceサーバ内で下記コマンド実行し、laravel, jsをセットアップ

laradock@~~~~:/var/www$ composer create-project laravel/laravel --prefer-dist
laradock@~~~~:/var/www$ cd laravel
laradock@~~~~:/var/www/laravel$ yarn install

5. Laravel設定ファイル修正

DBアクセスが通るよう.envを修正

.env
- DB_HOST=127.0.0.1
+ DB_HOST=mysql
- DB_DATABASE=default
+ DB_DATABASE=project_db
- DB_USERNAME=homestead
+ DB_USERNAME=default

6. ブラウザアクセス

workspaceの作業を終了し、ホストPCからdockerのwebサーバにアクセスする

hostsの修正

Windowsの場合

メモ帳を管理者で実行し、下記ファイルを修正

C\Windows\System32\drivers\etc\hosts
+ 127.0.0.1       dev.my_project.com

macの場合

/private/etc/hosts
+ 127.0.0.1       dev.my_project.com

ブラウザアクセス

ブラウザを開き、http://dev.my_project.com へアクセス
Laravelが表示されていれば完了です! :smiley:


おまけ

ありがちな失敗

サーバ立ち上げに失敗してExit 1が出ている

$ docker-compose ps
                   Name                                 Command               State                                                                       Ports
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
laradock_docker-in-docker_1   dockerd-entrypoint.sh            Up       2375/tcp, 2376/tcp               
laradock_mysql_1              docker-entrypoint.sh mysqld      Up       0.0.0.0:3306->3306/tcp, 33060/tcp
laradock_nginx_1              /bin/bash /opt/startup.sh        Exit 1                                    
laradock_php-fpm_1            docker-php-entrypoint php-fpm    Up       9000/tcp                         
laradock_redis_1              docker-entrypoint.sh redis ...   Up       0.0.0.0:6379->6379/tcp           
laradock_workspace_1          /sbin/my_init                    Up       0.0.0.0:2222->22/tcp, 0.0.0.0:3000->3000/tcp, 0.0.0.0:3001->3001/tcp, 0.0.0.0:4200->4200/tcp, 0.0.0.0:8001->8000/tcp, 0.0.0.0:8080->8080/tcp

上記の場合nginxが死んでいる。
docker-compose logsコマンドで失敗原因を確認しましょう。

$ docker-compose logs nginx

nginxの立ち上げに失敗する

adduser: group 'www-data' in use
ERROR: Service 'nginx' failed to build: The command '/bin/sh -c apk update     && apk upgrade     && apk add --no-cache openssl     && apk add --no-cache bash     && adduser -D -H -u 1000 -s /bin/bash www-data' returned a non-zero code: 1

というエラーが発生した場合、
https://github.com/laradock/laradock/pull/2162/commits/8417ed2710e3491f1e74b796e032844d38ea8216
を参考に修正を行ってください。

メモリ不足でdockerが立ち上がらない

  • chrome等ブラウザを閉じる
  • dockerの設定から割り当てるメモリ量を調整する

docker-compose buildに失敗する

npm ERR! code EAI_AGAIN
npm ERR! errno EAI_AGAIN

上記のようなエラーが発生した場合、時間をおいて再ビルドすれば直ることがあります。

docker-compose up時にmysqlが起動しない

既にLaradockでプロジェクトを立ち上げたことがある場合、
そのプロジェクトとDATA_PATH_HOSTの場所被った場合立ち上げに失敗します。

DATA_PATH_HOSTを変えビルドしなおし(docker-compose build --no-cache mysql)をしたり、
既存のDATA_PATH_HOSTの中身を削除したりしてみてください。
(削除して大丈夫かはご自身でご判断ください)

docker-compose upが全体的に失敗する

過去にdocker等で仮想イメージを作ったことがある場合、
既存のものとポートが被ったりすることが多々あります。

workspace, nginx, mysql, redisのポートをずらしたりdockerを再起動したりビルドしなおしたり色々試してください。
*特に2018年までのLaradockにはCOMPOSE_PROJECT_NAMEの設定が無いため、コンテナ名が被ります

mysqlを誤って8.0で作成してしまった

Laravelは最新版でもmysql8.0標準の暗号化方法(caching_sha2_password)をサポートしていません。(2019/6/28現在)
mysql8.0を作成してしまい、そこで作ってしまったユーザでログインしたい場合、
下記のようなsqlによりパスワード設定を更新してください。

ユーザ:'default'を、パスワード:'secret'で更新

ALTER USER 'default' IDENTIFIED WITH mysql_native_password BY 'secret';

ERROR: Pool overlaps with other one on this address spaceエラーが発生した場合

$ docker-compose up -d nginx mysql redis
Creating network "laradock_backend" with driver "bridge"
ERROR: Pool overlaps with other one on this address space

上記の例の場合、laradock_backendというネットワークが既に存在し、上書きできないというエラーとなります。
まず、下記コマンドでdockerのネットワークが確認します。

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
71c487abe...        bridge              bridge              local
7c9291603...        host                host                local
95dcdfd15...        laradock_default    bridge              local
b223d9550...        none                null                local

確かにlaradock_defaultが存在するため、この場合既存のlaradock_backendネットワークを削除すれば解決します。
下記コマンドで、使用していないネットワークを全て削除できます。
使用中であった場合削除されないため、
その場合は使用していると思われるlaradockにてdocker-compose downを行ってください。

$ docker network prune
WARNING! This will remove all networks not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Networks:
laradock_default

Q.A

php5.4は使えないのか?

使えません。5.6以上となります。

Windows10 homeでは使えないのか?

現在のところ使えません。
どうしても使いたい人はWSL2でググると道があります。

DBにつながるか確認したい

workspace内で下記コマンド打てばテーブル作成処理が走るので、試してみるといいと思います。

$ laradock@~~~~:/var/www$ cd /var/www/laravel/
$ laradock@~~~~:/var/www/laravel$ php artisan migrate

成功後は下記コマンドでだいたい元通りにできます

laradock@~~~~:/var/www/laravel$ php artisan migrate:rollback
47
47
5

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
47
47