本記事は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
に記述してください
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
に下記を記述してください
<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/