LoginSignup
2
4

More than 3 years have passed since last update.

(超初心者向け)Laravelとdocker-composeでの開発環境構築

Last updated at Posted at 2019-12-06

2年前に書いた以下の自分の記事がいい加減古臭くなってきたので、サクッとアップデートしようと思います。
それでもだいぶ枯れた技術の塊ですいません。

https://qiita.com/miutex/items/ebc13fc78da4a19a3da4
https://qiita.com/miutex/items/4a22a404d26d3ffd16f2

やること

  • Laravelインストール
  • docker-composeによる設定、起動

公式ではHomesteadの利用が推奨されていますが、Dockerの方が文字通り「あっという間に」構築が完了しますし、複数人の開発者に展開する時にDockerの方が楽です。

開発環境

以下の内容はMacでやっています。
composerとDockerのインストールは済ませておいてください。

ディレクトリ構成

最終的に以下のようになります。

root(親ディレクトリ)
├docker
| ├php
| | └Dockerfile
| └web
| └default.conf
├Laravel
└docker-compose.yml

制作

1.Laravelフレームワークのインストール

console
$ composer create-project laravel/laravel Laravel --prefer-dist

2.Dockerまわり

超初心者で本当に分からない場合は、Dockerまわりはとりあえずコピペで大丈夫です。

Dockerfile

Dockerfile
FROM php:7.2-fpm

# install composer
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer
RUN apt-get update \
&& apt-get install -y \
git \
zip \
unzip \
vim

RUN apt-get update \
    && apt-get install -y libpq-dev libzip-dev \
    && docker-php-ext-install pdo_mysql pdo_pgsql zip

WORKDIR /var/www/html

default.conf

Dockerfile
server {
    listen 80;

    root  /var/www/html/Laravel/public;
    index index.php index.html;

    access_log /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;

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

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass   app:9000;
        fastcgi_index  index.php;

        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param  PATH_INFO $fastcgi_path_info;
    }
}

docker-compose.yml

docker-compose.yml
version: '3'
services:
    web:
        image: nginx:1.15.6
        ports:
            - "8000:80"
        depends_on:
            - app
        volumes:
            - ./docker/web/default.conf:/etc/nginx/conf.d/default.conf
            - .:/var/www/html
    app:
        build: ./docker/php
        depends_on:
            - mysql
        volumes:
            - .:/var/www/html
        command: >
            bash -c 'cd Laravel &&
            composer install &&
            php artisan migrate &&
            cd .. &&
            php-fpm'
    mysql:
        image: mysql:5.7
        environment:
            MYSQL_DATABASE: test
            MYSQL_USER: homestead
            MYSQL_PASSWORD: secret
            MYSQL_ROOT_PASSWORD: secret
        ports:
            - "3306:3306"
        volumes:
            - mysql-test:/var/lib/mysql
volumes:
    mysql-test:

3.Laravel設定

LaravelのDB設定をDockerで設定したそれと合わせます。

.env
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=homestead
DB_PASSWORD=secret

4.実行

実行ですが、docker-composeで起動時にcomposerのインストールとマイグレーションを入れてあるので、事前の準備が不要となっています。

console
$ docker-compose up -d
(中略。初回はイメージ作成などで時間かかりますし大量のコンソールが出ます)
Starting test_mysql_1 ... done
Starting test_app_1   ... done
Starting test_web_1   ... done

こんな感じで。

で、localhost:8000にブラウザからアクセスしてみます。

スクリーンショット 2019-12-06 14.27.21.png

はい来た。Laravelのデフォルトのホーム画面来た。

ついでにHello World

resources/views/hello.blade.php
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>Laravel</title>
    </head>
    <body>
        Hello World...
    </body>
</html>
routes/web.php
Route::get('hello', function () {
    return view('hello');
});

これでlocalhost:8000/helloでHello Worldと画面に出ます。
こんな感じで。

2
4
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
2
4