概要
何番煎じかわかりませんが、仕事の関係でLaravelの環境を作る事になったので記事として残しておきます。
PostgreSQLなのはHerokuでHerokuConnectを使いたいという理由からです。
MySQLでも変更点はほとんどないでしょう。
構成図
コードだけくれ!って人用に
コピペだけじゃなくて何故動くかも知りたい人用に
ディレクトリ構成
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