Quantcast
Viewing all articles
Browse latest Browse all 113

php7.4のLaravel環境をDockerでつくる

はじめに

DockerでLaravel環境作ってログインできるまでをハンズオン形式で進めます。
ローカル環境ちゃちゃっと作って開発したい人向けなので、詳細説明はありません。
せっかくなので最近リリースされたPHP7.4を使ってみます。

環境

  • php7.4
  • Apache2
  • MySQL5.7

0. 事前準備

0-1. Dockerインストール

Mac,Windows ProならDocker、Homeならdocker toolbox
dockerならHyper-V設定も忘れずに

会社でよくあるWindowsProなら↓を参考に
https://www.koreyome.com/web/docker-install-for-windows/
0. CPU仮想環境設定を確認
1. Hyper-V設定
2. Dockerインストール
3. docker-compose

インストール確認

$ docker-compose -v

0-2. VSCodeのターミナルを準備(任意)

初心者でもつまずかないよう統一して VSCode の Terminal を git bash にしています。
GitBashは入っている前提です。

  1. setting表示 (Ctl+,)
  2. terminal.integrated.shell.windows 入力
  3. Edit in settings.json 選択
  4. GitBash 選択
    (例) "terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe"
  5. Terminal表示(Ctl+Shift+@)
  6. 1:bash になる

1. ディレクトリ構成とファイル作成

githubからcloneするか、ファイルを作成してください。

1-1. クローンする場合

git clone https://github.com/qvtec/laravel-docker-base.git

2-1. ファイルを作成する場合

ディレクトリ構成は下記のようになります

docker
├── db
│   └── my.conf
├── php-apache
│   ├── 000-default.conf
│   ├── default-ssl.conf
│   ├── php.ini
│   └── Dockerfile
├── .env
└── docker-compose.yml

Dockerfile 作成

composer も node もインストールしているので、別コンテナにしてもいいかもしれません

