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

Спасибо!
Крутой урок!
Спасибо большое за урок. Вроде бы знакомая информация, но есть много интересных тонкостей
Дабавьте лайки. Хочется поставить лайк но нет такой возможности :) :)
Доброе утро.
Самый лучший "лайк" это написать словами благодарность Дмитрию.
p.s. Что вы, в самом деле, как неандертальцы!!! Что, без "наскальной" живописи никак не можете выразить свои мысли?
Неандерталец это ты, раз не понял что я своим комментарием выразил слова благодарности в завуалированной форме.
Не лайки а линк доната, куда можно ливануть бабла в багодарность, К тому же надо учитывать, что реализация нового функционала, отнимет время от уроков, которые и так не особо часто выходят, поэтому не стоит отвлекать Диму всякой не нужной хернёй. Спасибо, за урок Дима.
Спасибо большое, ждём следующих эпизодов.
С нетерпением жду продолжения именно этого проекта...
Шикарный урок!
Дмитрий, как всегда урок прекрасен.
Благодарю.
Видео: 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.
В этом проекте у нас нет такой папки, она в проекте аукциона. Хотя впрочем, здесь это сработало по аналогии. Спасибо!
Добрый день, Дмитрий.
Подскажите, пожалуйста, почему при создании 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. Это они теперь монтируются.
А можно ли это как-то отключить?
Под это создаётся 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 (для локальной разработки вполне норм, т.к. я один юзер на моем компе) все начало работать корректно.
Ну и плюс рекомендую тем, у кого лезут ошибки при установке, почитать комменты выше) Возможно там есть ответ на вопрос)
Ошибка на строке
RUN addgroup -g 1000 app && adduser -u 1000 -G app /bin/sh -D app
/bin/sh: groupadd: not found
The command '/bin/sh -c groupadd -g 1000...' returned a non-zero code: 127
и не только на groupadd ругается, но и, например, на apt-get тоже.
Как исправить?
Проблема из-за разных дистрибутивов Linux.
Команды groupadd и apt-get используются в Debian и Ubuntu, а мы используем addgroup и apk для Alpine.
Дмитрий, добрый день! Расскажите пожалуйста подробнее, какой профит мы получаем от контейнера php-cli? Или тут сугубо философия? Просто не понимаю, зачем добавлять отдельный контейнер, если мы можем обойтись без него, ведь php-cli у нас уже есть в контейнере php-fpm.
При таком разделении мы можем :
wait-for-it.sh, которые не нужны в php-fpmДобрый день!
Не получается установить psalm. На команде
docker compose run --rm php-cli ./vendor/bin/psalm --init
говорит
PHP Fatal error: Uncaught Psalm\Exception\ConfigException: Config not found for path /app/vendor/bin/psalm in /app/vendor/vimeo/psalm/src/Psalm/Checker/ProjectChecker.php:767
Stack trace:
#0 /app/vendor/vimeo/psalm/src/Psalm/Checker/ProjectChecker.php(448): Psalm\Checker\ProjectChecker->getConfigForPath('/app/vendor/bin...')
#1 /app/vendor/vimeo/psalm/bin/psalm(172): Psalm\Checker\ProjectChecker->checkFile('/app/vendor/bin...')
#2 /app/vendor/bin/psalm(119): include('/app/vendor/vim...')
#3 {main}
thrown in /app/vendor/vimeo/psalm/src/Psalm/Checker/ProjectChecker.php on line 767
Дмитрий, добрый день!
С учетом того, что PhpStorm ушел из России, могли бы вы записать скринкаст с аналогичными настройками для VSCode?
Дмитрий, здравствуйте. Сначала хочу сказать спасибо вам и вашей команде(Юле и остальным если они появились)за ваш проект.
У меня есть несколько пожеланий к вашему порталу:
Заходя на страницу урока я первым делом пытаюсь понять когда этот урок был сделан, просто потому, что смотря его нужно делать поправку на устаревание знаний представленных в видео. И я обычно это делаю так - иду и смотрю когда был первый комментарий к этому видео, но я думаю было бы лучше добавить отдельную строчку с этой датой, а так же возможно если вы перезаписываете видео, то можно было бы добавить две даты - даты создания урока, и дата перезаливки нового видео к уроку если оно было.
Так же, ваш проект существует уже очень долго и есть проблема устаревания знаний, но понятно что если перезаписывать урок в длинной цепочке, то, возможно, потребуется перезаписывать и дальнейшие уроки в цепочке, но это не рационально, но вот что было бы хорошо добавить под видео текстовое поле которое вы можете редактировать и туда можно было бы вписать кратко что изменилось со времени выпуска видео, и хорошо бы указать тут тоже дату изменения этого поля вами, чтобы понимать насколько этот текст также мог устареть.
А вот и мой вопрос про актуальность(ответ на него можно было бы вписать в то поле, которое я предложил выше). Дмитрий, подскажите пожалуйста, за время прошедшее с записи этого урока, что-то поменяись ли у вас предпочтения по линтерам и статическим анализаторам? Какие пакеты вы бы использовали сейчас начиная новый проект?
Спасибо!