LoginSignup
0
0

More than 3 years have passed since last update.

PHP Slim 環境構築(9) 設定ファイル

Last updated at Posted at 2019-10-01

PHP Slim 環境構築(9) 設定ファイル

Introduction

前回は、ローカルS3(互換)をdockerで立てて、それにアクセスしてみました。
今回は、設定ファイルなどを少し整理してみます。

変更点

ソースツリー

前回からの変更・追加ソースは以下の通りです。

$(PROJECTROOT)
  /compose
    /web_front
      Dockerfile
      local.conf                           (default.confからのrename)
    /web_hoge
      Dockerfile
      php.ini
      settings.php
    docker-compose-common.yml              (docker-compose.ymlからのrename)
    docker-compose-local.yml
  /src
    /hoge
      /public
        index.php

/web_front/Dockerfile

Nginxの設定ファイルを環境(local, developmentなど)毎に変更できるように修正しました。
docker-composeでenvironment, environmentkeyを指定します。
なお、environmentが環境、environmentkeyが環境内の枝番(developement-1とかlocal-hogebranchとか)です。

/compose/web_front/Dockerfile
FROM nginx:1.17.3

ARG environment

# settings
COPY ${environment}.conf /etc/nginx/conf.d/default.conf

RUN deluser www-data \
    && addgroup --system --gid 1000 www-data \
    && adduser --system --home /var/www --no-create-home --uid 1000 --gid 1000 \
       --disabled-password --disabled-login --shell /usr/sbin/nologin www-data

EXPOSE 3128
EXPOSE 8443

/web_front/local.conf

default.confからrenameしただけで中身は変更していません。

/web_hoge/Dockerfile

phpの設定と、DB接続情報などを環境毎に変更できるようにしました。
/web_front/Dockerfileと同様に、docker-composeでenvironmentを指定します。

なお、php-fpmの設定は今回変更していませんが、php.iniと同様の方法で、/usr/local/etc/php-fpm.d/zz-overwrite.confなどに設定をコピーするようにすることで設定を変更することもできます。

/compose/web_hoge/Dockerfile
FROM php:7.3.9-fpm-alpine3.10

ARG environment

...(略)...
# xdebug(2.7.2) extension=xdebug.so
RUN if [ "${environment}" = "local" ]; then \
     pecl install xdebug-2.7.2 \
  && docker-php-ext-enable xdebug \
  && echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
  && echo "xdebug.remote_connect_back=0" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
  && echo "xdebug.remote_autostart=0" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
  ; fi

# settings
COPY settings.php /var/www/settings.php

# PHP conf
COPY php.ini /usr/local/etc/php/conf.d/php.ini

RUN apk del --purge .build-deps \
  && docker-php-source delete \
  && rm -rf /var/cache/apk/* \
  && rm -rf /tmp/*

...(略)...

/web_hoge/php.ini

エラーログを出力するようにしています。出力先はphp-fpmのデフォルト設定である標準エラー出力になります。
したがって、docker-compose logsコマンドでエラーログを見ることができます。

/compose/web_hoge/php.ini
[PHP]
log_errors = On
display_startup_errors = On
error_reporting = E_ALL
upload_max_filesize = 256M

/web_hoge/settings.php

/src/hoge/public/index.phpのDIコンテナの設定部分を抜き出しただけです。

/compose/web_hoge/settings.local.php
<?php

return [
    'userdb' => [
        'host' => 'mysql',
        'dbname' => 'userdb',
        'user' => 'scott',
        'password' => 'tiger'
    ],
    'logdb' => [
        'host' => 'postgresql',
        'dbname' => 'logdb',
        'user' => 'root',
        'password' => 'hogehoge'
    ],
    'redis' => [
        'host' => 'redis'
    ],
    'dynamodb' => [
        'endpoint' => 'http://dynamodb:8000',
        'region' => 'ap-northeast-1'
    ],
    'storage' => [
        'endpoint' => 'http://storage:9000',
        'region' => 'ap-northeast-1'
    ]
];

docker-compose-common.yml, docker-compose-local.yml

前までのdocker-compose.ymlを環境依存の部分と非依存の部分で分けました。
そのため、docker-composeコマンドを実行する場合は、以下のように設定ファイルを指定する必要があります
(-fは指定した順序に読み込まれ、後に指定した設定によって上書きされます)。

$ docker-compose -f docker-compose-common.yml -f docker-compose-local.yml build

docker-compose-common.ymlは旧docker-compose.ymlからサーバ名などの部分を取り除いた部分になります。

/compose/docker-compose-common.yml
version: '3'

services:
  web_front:
    build:
      context: ./web_front
    ports:
      - "80:3128"
      - "443:8443"
    volumes:
      - ../certs:/etc/certs:ro
    container_name: web_front
    networks:
      - private_net

  web_hoge:
    build:
      context: ./web_hoge
    volumes:
      - ../src/hoge:/var/www/hoge
      - ../src/vendor:/var/www/vendor
    container_name: web_hoge
    networks:
      - private_net

  redis:
    build:
      context: ./redis
    volumes:
      - redis-data:/var/lib/redis
    ports:
      - "16379:6379"
    sysctls:
      - net.core.somaxconn=1024
    container_name: redis
    networks:
      - private_net

  mysql:
    build:
      context: ./mysql
    volumes:
      - mysql-data:/var/lib/mysql
    ports:
      - "13306:3306"
    container_name: mysql
    networks:
      - private_net

  postgresql:
    build:
      context: ./postgresql
    volumes:
      - postgresql-data:/var/lib/postgresql
    ports:
      - "15432:5432"
    container_name: postgresql
    networks:
      - private_net

  dynamodb:
    image: amazon/dynamodb-local
    container_name: dynamodb
    ports:
      - "18000:8000"
    networks:
      - private_net

  storage:
    image: minio/minio
    volumes:
      - storage-data:/data
    container_name: storage
    ports:
      - "19000:9000"
    environment:
      MINIO_ACCESS_KEY: minio
      MINIO_SECRET_KEY: miniminio
    command: server /data
    networks:
      - private_net

volumes:
  redis-data:
  mysql-data:
  postgresql-data:
  storage-data:

networks:
  private_net:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.28.0.0/24

逆に、docker-compose-local.ymlはdocker-compose-common.ymlから取り除かれた部分になります。

/compose/docker-compose-local.yml
version: '3'

services:
  web_front:
    build:
      args:
        - environment=local
        - environmentkey=

  web_hoge:
    build:
      args:
        - environment=local
        - environmentkey=
    environment:
      XDEBUG_CONFIG: "remote_host=172.28.0.1"
      PHP_IDE_CONFIG: "serverName=hoge.localhost"
    domainname: localhost

index.php

以前のソースで、ContainerBuilder::addDefinitionsを呼び出したとき設定していたsettingsを、外部から呼び出してきてセットするように修正しています。

/src/hoge/public/index.php

...()...

/** @var Composer\Autoload\ClassLoader $loader */
$loader = require __DIR__ . '/../../vendor/autoload.php';
$loader->addPsr4('Hoge\\', __DIR__ . '/../lib');

$settings = require __DIR__ . '/../../settings.php';

$containerBuilder = new ContainerBuilder();
$containerBuilder->addDefinitions([
    'settings' => $settings,
    'userdb' => function (ContainerInterface $container) {

ここまでのソース

こちらでどうぞ。

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