php/laravelをdocker環境で立ち上げてみる。

# はじめに

naritomoと申します。

本職はインフラエンジニアを行っています。
php系について、開発環境構築方法について投稿したいと思います。

いろいろアドバイスいただけると嬉しいです。

## 立ち上げ概要

windows11を使用してwsl2+Ubuntu+vscode+git環境を作り、
docker-composeを使用して立ち上げるものになります。

必要なソースは以下にまとめてあります。

dockerソース

https://github.com/naritomo08/laravel_docker

laravel10ソース

https://github.com/naritomo08/laravelapp4

laravel9ソース

https://github.com/naritomo08/laravelapp3

laravel8ソース

https://github.com/naritomo08/laravelapp

laravel6ソース

https://github.com/naritomo08/laravelapp2

## 参考URL

[Elixirをdocker環境で立ち上げてみる。](https://qiita.com/naritomo08/items/fecf4ace7b9ca9078102)

## なぜ、あえてDockerなのか？

インフラエンジニアとしてDockerから触れたほうが扱いやすく、
以下の利点を感じられたため、開発環境構築ではDockerを使用することを
推しています。

* OS問わず同じ開発環境での開発が可能
* インフラ/アプリエンジニアでのコラボがしやすい。
　 (具体的にはインフラ屋でOS/開発環境のベース環境を構築し、
　　アプリエンジニアで本来行うべき開発業務に集中できる。)
* 本番Web環境で多く使用されているAWS/AzureなどのIaaSサービス
　に対し、Docker資産を使用できる。

一応、本番環境展開にPaaSを使用する手はありますが、
AWS/Azureを絡めたほうが業務につながるとみています。

## 事前準備

windows11+wsl2+Ubuntu22+DockerCompose+vscode+gitでの環境を構築してること。

## 環境構築手順

### ベースリポジトリをクローンする。

```bash
$ git clone https://github.com/naritomo08/laravel_docker.git laraveldocker
laravel9/10の場合
$ git clone -b php8.2 https://github.com/naritomo08/laravel_docker.git laraveldocker
$ cd laraveldocker
→フォルダ名は好きに変更してよい。
laravel6の場合
$ git clone https://github.com/naritomo08/laravelapp2.git backend
laravel8の場合
$ git clone https://github.com/naritomo08/laravelapp.git backend
laravel9の場合
$ git clone https://github.com/naritomo08/laravelapp3.git backend
laravel10の場合
$ git clone https://github.com/naritomo08/laravelapp4.git backend
```

後にファイル編集などをして、git通知が煩わしいときは
作成したフォルダで以下のコマンドを入れる。

```bash
 rm -rf .git
```

### 環境構築用のシェルスクリプトを実行する。

```bash
$ chmod u+x build_env.sh && ./build_env.sh
```

### ファイルパーミッションを更新する。

macでは行わなくてよい。

```bash
$ chmod u+x set_permission.sh &&  ./set_permission.sh
```

### 各種サイト確認する。

## サイトURL

### laravel

http://127.0.0.1:8080

### adminer(DB管理ツール)

http://127.0.0.1:8081


* ログイン情報
  - サーバ: laravel_db
  - ユーザ名: laravel
  - パスワード: password
  - データベース: laravel

### mailhog(メールサーバ)

http://127.0.0.1:8025


## コンテナ起動する方法

`docker-compose.yml`が存在するフォルダーで以下のコマンドを実行する。

```bash
$ docker-compose up -d
```

## コンテナ停止する方法

`docker-compose.yml`が存在するフォルダーで以下のコマンドを実行する。

```bash
$ docker-compose stop
```

## コンテナ削除する方法

`docker-compose.yml`が存在するフォルダーで以下のコマンドを実行する。

```bash
$ docker-compose down
```

## 起動中のコンテナに入る

### PHPコンテナ

```bash
$ docker-compose exec laravel_php /bin/bash
```

### DBコンテナ

```bash
$ docker-compose exec laravel_db /bin/bash
```

## その他

開発中に以下のコマンドを実行してください。

### laravel6/8の場合

```bash
$ docker-compose exec laravel_php /bin/bash
$ cd project

*初回時以下の2つのコマンドを実施
 (laravel8環境のみ上1つでよい。)
$ chmod -R a+x node_modules
$ sudo n 16.13.2

$ npm run watch
```

#### npm run watchコマンドとは

npm run watchコマンドはターミナルで実行し続け、関連ファイル全部の変更を監視します。
Webpackは変更を感知すると、アセットを自動的に再コンパイルします。

### laravel9/10の場合

```bash
$ docker-compose exec laravel_php /bin/bash
$ cd project

*初回時以下のコマンドを実施
$ chmod -R a+x node_modules

$ npm run dev
```

#### npm run devコマンドとは

laravel9からはnpm run devコマンドでターミナルで実行し続け、
関連ファイル全部の変更を監視します。
Webpackは変更を感知すると、アセットを自動的に再コンパイルします。

## 作成したソースを流用したい場合

サイト作成したあと、以下のフォルダ内をgithubなどに保管すれば、
他の開発/本番環境へソースを持っていって利用できます。

```bash
backend
```

本docker環境に持っていきたい場合、
"ベースリポジトリをクローンする。"にて最初のクローンを実施したあと、
2つめのリポジトリクローン元を別途保管したソースに入れ替るか、
上記フォルダを作成してソースを入れて、
あとは手順通りに実施すれば、ひとまず立ち上がるはずです。

他環境で本ソースを使用した立ち上げ方は、
ここでは割愛いたします。

## 作成したソースをAWS(ECS)に展開したい場合

backendフォルダに展開されているソースについて、
以下のページを参考にAWS(ECS)へ展開することもできます。

https://qiita.com/naritomo08/items/6e38955145d80c1435bd

# おわりに

本記事以外にもElixir/rubyについても同様のものを上げていますので、
参照していただいてこちらにも挑戦していただければと思います。

https://qiita.com/naritomo08/items/fecf4ace7b9ca9078102

https://qiita.com/naritomo08/items/b39d4ee6987fb052ca79