LaravelをLaradockでインストールする手順

LaravelをDockerでインストールする方法を紹介します。Laradockという便利なものがあって、簡単にいえば、Laravelを動かす時に必要なWebサーバー、PHP、データベースといったものをまるっとインストールしてくれるものです。

では早速やっていきましょう。

開発フォルダの用意

これは個人的な設定ですが、ぼくはdevelopmentフォルダとして下記のようにホームフォルダ(/Users/{ユーザー名}/)直下にdevフォルダを作成しています。このdevフォルダ内にて作業をしていきます。

/Users/pensuke/dev/

LaradockでLaravelを動かすディレクトリ構成

今回は下記のようなディレクトリ構成にしようと思います。myprojectは適宜自分がLaravelで作りたいプロジェクト名にしましょう。ここでは説明のためmyprojectというプロジェクトを動かす手順を解説しています。

laradoc (git clone でできるlaradockフォルダ)
	- docker-compose.yml
	- nginx
	- mysql
	- ...(省略)
myproject (インストールしたLaravelのプロジェクトフォルダ)
	- app
	- public
	- ...(省略)

参考までに、ぼくの場合はこれを先程の/Users/pensuke/dev/に置いて

/Users/pensuke/dev/laradoc
/Users/pensuke/dev/myproject

という風にしています。

Laradockのインストール

まずLaradockをgithubからクローンしてきます。Laradockフォルダが作成されるのでcdで移動します。

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

env-exampleという環境設定ファイルを自分用にコピーします

cp env-example .env

この.envファイルを編集します。今回は、特に設定はいじりません。

(ぼくの場合はsublime textをターミナルから実行できるようにしていてsubl .envとかで開くように設定しています)
Launch Sublime Text from the command line on OSX · GitHub

laradockのmysqlの設定

Laradockはデフォルトでは最新のmysqlを使用します。今回は5.7を指定して利用しようと思います。(最新のものにすると色々問題が発生する可能性があるので…)

.envファイルでいじっても反映されるとは思うのですが、laradock/mysql/Dockerfileをいじるのが無難です。下記のように編集しましょう

編集ファイル: laradock/mysql/Dockerfile

FROM mysql:${MYSQL_VERSION}
↓これを下記に編集
FROM mysql:5.7

Databaseや、ユーザー、パスワードの設定もできますが、ここでは無駄なバグを発生させないために割愛します。(DBの複数作成は後ほど書きます。)

laradockのnginxの設定

myproject.localというURLで自分のLaravelプロジェクトにアクセスできるようにします。
laradock/nginx/sites/laravel.conf.exampleというのがあるのでこれをコピーしてmyproject用に書き換えていきます

# laradockフォルダにいるとして
cd cd nginx/sites
# laravel.conf.exampleをmyproject.confという名前にコピー
cp laravel.conf.example myproject.conf

コピーしたmyproject.confを編集します。編集箇所は基本的にlaravelと書かれている箇所をmyprojectに書き換えるだけです。編集後のconfファイルは下記です。

server {

    listen 80;
    listen [::]:80;

    server_name myproject.local;
    root /var/www/myproject/public;
    index index.php index.html index.htm;

    location / {
         try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_pass php-upstream;
        fastcgi_index index.php;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        #fixes timeouts
        fastcgi_read_timeout 600;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }

    location /.well-known/acme-challenge/ {
        root /var/www/letsencrypt/;
        log_not_found off;
    }

    error_log /var/log/nginx/myproject_error.log;
    access_log /var/log/nginx/myproject_access.log;
}

diff

hostファイルの編集

myproject.localでアクセスした時にlocalhost(127.0.0.1)に向くように設定します。/private/etc/hostsファイルの一番下に下記を追加してください。

編集ファイル: /private/etc/hosts

::1 myproject.local

これでDocker(Laradock)側の設定は一旦終了です。この状態で、docker-compose up -d nginx mysql workspaceという風にするとmyprojectフォルダのLaravelを見に行ってくます。

Laradockの起動

今回はnginx(webサーバー)、mysql(データベース)、phpmyadmin(データベースを簡単に見れるもの)、workspaceを起動します。

docker-compose up -d nginx mysql workspace

Laravelをcomposerでインストール

Laravelのインストールにはcommposerを使います。composerをインストールして、、と思ったんですがlaradockのworkspaceにはcomposerやnodeがインストールされているとのことなのでそちらを使いましょう。

laradockのworkspaceに入る

まずlaradockのworkspaceに入ります。–user=laradockというのはつけないとrootユーザーとしてログインされてしまって、コマンドをうつと警告が出たりする場合があるのでlaradockというユーザーでログインしています。

docker-compose exec --user=laradock workspace bash

これによってlaradockのworkspace内に入って操作することが可能です。(反対に自分のPCのことをホストという風に言います。)

composer create-project

Workspace内に入れたらcomposerでlaravelをインストールします。最後のmyprojectという部分がプロジェクト名で、そのプロジェクト名のフォルダが作成されてそこにLaravelがインストールされます。

composer create-project --prefer-dist laravel/laravel myproject

インストールが完了したら、myblog.localにアクセスしてみましょう。Laravelの初期状態のページが表示されたらokです。

welcome page

Laravelのデータベース設定

今度はmyprojectフォルダの中にあるlaravelの.envを編集しましょう。(ややこしいですが、dockerの.envとは別物です。)

編集ファイル: myproject/.env

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret

(HOST側でLaravelを動かしてデータベースに接続する時はDB_HOST=127.0.0.1でいけます。)

ついでにAPP_URLもmyproject.localにしておきましょう。

編集ファイル: myproject/.env

APP_URL=myproject.local

Laravelデフォルトのテーブル作成

Laravelではmigrationファイルというのを用いて、基本的なusersテーブルを作成することができます。

myprojectのフォルダに移動してphp artisan migrateというのを実行してみましょう。ここではworkspace内でmigrateを実行します。

# workspaceに入る
docker-compose exec --user=laradock workspace bash

# myprojectフォルダに移動してmigrate
cd myproject
php artisan migrate

これで成功していればusersテーブルとmigrationsテーブル、password_resetsテーブルというのができあがります。

せっかくなのでphpmyadminで確認してみましょう。

laradockでphpmyadminを使う

hpmyadminはlocalhostの8080番ポートに割り当てられています。ブラウザでlocalhost:8080にアクセスしてみましょう

localhost:8080

phpmyadmin

ログイン情報は下記です。

サーバ: mysql
ユーザ名: default
パスワード: secret

すると左側の列にdefaultというのがあるのが分かると思います。このテーブルを開いて、先程のテーブルusers, migrations, password_resetsがあればokです。

今回は以上となります。
いろいろと書きましたが、エラーになったときの解決方法など、色々公式のドキュメントにあります。laradockのドキュメントはわりと親切に色々書かれているので困った時は公式のドキュメントを読んでみましょう。

Laradock