Задонатить и смотреть →
Открой безлимитный доступ к 100+ полезных скринкастов и получай скидки на все предстоящие мероприятия

Сервер и структура проекта

Сегодня подготовим всю необходимую инфраструктуру. Установим и настроим локальный HTTP-сервер Nginx c PHP-FPM в Docker. А потом определим структуру файлов и директорий проекта для написания наших классов. Сделаем автозагрузку классов для фреймворка и демо-приложения с помощью Composer. Для тестирования установим PHPUnit и напишем свой первый тест. И заодно настроим интеграцию PHP и запуска тестов в PHPUnit.

  • 00:01:29 - Демонстрационная HTML-страница
  • 00:02:05 - Настройка табуляции с editorconfig
  • 00:06:58 - Недостатки ручной установки
  • 00:08:03 - Использование виртуализации
  • 00:10:13 - Использование контейнеров
  • 00:13:26 - Запуск процессов через Docker
  • 00:18:11 - Создание своего образа с Nginx
  • 00:20:51 - Работа с Docker Compose
  • 00:23:05 - Установка PHP-FPM
  • 00:26:52 - Упрощение запуска в терминале
  • 00:28:56 - Философия одного процесса
  • 00:30:58 - Консольный процесс PHP-CLI
  • 00:32:45 - Переопределение пользователя
  • 00:35:30 - Установка Composer
  • 00:39:38 - Инициализация проекта
  • 00:40:37 - Сортировка зависимостей
  • 00:40:55 - Интеграция PHP в PhpStorm
  • 00:43:37 - Структура исходного кода
  • 00:44:40 - Автозагрузка классов проекта
  • 00:47:14 - Подключение PHPUnit
  • 00:49:19 - Донастройка тестов
  • 00:51:23 - Подключение автозагрузчика
  • 00:51:58 - Пробный класс и тест
  • 00:54:07 - Команда запуска тестов
  • 00:55:13 - Запуск тестов в PhpStorm
  • 00:56:48 - Общепринятый Code Style
  • 00:59:33 - Установка PHP CS Fixer
  • 01:02:56 - Команды запуска
  • 01:04:57 - Запуск Composer из Docker в PhpStorm
  • 01:06:36 - Статический анализ кода
  • 01:07:46 - Использование Psalm
  • 01:10:12 - Автопроверка в PhpStorm
  • 01:12:43 - Обзор результата
Скрытый контент (код, слайды, ...) для подписчиков. Открыть →
Дмитрий Елисеев
elisdn.ru
Комментарии (27)
Андрей

Спасибо!

Ответить
Руслан

Спасибо!

Ответить
v

Крутой урок!

Ответить
Александр

Спасибо большое за урок. Вроде бы знакомая информация, но есть много интересных тонкостей

Ответить
Фарух

Дабавьте лайки. Хочется поставить лайк но нет такой возможности :) :)

Ответить
slo_nik

Доброе утро.

Самый лучший "лайк" это написать словами благодарность Дмитрию.

p.s. Что вы, в самом деле, как неандертальцы!!! Что, без "наскальной" живописи никак не можете выразить свои мысли?

Ответить
Фарух

Неандерталец это ты, раз не понял что я своим комментарием выразил слова благодарности в завуалированной форме.

Ответить
fedot

Не лайки а линк доната, куда можно ливануть бабла в багодарность, К тому же надо учитывать, что реализация нового функционала, отнимет время от уроков, которые и так не особо часто выходят, поэтому не стоит отвлекать Диму всякой не нужной хернёй. Спасибо, за урок Дима.

Ответить
Алексей

Спасибо большое, ждём следующих эпизодов.

Ответить
Дмитрий

С нетерпением жду продолжения именно этого проекта...

Ответить
maxbrown1

Шикарный урок!

Ответить
slo_nik

Дмитрий, как всегда урок прекрасен.

Благодарю.

Ответить
Nik

Видео: 0:49 "В этом проекте мы не будем с вами рассматривать разные асинхронные вещи. И вместо этого будем использовать классическую связку из веб-сервера nginx и отдельно запущенного менеджера php-процессов php-fpm"

Интересно, о каких асинхронных вещах говорится? Что можно использовать вместо связки nginx + php-fpm?

Ответить
Дмитрий Елисеев

