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フレームワークのインストール
$ composer create-project laravel/laravel Laravel --prefer-dist
2.Dockerまわり
超初心者で本当に分からない場合は、Dockerまわりはとりあえずコピペで大丈夫です。
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
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
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で設定したそれと合わせます。
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=homestead
DB_PASSWORD=secret
4.実行
実行ですが、docker-composeで起動時にcomposerのインストールとマイグレーションを入れてあるので、事前の準備が不要となっています。
$ docker-compose up -d
(中略。初回はイメージ作成などで時間かかりますし大量のコンソールが出ます)
Starting test_mysql_1 ... done
Starting test_app_1 ... done
Starting test_web_1 ... done
こんな感じで。
で、localhost:8000にブラウザからアクセスしてみます。
はい来た。Laravelのデフォルトのホーム画面来た。
ついでにHello World
<!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>
Route::get('hello', function () {
return view('hello');
});
これでlocalhost:8000/helloでHello Worldと画面に出ます。
こんな感じで。