14
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

All About Group(株式会社オールアバウト)Advent Calendar 2020

Day 15

PHP8.0 + Laravel6.x(LTS)環境をDocker Composeで手早く作る

Last updated at Posted at 2020-12-15

本記事はAll About Group(株式会社オールアバウト) Advent Calendar 2020 15日目になります。

概要三行

  • LAMP(PHP8.0) + Laravelの簡易開発環境をDocker Composeで作成
  • 基本コピペで誰でも作業できるように記述。
  • {}で囲んでいる箇所は任意に書き換えてください。

概要

PHP8.0が正式リリースされましたね。https://www.php.net/releases/8.0/en.php
実行速度の改善はありがたい限りです。
気になる楽しみ!ということで、今回はPHP8で遊べるように簡易のLAMP+laravel開発環境を構築いたしました。

環境構築_概要

使用技術 / 環境

  • Docker Compose
  • centos7
  • PHP8.0
  • laravel6.x(LTS)
  • MySQL(5.7)
  • phpMyAdmin

構成について

先に、今回作成する開発環境の構成を説明しておきます

{開発環境_命名は自由} /
├── docker-compose.yaml
├── web_php8/
|  ├── Dockerfile
|  └── setup/
|     ├──.bashrc
|     └── httpd/
|        └── app.conf
└── repository/
   └── {laravelアプリ(命名は自由)}
名称 種別 概要
{開発環境_命名は自由}/ 📂 ディレクトリ 今回の開発環境ファイルを束ねるディレクトリ
docker-compose.yaml 📝 ファイル docker composeの実行ファイル
web_php8/ 📂 ディレクトリ WEB系コンテナの関連ファイル置き場です
web_php8/Dockerfile 📝 ファイル 今回作成するWEB系コンテナのDocker Fileです
web_php8/setup/ 📂 ディレクトリ WEB系コンテナ内での設定ファイル郡です
web_php8/setup/.bashrc 📝 ファイル WEB系コンテナ内に適用するbashrcです
web_php8/setup/httpd/ 📂 ディレクトリ WEB系コンテナ内に適用するApacheの設定ファイル郡です
web_php8/setup/httpd/app.conf 📝 ファイル WEB系コンテナで摘要するconfファイルです
repository/ 📂 ディレクトリ WEBサーバーで稼働させるWEBアプリ置き場です
repository/{laravelアプリ(命名は自由)} 📂 ディレクトリ 今回WEB系コンテナ内で稼働させるLaravelアプリです

本件で立ち上がるコンテナは、WEB、DB、PHP-MY-ADMINの3つです。
最低限の環境なので、自由に変更/追加するといいと思います。

repository ディレクトリに保管したアプリをWEBコンテナ内にマウントしており、
アプリ開発する際には、localのrepository/{laravelアプリ(命名は自由)} を編集すれば、コンテナ内に反映されます。

URL

今回の構築にて作成されるURLを記載します

名称 URL
アプリURL http://localhost/
phpMyAdmin http://localhost:89/

前提

  • 筆者はMac端末で作業しております。
  • {}で囲んでいる箇所は任意に書き換えてください。
  • docker-composeは既に入っているものとします。

環境構築_手順

docker-compose.yamlの作成

複数のdockerコンテナを束ねるDocker Composeのyamlファイルを作成します。
※ {}で囲んでいる箇所は任意に書き換えてください

mkdir {開発環境_命名は自由}; cd {開発環境_命名は自由}
vim docker-compose.yaml

下記をdocker-compose.yamlに記述してください

docker-compose.yaml
version: '3'

services:
  web_php8:
    build:
      context: ./web_php8
    volumes:
      - ./repository/{laravelアプリ(命名は自由)}:/var/www/{laravelアプリ(命名は自由)}
      - ./web_php8/setup/.bashrc:/root/.bashrc
    ports:
      - "80:80"
    working_dir: /var/www/{laravelアプリ(命名は自由)}/
    environment:
      TZ: "Asia/Tokyo"

  db:
    image: mysql:5.7
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: test_db
      MYSQL_USER: test_user
      MYSQL_PASSWORD: test_pass
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
      TZ: "Asia/Tokyo"

  php-my-admin:
    image: phpmyadmin/phpmyadmin
    links:
      - db
    ports:
      - "89:80"
    environment:
      MYSQL_USERNAME: test_user
      MYSQL_ROOT_PASSWORD: test_pass
      PMA_HOST: db
      PMA_PORT: 3306

