Заготовка PHP-проекта

Docker PHP Сниппеты

Иногда для тестирования какой-либо библиотеки или шаблона требуется быстро развернуть отдельное окружение для разработки. Данная заготовка PHP-проекта как раз предназначена для таких задач. Она включает в себя PHP (+xDebug), NGINX и MySQL. Репозиторий на GitHub.

Основные файлы

docker-compose.yml
version: '3.7'

services:
  nginx:
    image: nginx
    volumes:
      - ./:/app
      - ./docker/nginx/default.nginx:/etc/nginx/conf.d/default.conf
    ports:
      - "80:80"
    depends_on:
      - php
    networks:
      - default
  php:
    build:
      context: ./docker/php
    volumes:
      - ./:/app
      - ./docker/php/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini
    environment:
      - PHP_IDE_CONFIG=serverName=mytestservername
  db:
    image: mysql:5.7
    restart: always
    environment:
      - MYSQL_DATABASE=my_database_name
      - MYSQL_USER=my_user_name
      - MYSQL_PASSWORD=my_user_password
      - MYSQL_ROOT_PASSWORD=my_root_password
      - MYSQL_ROOT_HOST:%
    ports:
      - '3306:3306'
    expose:
      - '3306'
    volumes:
      - ./docker/mysql:/var/lib/mysql
    networks:
      - default

networks:
  default:
    driver: bridge
composer.json
{
  "name": "vendor-name/package-name",
  "type": "project",
  "description": "Description of the project.",
  "license": "MIT",
  "require": {},
  "require-dev": {},
  "autoload": {
    "psr-4": {
      "App\\": "src/"
    }
  },
  "autoload-dev": {
    "psr-4": {
      "Tests\\": "tests/"
    }
  }
}
docker/php/Dockerfile
FROM php:8.0-fpm

RUN apt-get update && apt-get install -y \
        libzip-dev \
        zip \
	&& docker-php-ext-configure zip \
	&& docker-php-ext-install zip \
	&& docker-php-ext-install mysqli

RUN pecl install xdebug \
    && docker-php-ext-enable xdebug

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

WORKDIR /app
docker/php/xdebug.ini
[xdebug]
xdebug.mode = debug
xdebug.client_host  = host.docker.internal
docker/nginx/default.conf
server {
    listen 80;

    root /app/public;

    index index.php;

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

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

    location ~ /\.ht {
        deny  all;
    }
}

Комментарии (0)

Войдите, чтобы оставить комментарий.