LaradockでLaravel開発環境構築

#はじめに
こんにちは、ハルです。
laradockを用いてlaravelの開発環境を構築しました。
この記事は、その手順書になります。

※ 質問・指摘等ございましたら、受け付けています

#前提条件
・macOsであること
※ windowの方は下記の参考資料で別サイトを見ていただければと思います

・Dockerがインストールされていること
※ docker-composeが使用できること

・git がインストールされていること
※ git cloneできること

#各バージョン（意識したバージョンのみ）
・macOS Monterey 12.2.1
・php: 7.4
・laravel: 8.20.1 
・mysql: 5.7

#サーバ構成
・nginx
　　+ php-fpm
・mysql
・redis
・APサーバ(workspace)

#ディレクトリ構成

```
// laravel_AとLaradockは同階層

my_project
|
├── laravel_A //既存プロジェクト（新規プロジェクトでも可）
│   ├── app
│   ├── bootstrap
│   └ ...
|
└── laradock //この後インストールします
    ├── adminer
    ├── aerospike
    └ ...

```
#環境構築手順

#1. Laradockをインストールする
##　1.1. laravel_A と同じ階層に移動
```
$ cd ~/laravel_A
$ ls
laravel_A    //laravel_A と同じ階層であること確認
```
##　1.2. Laradockをクローンする
```
git clone https://github.com/laradock/laradock.git
```
##2. Laradockの設定

##　2.1. Laradockの.envを設定する

```
$ cd laradock
$ cp -a ./env-example ./.env
$ vim .env 　　　　　　　　　　　//　エディタで編集する場合は不要
```


```diff:.env
//laravelプロジェクトが存在する階層を記述_8行目付近
- APP_CODE_PATH_HOST=../
+ APP_CODE_PATH_HOST=../laravel_A/

//APサーバ(workspace)に置かれる階層を記述_10行目付近
- APP_CODE_PATH_CONTAINER=/var/www/
+ APP_CODE_PATH_CONTAINER=/var/www/laravel_A/

//mysqlの置き場所。修正で別プロジェクトとの競合を回避できる_16行目付近
- DATA_PATH_HOST=~/.laradock/data
+ DATA_PATH_HOST=~/.laradock/laravel_A/data

//任意のバージョンに変更_40行目付近
- PHP_VERSION=7.2
+ PHP_VERSION=7.4

//5.7に（最新バージョン8.0はエラーが出るそうです)_377行目付近
- MYSQL_VERSION=latest
+ MYSQL_VERSION=5.7
```

##　2.2. nginxを設定する 

```
$ pwd
~/laradock　　　　　//カレント・ディレクトリ確認

$ cd nginx/sites
$ cp laravel.conf.example laravel_A.conf
$ vim laravel_A.conf 
```

```diff:laravel_A.conf
//他のプロジェクトと区別しやすいよう、ドメイン名を設定(推奨)
- server_name localhost;
+ server_name laravel_A.local;

//ディレクトリを作ったための対応
- root /var/www/public;
+ root /var/www/laravel_A/public;
```


##　2.3. mysqlを設定する  

```
$ pwd    //カレント・ディレクトリ確認
~/laradock

$ cd mysql/docker-entrypoint-initdb.d/
$ cp createdb.sql.example createdb.sql
$ vim createdb.sql
```

```diff:createdb.sql
- #CREATE DATABASE IF NOT EXISTS `dev_db_1` COLLATE 'utf8_general_ci' ;
- #GRANT ALL ON `dev_db_1`.* TO 'default'@'%' ;
+ CREATE DATABASE IF NOT EXISTS `laravel_A` COLLATE 'utf8_general_ci' ;
+ GRANT ALL ON `laravel_A`.* TO 'default'@'%' ;
```

##　2.4. ビルドする
```
$ pwd    //カレント・ディレクトリ確認
~/laradock

$ docker-compose build workspace nginx mysql redis
$ docker-compose up -d nginx mysql redis workspace
```

##　2.5. APサーバにプロジェクトが存在するか確認する

```
$ pwd    //カレント・ディレクトリ確認
~/laradock

$ docker-compose exec --user=laradock workspace bash
```

```:APサーバ(workspace)
laradock@~~~~:/var/www$ ls
laravel_A       
※ 同階層にあるlaravelプロジェクト（今回はlaravel_A）が存在していることを確認
```

## 3. Laravel(laravel_A)の.env編集
```
$ pwd    //カレント・ディレクトリ確認
~/laravel_A

$ vim .env
```

```diff:.env
- DB_HOST=127.0.0.1
+ DB_HOST=mysql

- DB_DATABASE=default
+ DB_DATABASE=laravel_A  

- DB_USERNAME=homestead
+ DB_USERNAME=default
```

## 4. マイグレーションできるかどうか確認

```
$ pwd    //カレント・ディレクトリ確認
~/laradock

$ docker-compose exec --user=laradock workspace bash
```

```:APサーバ(workspace)
laradock@~~~~:/var/www$ cd laravel_A  
laradock@~~~~:/var/www/laravel_A$ php artisan migrate
```

## 5. hostsの設定を行う

```diff
$ vim /private/etc/hosts
```

```:hosts
+　127.0.0.1 laravel_A.local
+　::1 laravel_A .local
```
## 6. ブラウザに表示されていることを確認する
```
//　hostファイルを編集したため、一旦止める
$ docker-compose stop
$ docker-compose start
```

http://laravel_A.local/
にアクセスして表示されれば環境構築完了です。
![スクリーンショット 2022-02-21 23.29.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/820554/85f2d1c4-b0ab-b7c2-f69b-37a3e6bb66ee.png)


#参考資料
##　1. Laradock公式

https://laradock.io/getting-started/

https://github.com/laradock/laradock

##　2. Qitta
[LaradockでLaravel環境構築【手順書】](https://qiita.com/harukei/items/b103861b75b69d706805)
[Laradockを使ったLaravel開発環境構築](https://qiita.com/J_Shell/items/695a30fd38444d065ae5)

##　3. その他ブログ等
[【Laravel】Laradockで複数プロジェクトを動かす手順](https://pensuke.work/posts/laradock-multiproject/)
※複数のプロジェクトを動かすこともできるようです。今度試します。


#途中のつまづき（参考URL共通）

##　1. Macのphpバージョンを任意指定したい時
[Macでbrewインストール済のPHPのバージョン変更。](https://error-search.com/error-post/detail/500/Mac%25E3%2581%25A7brew%25E3%2582%25A4%25E3%2583%25B3%25E3%2582%25B9%25E3%2583%2588%25E3%2583%25BC%25E3%2583%25AB%25E6%25B8%2588%25E3%2581%25AEPHP%25E3%2581%25AE%25E3%2583%2590%25E3%2583%25BC%25E3%2582%25B8%25E3%2583%25A7%25E3%2583%25B3%25E5%25A4%2589%25E6%259B%25B4%25E3%2580%2582)

##　2. Mysqlが未導入だった
[MySQLの開発環境を用意しよう（macOS）](https://prog-8.com/docs/mysql-env)

#教材
今回初めてDockerに触れました。
その際に利用した教材を連携します。

https://www.udemy.com/course/docker-k/



#終わりに

約1週間で基本的知識を詰め込みましたが、なんとか開発環境構築することができました。