Help us understand the problem. What is going on with this article?

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

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と画面に出ます。
こんな感じで。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away