はじめに
以下のリンクをまとめて自分の使いやすいようにした。
・【初心者向け】20分でLaravel開発環境を爆速構築するDockerハンズオン
・Laravelの開発環境をDockerを使って構築する
メイン参考リンク
・DockerでLaravel環境を構築する①~webサーバーの立ち上げ~
最終完成リンク
・Docker に Composer をインストールするベストプラクティス(と解説)
・Dockerでいい感じにPHP(Laravel)のローカル開発環境を作る
完成図
gitでクローンされる中身
.
├── .env
├── docker
│ ├── nginx
│ │ └── default.conf
│ └── php
│ └── Dockerfile
├── docker-compose.yml
└── src
└── index.php
使い方
1.git clone https://github.com/yCroma/Laravel-env.git アプリ名
2..env
ファイルでアプリ名の設定とデータベースの設定を済ませる
(以降はアプリ名がtest
の場合を想定して書く)
3.docker-compose up -d --build
でコンテナを作成する
Laravelの設定
# コンテナに入る
$ docker exec -it test-app bash
# アプリの作成(今回は`test`という名前で作成)
# composer create-project --prefer-dist laravel/laravel test "6.*"
# アプリのディレクトリに移動
# cd test
# 一応.envのコピーとアプリケーションキーの準備
# cp .env.example .env
# php artisan key:generate
# 権限の設定
# chmod 777 -R storage
# chmod 777 -R bootstrap/cache
# .envの設定
# vi .env
DB_CONNECTION=mysql
DB_HOST=mysql ← 修正
DB_PORT=3306
DB_DATABASE=homestead ← 修正
DB_USERNAME=homestead ← 修正
DB_PASSWORD=secret ← 修正
# コンテナから出る
# exit
Nginxの設定
default.conf
のドキュメントルートを修正。アプリ名がtest
の場合は以下のようになる。
server {
listen 80;
root /var/www/html/test/public; # 修正
index index.php index.html index.htm;
charset utf-8;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
root /var/www/html/test/public; # 修正
try_files $uri $uri/index.php;
}
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の設定
別に設定しなくてもいいですが、すると少し幸せになるのでやります。app
の所の環境変数を変更して、入った時にすぐに作業ができるようにしておきましょう。
app:
working_dir: /var/www/html/test # アプリケーション名の追加
composeファイルを編集したので、コンテナの立て直しと再起動。
$ docker-compose up -d
$ docker-compose restart
最後にマイグレーションまでできたら完璧。
$ docker exec -it test-app bash
# コンテナ内
# php artisan migrate
高速化
アプリケーションのインストール、マイグレーションまで終わった後に重いと感じると思います。これはマウントの都合上仕方がないので、高速化の方法を示しておきます。手始めに、docker-compose.yml
のコメントアウトを外してください。
- vendor-volume:/var/www/html/${APP_NAME}/vendor
- storage-volume:/var/www/html/${APP_NAME}/storage
volumes:
db-store:
vendor-volume:
storage-volume:
次に、この処理を適応するためにコンテナを立ち上げなおします。
$ docker-compose up -d
そうすると、vendor
の保存先が変わります。フォルダを用意しなおしてあげましょう。
$ mkdir -p storage/framework/cache/data
$ mkdir -p storage/framework/sessions
$ mkdir -p storage/framework/views
$ chmod 777 -R storage
# 上のコマンドを試しても動かなかったら
$ composer install
$ composer update
おまけ
DBへの接続法
GUIアプリが使えるなら
Name: docker-laravel(任意)
Host: 127.0.0.1
Port: 3306
User: homestead
Password: secret
Database: homestead
コンテナから入るなら。
$ docker exec -it test-mysql bash -c 'mysql -uroot -p${MYSQL_PASSWORD} ${MYSQL_DATABASE}'
完全な消し方。
$ docker-compose down --volumes --rmi all
注意点と大事なこと
(いずれ、DBはトップレベルボリュームに修正するのですが、伝えたいこと)
.env
ファイルをtest
のままで作っている場合、データベースがトップレベルボリュームされることになる。その場合、保存先が気になったことはないだろうか?簡単に調べることができる。今回は、初期のままではtest-mysql
がコンテナ名となるため以下のコマンドで確認できる。
$ docker inspect test-mysql
"Mounts":[
"Source": "/var/lib/docker/volumes/test_db-store/_data"
]
また、これはボリュームを削除する時に消えてしまう。それが嫌な場合は、ディレクトリにマウントすると良いだろう
おわりに
今度はNodeのコンテナも追加して、そこも分けれるようにしよう。
参考
・cloneしたリポジトリを別リポジトリとしてリモートにpushする
・ComposerでPlease provide a valid cache pathとなったときの対応方法