1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DockerでPHPのLaravel環境作り直し

Posted at

概要

私用PC(Windows10)が壊れました。
なので新PC(Windows11)で同等の環境(Vagrant、VMware、CentOS7)を作ろうとしたら、CentOSのEOLやVagrant実行時のHyper-Vなどに阻まれうまいこといかなかったため、Dockerにて作り直すことにしました。

構築したい環境

過去に作成した環境が古めなのですがそちらに合わせたいため、以下の構築をゴールとしました。

Docker

Docker Desktopをインストール

ディレクトリ・設定ファイルの作成

ディレクトリ構造
プロジェクトフォルダ
┣━ docker
┃ ┣━ MySQL
┃ ┃ ┗━ Dockerfile
┃ ┗ php
┃   ┣━ 000-default.conf
┃   ┣━ Dockerfile
┃   ┗━ php.ini
┗━ docker-compose.yml
Dockerfile(MySQL)
FROM mysql:5.7
Dockerfile(PHP)
# 新しめで作りたかったら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/
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
[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
# 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

スクリーンショット 2024-10-18 154107.png

参考にしたもの

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】

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?