ここ最近、家では仮想マシンを立てずにLaravelの開発を行うようになりました。
比較的簡単にLaravelの環境を作る手段はありますが、ここ最近自分が雑に、とりあえず動かせる環境を作る時の方法に関して書こうと思います。
今回は、クソ雑です。
環境
- Windows10
- Docker Toolbox(ネイティブのdockerの方でも良いですがDocker Toolboxを前提としています。あとバージョンが古いとdocker-composeが上手く動かないので比較的新しいの推奨)
- Laravel5.4を想定しています。
とりあえずインストールする
すでにここでローカルにphpが入ってるの前提です。nodeもwindows内で動かすべきなのでそちらで対応します。
$ composer create-project laravel/laravel project-name
$ cd project-name
docker-compose.ymlを作る
$ vim docker-compose.yml
できるだけ軽量のalpineイメージを使っていきますよ。
version: "3"
services:
php-fpm:
build: ./docker-assets/php-fpm/
volumes:
- ./:/app
nginx:
image: nginx:alpine
volumes:
- ./:/app
- ./docker-assets/nginx/default.conf:/etc/nginx/conf.d/default.conf
ports:
- "8080:80"
mysql:
image: mysql:5.7
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_USER: ${DB_USERNAME}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
volumes:
- ./docker-assets/datastore:/var/lib/mysql
mail:
image: mailhog/mailhog:latest
ports:
- "8025:8025"
プロジェクトルートにdocker-assetsフォルダを用意して中身をつくる
$ mkdir docker-assets
$ cd docker-assets
$ mkdir nginx
$ mkdir php-fpm
nginxフォルダの中にdefault.confを作ります。
server {
listen 80;
server_name localhost.local;
index index.php;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /app/public;
location / {
try_files $uri $uri/ /index.php$is_args$args;
index index.php index.html index.htm;
sendfile off;
}
location ~ \.php {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_index index.php;
fastcgi_pass php-fpm:9000;
}
}
php-fpmフォルダの中にdockerfileを作ります。
docker-assets/php-fpm/dockerfile
FROM php:7.1-fpm-alpine
RUN apk upgrade && \
apk add ca-certificates && \
update-ca-certificates
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN docker-php-ext-install pdo_mysql mysqli mbstring bcmath
.gitignoreに以下を追加しておく
/docker-assets/datastore
.envのDBの欄を以下のようにする
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=password
DB_HOSTのmysqlはdocker-composeのリンク先の名前です。
起動する
docker toolboxを使ったことがない人もいると思うのでコマンドから順番に。
管理者権限でプロンプト動かさないと駄目かもです。
$ docker-machine start
ちょっと時間がかかるかもです。
続いて環境変数を登録しておく必要があります。
以下を叩いておきます。
$ @FOR /f "tokens=*" %i IN ('docker-machine env') DO @%i
あとは、プロジェクトのフォルダ上で
$ docker-compose up -d
です。これで簡易Laravel環境が作れちゃいます。
正直しっかりした環境が欲しい場合はLaradock等で開発環境を構築したほうが良いと思います。
アクセスする
私の環境では192.168.99.100:8080でアクセスできるのですが、皆さんの環境がそうであるとは限らないのでdocker-machineのIPを調べます。
$ docker-machine ip
192.168.99.100
と、いったようにIPがわかりますのでこのIPのポート8080にアクセスすればおっけーです。
マイグレーションとかどうしたら良いの?
$ docker-compose exec php-fpm /app/artisan
でコマンドが実行出来るので、こちらを使いましょう。