LaradockでPHP7.4+Apache2.4+MariaDB10.3+phpMyAdminの環境構築をする手順

Laradockで環境構築するとnginxがデフォルトになっています。 
本番環境がApacheとMariaDB10.3のため、laradockの設定を変更します。

# 要件

- Git 2.35.1
- Docker version 20.10.13
- docker-compose version 1.29.2, build 5becea4c
- Laradock v12.1

# コンテナの構成

- Apache2.4
- MariaDB10.3
- PHP7.4
- phpMyAdmin

# ディレクトリ構成

```
laradock-Apache   ... プロジェクトルート
   ┗ laradock     ... Laradock
   ┗ laravel      ... Laravel app project
       ┗ public   ... 公開ディレクトリ（Document Root）
```

# Laradockのset up

プロジェクトルートへ移動

```bash
$ mkdir laradock-Apach
$ cd ~/laradock-Apache/
```

Laradockをclone

```bash
$ git clone https://github.com/laradock/laradock.git
```

Laradockへ移動

```bash
$ cd ~/laradock-Apach/laradock
```

.envを作成

```bash
$ vi cp .env.example  .env
```

.envを編集

```bash
$ vim .env
---

### PHP Version ###########################################

- PHP_VERSION=7.3
+ PHP_VERSION=7.4

### MARIADB ###############################################

- MARIADB_VERSION=latest
+ MARIADB_VERSION=10.3

- MARIADB_DATABASE=default
+ MARIADB_DATABASE=laradock

### WORKSPACE #############################################

- WORKSPACE_INSTALL_MYSQL_CLIENT=false
+ WORKSPACE_INSTALL_MYSQL_CLIENT=true

### PHP MY ADMIN ##########################################

- PMA_DB_ENGINE=mysql
+ PMA_DB_ENGINE=mariadb

### APACHE ################################################

- APACHE_DOCUMENT_ROOT=/var/www/
+ APACHE_DOCUMENT_ROOT=/var/www/laravel/public/

---
```
# Apacheの設定変更
apache、default.apache.confのバックアップを取っておきます。

```bash
$ cp apache2/sites/default.apache.conf apache2/sites/default.apache.conf.example
$ mv apache2/sites/default.apache.conf.example apache2/sites/default.apache.conf
```

apacheのvirtual hostsを編集

```bash
$ vim apache2/sites/default.apache.conf
```

```
<VirtualHost *:80>
  ServerName laradock.test
- DocumentRoot /var/www/
+ DocumentRoot /var/www/laravel/public/
  Options Indexes FollowSymLinks

- <Directory "/var/www/">
+ <Directory "/var/www/laravel/public/">
    AllowOverride All
    <IfVersion < 2.4>
      Allow from all
    </IfVersion>
    <IfVersion >= 2.4>
      Require all granted
    </IfVersion>
  </Directory>

  ErrorLog /var/log/apache2/error.log
  CustomLog /var/log/apache2/access.log combined
</VirtualHost>
```
# MariaDBの設定変更

mariadbサーバの文字セットをutf8mb4に変更します。

```bash
$ cd ~/laradock-Apach/laradock/mariadb

$ cp my.cnf my.cnf.example

$ vi my.cnf

+ [mariadb]
+ character-set-server = utf8mb4

+ [client-mariadb]
+ default-character-set = utf8mb4
```

# laradock 起動

コンテナ起動

```bash
$ docker-compose up -d workspace apache2 mariadb phpmyadmin
```

# Laravelプロジェクトの作成

```bash
$ docker-compose exec workspace bash
root@509785bbe57:/var/www$
root@509785bbe57:/var/www$ composer create-project "laravel/laravel=8.*" laravel --prefer-dist
root@509785bbe57:/var/www$ cd laravel
root@509785bbe57:/var/www/laravel$ chmod -R 777 storage/
```

# Laravelの環境設定変更

作成されたLaravelプロジェクト配下の.envを更新します。

```bash
root@509785bbe57:/var/www$ cd laravel/
root@509785bbe57:/var/www/laravel$ vi .env
```

/var/www/laravel/.env

```
DB_CONNECTION=mysql
DB_HOST=mariadb
DB_PORT=3306
DB_DATABASE=laradock
DB_USERNAME=default
DB_PASSWORD=secret
```

```bash
root@509785bbe57:/var/www/laravel$ exit
```

# 動作確認

全てのコンテナがupになっていればOKです。

```bash
$ docker-compose ps
           Name                          Command               State                                                                      Ports
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
laradock_apache2_1            /opt/docker/bin/entrypoint ...   Up      0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
laradock_docker-in-docker_1   dockerd-entrypoint.sh            Up      2375/tcp, 2376/tcp
laradock_mariadb_1            docker-entrypoint.sh mysqld      Up      0.0.0.0:3306->3306/tcp
laradock_php-fpm_1            docker-php-entrypoint php-fpm    Up      9000/tcp, 0.0.0.0:9003->9003/tcp
laradock_phpmyadmin_1         /docker-entrypoint.sh apac ...   Up      0.0.0.0:8081->80/tcp
laradock_workspace_1          /sbin/my_init                    Up      0.0.0.0:2222->22/tcp, 0.0.0.0:3000->3000/tcp, 0.0.0.0:3001->3001/tcp, 0.0.0.0:4200->4200/tcp, 0.0.0.0:8001->8000/tcp, 0.0.0.0:8080->8080/tcp
```

http:\//localhostにアクセスしてLaravelのトップ画面が表示されればOKです。

![20210118143323.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/968572/f995d142-1ba2-fdb2-8e76-507c9ac57cf4.png)


http:\//localhost:8081でphpmyadminにアクセスできることを確認します。
.envのmariadbに設定したユーザー、パスワードでログインできればOKです。

![名称未設定2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/968572/de7a604a-f8c9-9edc-a289-be1697d01874.png)



## マイグレーションの実行

マイグレーションの実行が無事に完了できるか確認します。

```bash
root@509785bbe57:/var/www/laravel$ php artisan migrate
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (22.06ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (21.03ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (25.08ms)
Migrating: 2019_12_14_000001_create_personal_access_tokens_table
Migrated:  2019_12_14_000001_create_personal_access_tokens_table (32.52ms)
```

## MysQLクライアント

MySQLクライアントでログインできるか確認します。

```bash
root@509785bbe57:/var/www$ mysql -h mariadb -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 202
Server version: 5.5.5-10.3.34-MariaDB-1:10.3.34+maria~focal mariadb.org binary distribution

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
```

これで、Laravelの開発をスタートする準備完了です。

# 補足：Laradock(docker) 操作

dockerのworkspaceにログイン

```
$ docker-compose up -d workspace apache2 mariadb phpmyadmin
```

docker コンテナ停止

```
$ docker-compose down
```

docker コンテナ停止、イメージ削除

```
$ docker-compose down --rmi all
```

docker コンテナ停止、ボリューム削除

```
$ docker-compose down -v
```

Dockerの設定ファイル（apacheなど）変更した場合

```bash
$ docker-compose up -d --build workspace apache2 mariadb phpmyadmin
or
$ docker-compose build apache2 など
```