В простейшем случае можно взять простой асинхронный сервер RoadRunner для запуска нашего обычного синхронного приложения.

В сложном случае можно построить полностью асинхронное приложение на асинхронных пакетах вроде Swoole, ReactPHP и AmPHP.

Ответить
Игорь

Спасибо вам, Дмитрий и Юлия! Понятно разобрана настройка докера и запуск контейнеров.

Ответить
Евгений

Спасибо!

Ответить
Ринат

Не могу победить. Версия композер 2.3.5

docker-compose run --rm php-cli composer init

На этапе установки зависимости для PHP

Enter the version constraint to require (or leave blank to use the latest version): 

In BaseCommand.php line 304:
                                                                                                                                  
  [LogicException]                                                                                                                
  Calling getPlatformRequirementFilter from a command which does not define the --ignore-platform-req[s] flags is not permitted.

Нашел что они тут правили это.

Но так и не понял почему не работает. Если речь про install - то мы же его не устанавливаем чтобы передать параметр --ignore-platform-reqs. А просто копируем

COPY --from=composer:2 /usr/bin/composer /usr/local/bin/composer

Вообщем не понимаю как победить

Ответить
Дмитрий Елисеев

Это только в версии 2.3.5 или ещё и в других? Если только в этой, то можно попробовать другую:

--from=composer:2.3.4
Ответить
Максим

Вот не сработала почему-то эта магия с RUN addgroup
Потому что на composer install выдавало ошибку:

/app/vendor does not exist and could not be created.

Пришлось закомментить
USER app
чтобы композер устанавливал всё необходимое.

А, и почему-то ругалось на версию в docker-compose.yml
2.9 ему не нравилось, а вот 3.0 в самый раз. Вот сам текст ошибки:

"ERROR: Version in "./docker-compose.yml" is unsupported. You might be seeing this error because you're using the wrong Compose file version. Either specify a supported version (e.g "2.2" or "3.3") and place your service definitions under the `services` key, or omit the `version` key and place your service definitions at the root of the file to use version 1. For more on the Compose file format versions, see https://docs.docker.com/compose/compose-file/"
Ответить
Дмитрий Елисеев

Потому что на composer install выдавало ошибку

Нужно добавить права на запись всем для самой папки api.

Ответить
Максим

В этом проекте у нас нет такой папки, она в проекте аукциона. Хотя впрочем, здесь это сработало по аналогии. Спасибо!

Ответить
slo_nik

Добрый день, Дмитрий.

Подскажите, пожалуйста, почему при создании cli interpreter у меня в path mappings добавляется ещё один путь?

/home/slonik/.config/JetBrains/PhpStorm2022.3/scratches->/opt/stratches

Посностью path mappings выглядит так:

<Project root>->/app;/home/slonik/.config/JetBrains/PhpStorm2022.3/scratches->/opt/stratches

Пытаюсь удалить его в Edit Progect Path Mappings, но он не активен.

Откуда подставляется этот путь и как его удалить, если он не нужен?

Версия PhpStorm 2022.3

Ответить
Дмитрий Елисеев

Недавно в JetBrains добавили Scratch files. Это они теперь монтируются.

Ответить
slo_nik

А можно ли это как-то отключить?

Под это создаётся image, container и volume. Какой толк от этого?

Ответить
Дмитрий Елисеев

Может можно. Не интересовался.

Ответить
Кирилл

Дмитрий, подскажите пожалуйста, у меня нарисовалась проблема с правами у php-cli, не удается создать файл composer.json и не получается соответственно скачать все зависимости, создать папку vendor и composer.lock

file_put_contents(./composer.json): Failed to open stream: Permission denied 

Хотя все Dockerfile использую такой же, который вы показываете в данном уроке, плюс свежая установка Ubuntu, никакие права юзера не менял.

Ответить
Кирилл

Проблема была сугубо в правах пользователя, у меня права были на папку, где лежит проект, были 775, поменял на 777 (для локальной разработки вполне норм, т.к. я один юзер на моем компе) все начало работать корректно.

Ну и плюс рекомендую тем, у кого лезут ошибки при установке, почитать комменты выше) Возможно там есть ответ на вопрос)

Ответить
Зарегистрируйтесь или войдите чтобы оставить комментарий

Или войти через:

Google
GitHub
Yandex
MailRu