DockerからLaravel環境構築メモ 〜PHP8.0 Apache2 MySQL8.0.20〜

# 構築する環境

- PHP8.0
- Apache2
- MySQL8.0.20
- Laraval8

# Docker

## ディレクトリ構造

```
プロジェクトフォルダ
┣━ docker
┃ ┣━ MySQL
┃ ┃ ┗━ Dockerfile
┃ ┗ php
┃   ┣━ 000-default.conf
┃   ┣━ Dockerfile
┃   ┗━ php.ini
┗━ docker-compose.yml
```

- Dockerfile
- 000-default.conf
- Dockerfile
- php.ini
- docker-compose.yml

の４つのファイルを作っていきます。
以下、コピペでOKです。

## Dockerfile(MySQL)

```Dockerfile
FROM mysql:8.0.20
```

## Dockerfile（PHP）

```Dockerfile

# どんなdockerイメージを利用して構築をするか
FROM php:8.0-apache

RUN cd /etc/apache2/mods-enabled \
    && ln -s ../mods-available/rewrite.load

# 設定ファイルをdockerコンテナ内のPHP、Apacheに読み込ませる
ADD php.ini /usr/local/etc/php/
ADD 000-default.conf /etc/apache2/sites-enabled/

# Composerのインストール
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer

# ミドルウェアインストール
RUN apt-get update \
    && apt-get install -y \
    git \
    zip \
    unzip \
    libzip-dev \
    vim \
    libpng-dev \
    libpq-dev \
    libfreetype6-dev \
    libjpeg-dev \
    libonig-dev \
    && docker-php-ext-install pdo pdo_mysql mysqli zip

RUN docker-php-ext-configure gd \
    --with-freetype=/usr/include/ \
    --with-jpeg=/usr/include \
    && docker-php-ext-install -j$(nproc) gd

ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

RUN composer self-update --2

RUN curl -sL https://deb.nodesource.com/setup_12.x | bash -
RUN rm -rf node_modules
RUN apt-get install -y nodejs
RUN npm install npm -g n --save-dev cross-env
RUN npm cache clear --force
RUN npm install webpack --save
RUN npm install node-sass --nodedir=/usr/bin/node

WORKDIR /var/www/

```

## 000-default.conf

```docker/php/000-default.conf
<VirtualHost *:80>
       ServerAdmin webmaster@localhost
       DocumentRoot /var/www/public
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
       <Directory /var/www/public>
           AllowOverride All
           Require all granted
       </Directory>
</VirtualHost>

```

## php.ini

こちらの記事を参照させていただきました。

https://qiita.com/ucan-lab/items/0d74378e1b9ba81699a9

```docker/php/php.ini
[PHP]
zend.exception_ignore_args = off
expose_php = on
max_execution_time = 30
max_input_vars = 1000
upload_max_filesize = 64M
post_max_size = 128M
memory_limit = 256M
error_reporting = E_ALL
display_errors = on
display_startup_errors = on
log_errors = on
error_log = /var/log/php/php-error.log
default_charset = UTF-8

[Date]
date.timezone = Asia/Tokyo

[mysqlnd]
mysqlnd.collect_memory_statistics = on

[Assertion]
zend.assertions = 1

[mbstring]
mbstring.language = Japanese
```

## docker-compose.yml

```docker-compose.yml
version: '2'

services:
    db:
        build: ./docker/mysql
        ports:
            - "33306:3306"
        environment:
            MYSQL_ROOT_PASSWORD: root
            MYSQL_USER: root
            MYSQL_PASSWORD: root
            MYSQL_DATABASE: tsurikomi
        volumes: 
            - ./docker/mysql/data:/var/lib/mysql
            - ./docker/mysql/initdb.d:/docker-entrypoint-initdb.d
    php:
        build: ./docker/php
        ports: 
            - "8080:80"
        volumes: 
            - ./src:/var/www
        depends_on: 
            - db
```

## Docker コンテナのビルドと起動

ビルド

```bash
docker compose build
```

起動

```bash
docker compose up
```

phpコンテナに入る

```bash
docker compose exec php bash
```

# Laravel8のインストール

以下、phpコンテナ内でのコマンドです

```bash
composer create-project "laravel/laravel=8.*" ./
```

最後、`./`とすればsrcの直下にLaravelのファイル群を作成することができる

```bash
php artisan -V
```

でLaravelのバージョン確認

インストールできているか確認できたら、localhostで動くか確認する
http://localhost:8080/

![スクリーンショット 2022-01-25 23.15.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1123007/07c1c63f-0daf-3868-e84f-7d5bf8915634.png)

この画面が出たら成功！

もしエラーが出たら、この辺の記事を参考に。

https://qiita.com/shiba_it/items/15319800151dde30e047

# 最後に

この後、プロジェクトを進める手順をまとめる予定です。

ポートフォリオを作りながらちょくちょく進めていきます。