Dockerfile
FROM php:7.4.0-apacheCOPY ./php.ini /usr/local/etc/php/COPY ./sites/*.conf /etc/apache2/sites-available/ARG TZ=Asia/TokyoARG NODE_VERSION=8.xRUN set-xe;\
    apt-get update -yqq&&\
    apt-get install-yqq--no-install-recommends\
      apt-utils vim gettext git \
      default-mysql-client \
# for gd
      libfreetype6-dev \
      libjpeg62-turbo-dev \
      libpng-dev \
      libwebp-dev \
      libxpm-dev \
      # for ImageMagick
      libmagickwand-dev \
      # for zip
      libzip-dev zip unzip \
      # for oniguruma
      libonig-dev \
    && docker-php-ext-install bcmath gettext mbstring mysqli pdo pdo_mysql zip \
    && docker-php-ext-configure mbstring --disable-mbregex \
    && docker-php-ext-configure zip --with-libzip \
    # gd
    && docker-php-ext-install -j$(nproc) iconv \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd \
    # imagick
    && pecl install imagick \
    && docker-php-ext-enable imagick \
    # enable mod_rewrite
    && a2enmod rewrite \
    # enable ssl
    && a2enmod ssl \
    # enable site
    && a2ensite default-ssl \
    # for ssl
    && apt-get update \
    && apt-get -y install ngrep \
    && openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=JP/CN=localhost" \
        -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt \
    # set timezone
    && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone \
    # node
    && curl -sL https://deb.nodesource.com/setup_$NODE_VERSION | bash - \
    && apt-get install -y nodejs npm \
    # install composer
    && cd '/' \
    && php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
    && php composer-setup.php \
    && php -r "unlink('composer-setup.php');" \
    && mv composer.phar /usr/local/bin/composer

ENV COMPOSER_ALLOW_SUPERUSER 1ENV COMPOSER_HOME /composerENV PATH $PATH:/composer/vendor/bin# laravel installerRUN composer global require "laravel/installer"\
&& composer global require "laravel/envoy"WORKDIR /var/www/html

docker-compose.yml 作成

docker-compose.yml
version:'3'services:work:build:context:./phpvolumes:-${PROJECT_PATH}:/var/www/html:cached-node_modules:/var/www/html/node_modulesports:-${WEB_PORT}:80-${WEB_SSL_PORT}:443depends_on:-mysqlmysql:image:mysql:5.7volumes:-mysql_data:/var/lib/mysqlenvironment:MYSQL_ROOT_PASSWORD:rootMYSQL_DATABASE:${DB_NAME}MYSQL_USER:${DB_USER}MYSQL_PASSWORD:${DB_PASS}TZ:${TZ}ports:-${DB_PORT}:3306phpmyadmin:image:phpmyadmin/phpmyadminenvironment:-PMA_ARBITRARY=1-PMA_HOST=mysql-PMA_USER=root-PMA_PASSWORD=rootports:-${PMA_PORT}:80redis:image:redis:latestports:-${REDIS_PORT}:6379volumes:-redis_data:/datacommand:redis-servervolumes:mysql_data:node_modules:redis_data:

.env 作成

COMPOSE_PROJECT_NAME はプロジェクト名に変更する
使っていないポートにする

.env
COMPOSE_PROJECT_NAME=laravel-docker-base
PROJECT_PATH=../src

WEB_PORT=80
WEB_SSL_PORT=443
DB_PORT=3306
PMA_PORT=8080
REDIS_PORT=6379

TZ=Asia/Tokyo
DB_NAME=docker
DB_USER=docker
DB_PASS=secret

apache conf 作成

httpとhttpsの両方を作成します

000-default.conf
<VirtualHost *:80>
  ServerName local.test.com
  DocumentRoot /var/www/html/public/

  <Directory /var/www/html/public>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Require all granted
  </Directory>

  ErrorLog /var/log/apache2/error.log
  CustomLog /var/log/apache2/access.log combined
</VirtualHost>

ssl が不要の場合は、下記ファイルが不要で
Dockerfile の a2ensite default-sslと # for ssl の項目を削除する

default-ssl.conf
<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        ServerName local.test.com
        DocumentRoot /var/www/html/public
        ErrorLog /var/log/apache2/error.log
        CustomLog /var/log/apache2/access.log combined
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
        SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
        <FilesMatch "\.(cgi|shtml|phtml|php)$">
            SSLOptions +StdEnvVars
        </FilesMatch>

        <Directory /usr/lib/cgi-bin>
            SSLOptions +StdEnvVars
        </Directory>
        Options Indexes FollowSymLinks

        <Directory "/var/www/html/public/">
            AllowOverride All
            Require all granted
        </Directory>
    </VirtualHost>
</IfModule>

php 設定ファイル

php.ini
[Date]date.timezone="Asia/Tokyo"[mbstring]mbstring.internal_encoding="UTF-8"mbstring.language="Japanese"

mysql 設定ファイル

my.conf
[mysqld]
character-set-server=utf8
datadir = /var/lib/mysql

2. Docker起動

2-1. docker設定ファイルの作成

cloneしている場合は.env.exampleをコピーして.envを修正する

cd docker/
cp .env.example .env

2-2. ビルドと起動

docker-compose up -d--build

2-3. コンテナ接続

docker-compose exec work bash

3. Laravelインストール

workコンテナで実行する

3-0. Laravelプロジェクト作成

laravel new

3-1. Laravel設定ファイル

cp .env.example .env
DB_HOST=mysql
DB_USSERNAME=root
DB_PASSWORD=root

CACHE_DRIVER=redis
REDIS_HOST=redis

MAIL_DRIVER=log

3-2. composer install

composer dump-autoload
composer install

3-3. マイグレーション

php artisan migrate

4. hosts設定と表示

127.0.0.1 local.admin.com

https://local.admin.com/

表示できましたか?

エラー対応

ハンズオンでエラーになった人がいたので対処法

ERROR: for web Cannot create container for service web: b'Drive sharing failed for an unknown reason'
ERROR: Encountered errors while bringing up the project.

bドライブ使ってないと思うので、dockerの設定変更が必要
http://kdnakt.hatenablog.com/entry/2019/09/12/080000

xamppでmysqlが接続できなくなった

ポート変更が必要
.envで3306→3316とか使ってないポートに変更する

さいごに

laradockを使っていましたが遅かったので、phpの公式のphp-apacheを使うようになりました。
まだdocker歴が短いので、ベストな状態かはわかりません。
なにかあれば教えてください。


Viewing all articles
Browse latest Browse all 113

Trending Articles