概要
自分が個人開発用に構築しているDockerの開発環境を紹介します。
ざっくり内容をまとめると以下の通りです。
構築内容
- php-fpm
- Nginx
- postgreSQL
- herokuではpostgreSQLがデフォルトのようなので一応postgreSQLにしています。MySQLでもできないことはないと思います。
- redis
- laravelでのセッション管理に使用します。predis不使用です。
その他
- https-portalによるhttps化
- xdebug設定
- gzip圧縮させたcssやjsファイルへの対応
実行環境
- Windows 10 Pro
- Docker Deskptop for Windows (2.1.0.5)
テンプレートのGithubリポジトリ
注意
Dockerについての基礎知識などはこの記事では触れておりませんので、他の方のqiita記事などを参考にしてください
ファイル内容
ディレクトリ構成
[laravel-project]
├── docker
│ └── php
│ │ └── Dockerfile
│ │ └── php.ini
│ └── web
│ └── default.conf
└── docker-compose.yml
※[laravel-project]は「laravel new [laravel-project]」などのコマンドで新しくプロジェクトを作成した時のディレクトリ名を想定しています
docker-compose.yml
version: '3'
services:
https-portal:
image: steveltn/https-portal:1
ports:
- 80:80
- 443:443
depends_on:
- web
restart: always
environment:
DOMAINS: 'dockertest.com -> http://web:8000'
STAGE: local
volumes:
- ssl-certs:/var/lib/https-portal
web:
image: nginx:1.15.6
ports:
- "8000:8000"
depends_on:
- app
volumes:
- ./docker/web/default.conf:/etc/nginx/conf.d/default.conf
- .:/var/www/html
command: [nginx, '-g', 'daemon off;']
app:
build: ./docker/php
volumes:
- ./docker/php/php.ini:/usr/local/etc/php/php.ini
- .:/var/www/html
db:
image: postgres:10.1
ports:
- "5432:5432"
environment:
- "POSTGRES_USER=postgres"
- "POSTGRES_PASSWORD=secret"
volumes:
- db-data:/var/lib/postgresql/data
redis:
image: redis:latest
ports:
- "6379:6379"
volumes:
- redis-data:/data
volumes:
ssl-certs:
db-data:
redis-data:
php
FROM php:7.2-fpm
COPY php.ini /usr/local/etc/php/
# install composer
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 vim libpq-dev libfreetype6-dev libjpeg62-turbo-dev libpng-dev
RUN docker-php-ext-install pdo_pgsql
RUN pecl install xdebug-2.9.8 && \
docker-php-ext-enable xdebug
RUN pecl install redis && \
docker-php-ext-enable redis
WORKDIR /var/www/html
post_max_size=10M
upload_max_filesize=10M
[date]
date.timezone="Asia/Tokyo"
[xdebug]
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_host=host.docker.internal
xdebug.remote_port=9001
web(nginx)
server {
listen 8000;
server_name dockertest.com;
gzip on;
gzip_types image/png image/gif image/jpeg text/javascript text/css;
gzip_min_length 1000;
gzip_proxied any;
gunzip on;
root /var/www/html/public;
index index.php index.html index.htm;
client_max_body_size 10m;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/www/html/public/index.php;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
その他
redis設定
Heroku Redisでは接続情報のREDIS_URLが変更される可能性があるようなので、そのあたりを予め対応しておきます。
Heroku上のLaravelでRedisを使う - Qiita
Laravel5.5: セッションの保存にRedisを使う (Heroku) - Qiita
<?php
if (getenv('REDIS_URL')) {
$url = parse_url(getenv('REDIS_URL'));
putenv('REDIS_HOST='.$url['host']);
putenv('REDIS_PORT='.$url['port']);
putenv('REDIS_PASSWORD='.$url['pass']);
}
use Illuminate\Support\Str;
env
dockerの構築に合わせてenvファイルを書き換えます
DB_CONNECTION=pgsql
DB_HOST=db
DB_PORT=5432
DB_DATABASE=postgres
DB_USERNAME=postgres
DB_PASSWORD=secret
SESSION_DRIVER=redis
# REDIS_HOST=redis
# REDIS_PASSWORD=null
# REDIS_PORT=6379
REDIS_URL=redis://hoge:null@redis:6379
hosts
ipconfigコマンドを実行して
イーサネット アダプター vEthernet (DockerNAT)->IPv4 アドレスに表示されているIPアドレスに設定します
(googleのOAuthログインの実行確認の際に、.testなどのテスト用トップレベルドメインでは設定できないようだったので、自分は.comドメインにしています。)
# [DockerNAT IPv4アドレス] [https-portalで設定したドメイン]
127.0.75.1 dockertest.com
launch.json
エディタやIDE側もxdebugの設定をします。
以下はvscodeでの設定例です。
これを行うことで、vscode上のブレークポイントを設定すればデバッグができるようになります。
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9001,
"log": true,
"pathMappings": {
"/var/www/html": "${workspaceFolder}"
}
}
]
}
実行
以下のコマンドでdockerコンテナを立ち上げます。
(自分はdocker拡張機能を入れたvscodeでF1押下から立ち上げています)
docker-compose up -d --build
あとはdockertest.com(https-portalで設定したドメイン)にブラウザで接続すればOKです
おわりに
以上が、自分がいつも使っているdockerの内容です。
万人受けするものではないと思いますが、丸々コピーしていただいてもいいですし、足りない部分は追加したり、カスタムして使っていただければと思います。
参考URL
docker-composeでNginx + Laravel5.8(PHP7.3) + PostgreSQLの環境を作る - Qiita
https-portalで既存のdocker環境をhttps化 | RE:ENGINES
Apache(Heroku)+laravel+vue.js環境下でgzip圧縮によるサイトパフォーマンス向上 - Qiita