概要
私用PC(Windows10)が壊れました。
なので新PC(Windows11)で同等の環境(Vagrant、VMware、CentOS7)を作ろうとしたら、CentOSのEOLやVagrant実行時のHyper-Vなどに阻まれうまいこといかなかったため、Dockerにて作り直すことにしました。
構築したい環境
過去に作成した環境が古めなのですがそちらに合わせたいため、以下の構築をゴールとしました。
- PHP 7.4
- Apache2
- MySQL5.7
- Laravel8(筆者の運用している音ゲーツールを動かせる状態にする)
Docker
Docker Desktopをインストール
ディレクトリ・設定ファイルの作成
プロジェクトフォルダ
┣━ docker
┃ ┣━ MySQL
┃ ┃ ┗━ Dockerfile
┃ ┗ php
┃ ┣━ 000-default.conf
┃ ┣━ Dockerfile
┃ ┗━ php.ini
┗━ docker-compose.yml
FROM mysql:5.7
# 新しめで作りたかったらphp:8.*にしましょう
FROM php:7.4-apache
RUN cd /etc/apache2/mods-enabled \
&& ln -s ../mods-available/rewrite.load
ADD php.ini /usr/local/etc/php/
ADD 000-default.conf /etc/apache2/sites-enabled/
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
# ここのNodesourceのURLはhttps://deb.nodesource.com/で確認しましょう
RUN curl -sL https://deb.nodesource.com/setup_20.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/
<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]
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
# version:は非推奨らしい(https://github.com/compose-spec/compose-spec/blob/main/spec.md#version-top-level-element-obsolete )
services:
db:
build: ./docker/mysql
ports:
- "33306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
# MYSQL_USER: はroot以外のユーザーの作成が必要あれば記述。
MYSQL_PASSWORD: root
MYSQL_DATABASE: ここは各自の作成したいデータベース名を記載
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 compose build
ちなみに筆者はnpm関連に3時間ほどかかった模様
起動
docker compose up
GitHubからClone
筆者の場合、composerのコマンドでLaravelのプロジェクトファイルを作成するのではなく、過去に作成済のLaravelのリポジトリを使用したかったのでGitHubからCloneします。
プロジェクトフォルダ
┣━ docker
┃ ┣━ MySQL
┃ ┃ ┗━ Dockerfile
┃ ┗ php
┃ ┣━ 000-default.conf
┃ ┣━ Dockerfile
┃ ┗━ php.ini
┣━ src ←ここのディレクトリにclone
┗━ docker-compose.yml
PHPのコンテナに入る
docker compose exec php bash
venderファイル作成
cloneしたリポジトリのcomposer.jsonとcomposer.lockファイルのところで
composer install
アクセス確認
ブラウザから http://localhost:8080/ へアクセス。
筆者の場合ルートのアクセス画面ではTOP画面が出るようになっているのでそれでアクセスできるか確認。
(TOPからDBへのアクセスが走るようなシステムの場合、DBに接続できないエラーになるかなと)
パーミッションエラーが出たらstorageフォルダの権限を疑うといいかもです。
docker compose exec php bash
でphpのコンテナに入り、storageフォルダの所有者をwww-dataに変更。
chown www-data storage/ -R
Laravelの.envファイルの設定
ここではDB部分のところについて記載します。
docker-compose.ymlに沿って記載しましょう。
DB_CONNECTION=mysql
DB_HOST=db #docker-compose.ymlのservices:の名前と一致させる必要があります
DB_PORT=3306
DB_DATABASE= #docker-compose.ymlに記載したMYSQL_DATABASE
DB_USERNAME=root
DB_PASSWORD=root
Migrationの実行
docker compose exec php bash
でphpのコンテナに入り、
php artisan migrate:fresh
以上でtableやseederがもともと作成済であればデータが入るので、
ブラウザから http://localhost:8080/ へアクセスして諸々使用できるようになっているかと思います。
その他
筆者はPhpstormでDBを参照していますがそちらの接続情報についても記載しておきます。
こちらも基本的にはdocker-compose.ymlの設定に沿ってあげればOKかと。
項目 | 設定値 |
---|---|
ホスト | localhost |
ポート | 33306 |
認証 | ユーザーとパスワード |
ユーザー | root |
パスワード | root |
参考にしたもの
DockerからLaravel環境構築メモ 〜PHP8.0 Apache2 MySQL8.0.20〜h
PHP7.4 ぼくのかんがえたさいきょうのphp.ini
EC2+DockerでLaravel環境構築時にブラウザに表示されたエラーを解決する
Laravelのmigrateエラー"No such file or directory"【Laravel×Docker】