立ち上げる各コンテナとその設定を定義しています。
WEBコンテナはPHP8.0の導入など、色々やりたいので、個別でDockerFileを作成します。

WEB系コンテナの作成①Docker File編

WEB系のDockerコンテナを立ち上げるためのDocker Fileを作成します。

mkdir web_php8; cd web_php8
vim Dockerfile

下記をDockerfileに記述してください

FROM centos:centos7

# timezone
RUN rm -f /etc/localtime \
    && cp -p /usr/share/zoneinfo/Japan /etc/localtime

# php8.0
    RUN yum -y update \
    && yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm \
    && yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm \
    && yum -y install yum-utils \
    && yum-config-manager --disable 'remi-php*' && yum-config-manager --enable remi-php80 \
    && yum remove php* \
    && yum -y install php php-{cli,fpm,mysqlnd,zip,devel,gd,mbstring,curl,xml,pear,bcmath,json} \
    && php --version

# apache
RUN yum install -y httpd httpd-devel \
    && rm -rf /var/cache/yum/* \
    && yum clean all \
    && mkdir -p /app/ENV /AccessLog.local
COPY ./setup/httpd/app.conf /etc/httpd/conf.d/app.conf

# composer
RUN cd /tmp && curl -sS https://getcomposer.org/installer | php \
	&& mv ./composer.phar /usr/bin/composer

CMD ["httpd", "-D", "FOREGROUND"]

WEB系コンテナに必要なツール類や設定はここで定義しています。

WEB系コンテナの作成②関連ファイル編

WEB系コンテナ内にて摘要する各ファイルを作成しておきます

まずは、コンテナ内に適用するbashrcを作成します

mkdir setup; cd setup
vim .bashrc

中身は自由ですので、皆さんのお好きな設定を記述ください。
(マウントしちゃってもいいと思います)

次にApache confファイルを作成しておきます

mkdir httpd; cd httpd
vim app.conf

app.conf に下記を記述してください

app.conf
<VirtualHost *:80>
  ServerName localhost
  DocumentRoot /var/www/{laravelアプリ(命名は自由)}/public
  ErrorLog  "/dev/stdout"
  CustomLog "/dev/stdout" combined

  <Directory /var/www/{laravelアプリ(命名は自由)}/public>
    AllowOverride All
    Options Includes FollowSymLinks
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

Laravelアプリケーション_①アプリのclone

実際に稼働するLaravelアプリを作っていきましょう。

ディレクトリを移動して、laravelをgit cloneします。
ここではWEBアプリはrepositoryディレクトリ配下で管理するようにしています。

cd ../../../
mkdir repository; cd repository
git clone -b 6.x https://github.com/laravel/laravel.git {適当なアプリ名}

環境の立ち上げ

下記にてdocker-composeを実行。

cd で移動しまくってて、わかりにくく申し訳ないですが
docker-compose.yamlと同階層で実行すればOKです。

cd ../
docker-compose up

各環境が立ち上がり、各コンテナのログが流れ始めたことを確認します。

Laravelアプリケーション_②初期設定

laravelをcloneした後に実行するお作法です。
権限とcomposer、そしてenv周り

cd repository/{laravelアプリ(命名は自由)}
chmod -R 777 storage
chmod -R 777 bootstrap/cache
docker-compose exec web_php8 /bin/bash -c “composer install”
cp -p .env.example .env
php artisan key:generate

この時点で http://localhost:/ にアクセスし、Laravelのテストページが表示されていたら、構築成功です。

Laravelアプリケーション_③DB周り初期設定

.envに本環境のDB設定を記述しましょう

sed  -e 's/DB_HOST=127.0.0.1/DB_HOST=db/' .env
sed  -e 's/DB_DATABASE=laravel/DB_DATABASE=test_db/' .env
sed  -e 's/DB_USERNAME=root/DB_USERNAME=test_user/' .env
sed  -e 's/DB_PASSWORD=/DB_PASSWORD=test_pass/' .env

接続テスト兼、DBマイグレーション
下記にてmigrateを実行をし、デフォルトのテーブル郡が作成できれば成功です。

docker-compose exec web_php8 /bin/bash -c “cd /app/operation-cms && php artisan migrate

方法は何でもいいですが一例として。
下記にてphpMyAdminからDB内を確認できます。
http://localhost:89/

14
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?