16
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

docker-composeでNginx + Laravel5.8(PHP7.3) + PostgreSQLの環境を作る

Last updated at Posted at 2019-08-22

概要

何番煎じかわかりませんが、仕事の関係でLaravelの環境を作る事になったので記事として残しておきます。
PostgreSQLなのはHerokuでHerokuConnectを使いたいという理由からです。
MySQLでも変更点はほとんどないでしょう。

構成図

laravel-docker.png

コードだけくれ!って人用に

コピペだけじゃなくて何故動くかも知りたい人用に

ディレクトリ構成

dockerというディレクトリを作成し、そこに色々格納するようにしてあります。

.
├── Dockerfile
├── app
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── docker
│   ├── app
│   │   └── conf
│   ├── db
│   │   ├── data
│   │   └── sql
│   └── nginx
│       ├── Dockerfile
│       └── conf
├── docker-compose.yml
├── package.json
├── phpunit.xml
├── public
├── readme.md
├── resources
├── routes
├── server.php
├── storage
├── tests
├── vendor
└── webpack.mix.js

Dockerfile

気をつけるところはPHPの拡張を入れるところでしょうか。
「docker-php-ext-install」を利用しないとinstallすることができませんでした。

FROM php:7.3.6-fpm

ENV TZ Asia/Tokyo
ENV COMPOSER_ALLOW_SUPERUSER 1

# install Lib for composer
RUN apt-get update -qq && \
    apt-get install --no-install-recommends -y libpq-dev git zip unzip && \
    apt-get clean && \
    rm -rf /var/cache/apt

RUN docker-php-ext-install mbstring pdo pdo_pgsql

# php.conf php-fpm.conf
COPY docker/app/conf/php/php.ini /usr/local/etc/php/php.ini
COPY docker/app/conf/php/docker.conf /usr/local/etc/php-fpm.d/docker.conf

# install Composer
RUN curl -sS https://getcomposer.org/installer | php && \
    mv composer.phar /usr/local/bin/composer && \
    chmod +x /usr/local/bin/composer

COPY . /app

WORKDIR /app
RUN /usr/local/bin/composer install -d /app

# change owner
RUN chown www-data:www-data -R ./

docker-compose.yml

nginxとappで同じところにmountする事で静的ファイルも返せるようにしてあります。
また、コンテナのログはこちらの記事と同じように調整してあります。
https://qiita.com/nagi125/items/59f2cb1742e50053a6e2

docker-compose.yml
version: '3'
services:
  nginx:
    container_name: nginx
    build: ./docker/nginx
    ports:
      - 80:80
    volumes:
      - ./:/app
    depends_on:
      - app

  app:
    container_name: app
    build: ./
    environment:
      APP_ENV: 'development'
      APP_DEBUG: 'true'
      LOG_CHANNEL: 'stderr'
      DB_CONNECTION: 'pgsql'
      DB_HOST: 'db'
      DB_PORT: '5432'
      DB_DATABASE: 'laravel_development'
      DB_USERNAME: 'docker'
      DB_PASSWORD: 'docker'
    volumes:
      - ./:/app
    expose:
      - 9000
    depends_on:
      - db

  db:
    image: postgres:10.6
    container_name: db
    environment:
      TZ: 'Asia/Tokyo'
      POSTGRES_USER: 'docker'
      POSTGRES_PASSWORD: 'docker'
      POSTGRES_DB: 'laravel_development'
    volumes:
      - ./docker/db/data:/var/lib/postgresql/data
      - ./docker/db/sql:/docker-entrypoint-initdb.d
    ports:
      - 5432:5432

Nginxの設定

Symfonyに比べるとシンプルに書けたので驚きました。

default.conf
server {
    listen 80;

    root  /app/public;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass   app:9000;
        fastcgi_index  index.php;

        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param  PATH_INFO $fastcgi_path_info;
    }
}

立ち上げコマンド

$ docker-compose build
$ docker-compose up

注意事項

vendorが作られない場合はdocker-composeのvolumeの仕様が悪さしている可能性がありますので、下記のコマンドを実行してください

$ docker-compose exec app composer install
16
14
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
16
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?