Обновление версии PHP - в докер-контейнере, стажировка программистов

Создаём локальную копию удалённого репозитория, с которым будем работать

git clone httрs://<your-name>@bitbucket.org/vedro-compota/ktu-articles.git

А так же клонируем репозитории (если это не было сделано раньше), без которых не получится запустить данный проект

git clone https://<your-name>@bitbucket.org/vedro-compota/ktu-backend-pack.git
git clone https://<your-name>@bitbucket.org/vedro-compota/ktu-backend-test.git

в этих репозиториях выполняем команду composer install, если этого не было сделано ранее

Затем переходим в папку проекта, над которым нужно работать

cd /var/www/ktu-articles

Подтягиваем зависимости (создаётся папка vendor)

composer install

Собираем и запускаем контейнеры

make docker.start.all

Можно убедиться, что контейнеры запущены

docker ps

Посмотрим, какая версия php сейчас у нас в контейнере

docker exec -it ktu-articles_php php -v

например:

PHP 8.3.0 (cli) (built: Dec 16 2023 02:58:37) (NTS)

Запустим функциональные тесты

make cept.functional

на выходе должно получиться что-то вроде этого:

Codeception PHP Testing Framework v5.1.2 httрs://stand-with-ukraine.pp.ua

App\Tests.functional Tests (5)
------------------------------------------------------------------------------------
✔ PostCest: Test post creating by simple user vasya(0.35s)
✔ PostCest: Can view prevously created post(0.26s)
✔ PostCest: Test post creating validate(0.23s)
✔ PostCest: Can not edit by simple user article created by other simple user(0.22s)
✔ PostCest: Can edit and delete by admin article created by other simple user(0.22s)
-------------------------------------------------------------------------------------
Time: 00:02.128, Memory: 46.50 MB

OK (5 tests, 9 assertions)

Далее собственно работа над проектом

Сначала убедимся, что мы находимся в ветке мастер

git branch
* master

На всякий случай обновим мастер, чтобы точно ответвится от последней версии

git pull
Already up to date.

Создадим новую ветку по имени и ID задачи и сразу перейдём в неё

git checkout -b vladimir1978/updatingPhp/BACK-116

Отредактируем файл docker/Dockerfile
список поддерживаемых образов: https://github.com/docker-library/docs/b...
найдём версию xdebug, которая совместима с PHP 8.4.7: https://xdebug.org/docs/compat

было:

FROM php:8.3.0-fpm-alpine3.19

RUN apk --no-cache update \
    && apk add --no-cache autoconf g++ make \
    postgresql-dev linux-headers
RUN pecl install xdebug-3.3.0 \
...

стало:

FROM php:8.4.7-fpm-alpine3.21

RUN apk --no-cache update \
    && apk add --no-cache autoconf g++ make \
    postgresql-dev linux-headers
RUN pecl install xdebug-3.4.0 \
...

Изменили образ, теперь нужно пересобрать все контейнеры

make docker.rebuild.all

Посмотрим, какая версия php сейчас у нас в контейнере

docker exec -it ktu-articles_php php -v

должна стать 8.4.7:

PHP 8.4.7 (cli) (built: May  8 2025 21:27:24) (NTS)

Отредактируем файл composer.json
Версия 2.12.0 DoctrineBundle — стабильная и протестированная, совместимая с Doctrine ORM 2.x и 3.x, и она сохраняет ожидаемое поведение со старым способом задания id (передаётся id, равный null).
Поэтому, оставим фиксированную версию doctrine/doctrine-bundle:

"doctrine/doctrine-bundle": "2.12.0"

Необязательно, но (так как у нас уже версия PHP 8.4 и полифилл для версии 8.3 нам уже ни для чего не нужен) можно поддержать традицию и добавить в "replace" строчку:

"symfony/polyfill-php83": "*"

Применим наши изменения и заодно обновим все зависимости проекта до актуальных версий

composer update

Ещё раз запустим функциональные тесты

make cept.functional

Если видим, что задача решена и всё ОК, - добавляем, коммитим и пушим изменения

git add .
git commit . -m "Обновлена версия php до 8.4.7 для бэкэнда статей"
git push
git push --set-upstream origin vladimir1978/updatingPhp/BACK-116

Материалы

Поддерживаемые образы: https://github.com/docker-library/docs/b...
Найти версию xdebug, которая совместима с PHP 8.4: https://xdebug.org/docs/compat
Доходчиво о командах composer install и composer update: https://medium.com/phpyh/dont-ignore-com...